~ubuntu-branches/ubuntu/karmic/mysql-dfsg-5.1/karmic

« back to all changes in this revision

Viewing changes to mysql-test/suite/parts/r/partition_basic_innodb.result

  • Committer: Bazaar Package Importer
  • Author(s): Mathias Gug
  • Date: 2009-02-10 16:42:05 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20090210164205-ej41ocvm4z1s14nq
Tags: 5.1.31-1ubuntu1
* Merge from debian experimental, remaining changes: 
  - debian/mysql-server-5.1.config: ask for MySQL root password at priority
    high instead of medium so that the password prompt is seen on a default
    install. (LP: #319843)
  - debian/control: 
    + Don't build mysql-server, mysql-client, mysql-common and 
      libmysqlclient15-dev binary packages since they're still provided 
      by mysql-dfsg-5.0.
    + Rename libmysqlclient-dev package to libmysqlclient16-dev (LP: #316280).
      Make it conflict with libmysqlclient15-dev.
    + Make mysql-{client,server}-5.1 packages conflict and
      replace mysql-{client,server}-5.0, but not provide 
      mysql-{client,server}.
    + Depend on a specific version of mysql-common rather than the src 
      version of mysql-dfsg-5.1 since mysql-common is currently part of
      mysql-dfsg-5.0.
  - debian/rules: added -fno-strict-aliasing to CFLAGS to get
    around mysql testsuite build failures.
* debian/patches/92_ssl_test_cert.dpatch: certificate expiration in 
  test suite (LP: #323755).
* Dropped changes:
  - all of the changes made to support both 5.0 and 5.1 installed at the
    same time have been dropped now that amarok doesn't depend on
    mysql-server-5.1 anymore.

Show diffs side-by-side

added added

removed removed

Lines of Context:
72
72
  `f_char1` char(20) DEFAULT NULL,
73
73
  `f_char2` char(20) DEFAULT NULL,
74
74
  `f_charbig` varchar(1000) DEFAULT NULL
75
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
 
75
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
76
/*!50100 PARTITION BY HASH (f_int1)
 
77
PARTITIONS 2 */
76
78
 
77
79
unified filelist
78
80
t1.frm
525
527
  `f_char1` char(20) DEFAULT NULL,
526
528
  `f_char2` char(20) DEFAULT NULL,
527
529
  `f_charbig` varchar(1000) DEFAULT NULL
528
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
 
530
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
531
/*!50100 PARTITION BY KEY (f_int1)
 
532
PARTITIONS 5 */
529
533
 
530
534
unified filelist
531
535
t1.frm
986
990
  `f_char1` char(20) DEFAULT NULL,
987
991
  `f_char2` char(20) DEFAULT NULL,
988
992
  `f_charbig` varchar(1000) DEFAULT NULL
989
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
993
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
994
/*!50100 PARTITION BY LIST (MOD(f_int1,4))
 
995
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
996
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
997
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
998
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
999
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
1000
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
1001
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
1002
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
990
1003
 
991
1004
unified filelist
992
1005
t1.frm
1445
1458
  `f_char1` char(20) DEFAULT NULL,
1446
1459
  `f_char2` char(20) DEFAULT NULL,
1447
1460
  `f_charbig` varchar(1000) DEFAULT NULL
1448
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
1461
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
1462
/*!50100 PARTITION BY RANGE (f_int1)
 
1463
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
1464
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
1465
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
1466
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
1467
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
1468
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
1449
1469
 
1450
1470
unified filelist
1451
1471
t1.frm
1900
1920
  `f_char1` char(20) DEFAULT NULL,
1901
1921
  `f_char2` char(20) DEFAULT NULL,
1902
1922
  `f_charbig` varchar(1000) DEFAULT NULL
1903
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
1923
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
1924
/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
 
1925
SUBPARTITION BY HASH (f_int1)
 
1926
SUBPARTITIONS 2
 
1927
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
1928
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
1929
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
1930
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
1904
1931
 
1905
1932
unified filelist
1906
1933
t1.frm
2361
2388
  `f_char1` char(20) DEFAULT NULL,
2362
2389
  `f_char2` char(20) DEFAULT NULL,
2363
2390
  `f_charbig` varchar(1000) DEFAULT NULL
2364
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
2391
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
2392
/*!50100 PARTITION BY RANGE (f_int1)
 
2393
SUBPARTITION BY KEY (f_int1)
 
2394
(PARTITION part1 VALUES LESS THAN (0)
 
2395
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
2396
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
2397
 PARTITION part2 VALUES LESS THAN (5)
 
2398
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
2399
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
2400
 PARTITION part3 VALUES LESS THAN (10)
 
2401
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
2402
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
2403
 PARTITION part4 VALUES LESS THAN (2147483646)
 
2404
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
2405
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
2365
2406
 
2366
2407
unified filelist
2367
2408
t1.frm
2824
2865
  `f_char1` char(20) DEFAULT NULL,
2825
2866
  `f_char2` char(20) DEFAULT NULL,
2826
2867
  `f_charbig` varchar(1000) DEFAULT NULL
2827
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
2868
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
2869
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
2870
SUBPARTITION BY HASH (f_int1 + 1)
 
2871
(PARTITION part1 VALUES IN (0)
 
2872
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
2873
  SUBPARTITION sp12 ENGINE = InnoDB),
 
2874
 PARTITION part2 VALUES IN (1)
 
2875
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
2876
  SUBPARTITION sp22 ENGINE = InnoDB),
 
2877
 PARTITION part3 VALUES IN (2)
 
2878
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
2879
  SUBPARTITION sp32 ENGINE = InnoDB),
 
2880
 PARTITION part4 VALUES IN (NULL)
 
2881
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
2882
  SUBPARTITION sp42 ENGINE = InnoDB)) */
2828
2883
 
2829
2884
unified filelist
2830
2885
t1.frm
3281
3336
  `f_char1` char(20) DEFAULT NULL,
3282
3337
  `f_char2` char(20) DEFAULT NULL,
3283
3338
  `f_charbig` varchar(1000) DEFAULT NULL
3284
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
3339
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
3340
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
3341
SUBPARTITION BY KEY (f_int1)
 
3342
SUBPARTITIONS 3
 
3343
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
3344
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
3345
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
3285
3346
 
3286
3347
unified filelist
3287
3348
t1.frm
3736
3797
  `f_char1` char(20) DEFAULT NULL,
3737
3798
  `f_char2` char(20) DEFAULT NULL,
3738
3799
  `f_charbig` varchar(1000) DEFAULT NULL
3739
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
 
3800
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
3801
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
3802
PARTITIONS 2 */
3740
3803
 
3741
3804
unified filelist
3742
3805
t1.frm
4189
4252
  `f_char1` char(20) DEFAULT NULL,
4190
4253
  `f_char2` char(20) DEFAULT NULL,
4191
4254
  `f_charbig` varchar(1000) DEFAULT NULL
4192
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
 
4255
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
4256
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
4257
PARTITIONS 5 */
4193
4258
 
4194
4259
unified filelist
4195
4260
t1.frm
4650
4715
  `f_char1` char(20) DEFAULT NULL,
4651
4716
  `f_char2` char(20) DEFAULT NULL,
4652
4717
  `f_charbig` varchar(1000) DEFAULT NULL
4653
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
4718
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
4719
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
4720
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
4721
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
4722
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
4723
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
4724
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
4725
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
4726
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
4727
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
4654
4728
 
4655
4729
unified filelist
4656
4730
t1.frm
5109
5183
  `f_char1` char(20) DEFAULT NULL,
5110
5184
  `f_char2` char(20) DEFAULT NULL,
5111
5185
  `f_charbig` varchar(1000) DEFAULT NULL
5112
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
5186
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
5187
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
5188
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
5189
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
5190
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
5191
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
5192
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
5193
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
5113
5194
 
5114
5195
unified filelist
5115
5196
t1.frm
5564
5645
  `f_char1` char(20) DEFAULT NULL,
5565
5646
  `f_char2` char(20) DEFAULT NULL,
5566
5647
  `f_charbig` varchar(1000) DEFAULT NULL
5567
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
5648
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
5649
/*!50100 PARTITION BY RANGE (f_int1)
 
5650
SUBPARTITION BY HASH (f_int2)
 
5651
SUBPARTITIONS 2
 
5652
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
5653
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
5654
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
5655
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
5568
5656
 
5569
5657
unified filelist
5570
5658
t1.frm
6023
6111
  `f_char1` char(20) DEFAULT NULL,
6024
6112
  `f_char2` char(20) DEFAULT NULL,
6025
6113
  `f_charbig` varchar(1000) DEFAULT NULL
6026
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
6114
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
6115
/*!50100 PARTITION BY RANGE (f_int1)
 
6116
SUBPARTITION BY KEY (f_int2)
 
6117
(PARTITION part1 VALUES LESS THAN (0)
 
6118
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
6119
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
6120
 PARTITION part2 VALUES LESS THAN (5)
 
6121
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
6122
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
6123
 PARTITION part3 VALUES LESS THAN (10)
 
6124
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
6125
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
6126
 PARTITION part4 VALUES LESS THAN (2147483646)
 
6127
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
6128
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
6027
6129
 
6028
6130
unified filelist
6029
6131
t1.frm
6482
6584
  `f_char1` char(20) DEFAULT NULL,
6483
6585
  `f_char2` char(20) DEFAULT NULL,
6484
6586
  `f_charbig` varchar(1000) DEFAULT NULL
6485
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
6587
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
6588
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
6589
SUBPARTITION BY HASH (f_int2 + 1)
 
6590
(PARTITION part1 VALUES IN (0)
 
6591
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
6592
  SUBPARTITION sp12 ENGINE = InnoDB),
 
6593
 PARTITION part2 VALUES IN (1)
 
6594
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
6595
  SUBPARTITION sp22 ENGINE = InnoDB),
 
6596
 PARTITION part3 VALUES IN (2)
 
6597
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
6598
  SUBPARTITION sp32 ENGINE = InnoDB),
 
6599
 PARTITION part4 VALUES IN (NULL)
 
6600
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
6601
  SUBPARTITION sp42 ENGINE = InnoDB)) */
6486
6602
 
6487
6603
unified filelist
6488
6604
t1.frm
6939
7055
  `f_char1` char(20) DEFAULT NULL,
6940
7056
  `f_char2` char(20) DEFAULT NULL,
6941
7057
  `f_charbig` varchar(1000) DEFAULT NULL
6942
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
7058
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
7059
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
7060
SUBPARTITION BY KEY (f_int2)
 
7061
SUBPARTITIONS 3
 
7062
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
7063
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
7064
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
6943
7065
 
6944
7066
unified filelist
6945
7067
t1.frm
7400
7522
  `f_charbig` varchar(1000) DEFAULT NULL,
7401
7523
  PRIMARY KEY (`f_int2`,`f_int1`),
7402
7524
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
7403
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
7404
 
 
7405
 
unified filelist
7406
 
t1.frm
7407
 
t1.par
7408
 
 
7409
 
# check prerequisites-1 success:    1
7410
 
# check COUNT(*) success:    1
7411
 
# check MIN/MAX(f_int1) success:    1
7412
 
# check MIN/MAX(f_int2) success:    1
7413
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7414
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7415
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7416
 
WHERE f_int1 IN (2,3);
7417
 
ERROR 23000: Can't write; duplicate key in table 't1'
7418
 
# check prerequisites-3 success:    1
7419
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7420
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7421
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7422
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7423
 
WHERE f_int1 IN (2,3);
7424
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
7425
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7426
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7427
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7428
 
WHERE f_int1 IN (2,3);
7429
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
7430
 
# check read via f_int1 success: 1
7431
 
# check read via f_int2 success: 1
7432
 
        
7433
 
# check multiple-1 success:     1
7434
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7435
 
        
7436
 
# check multiple-2 success:     1
7437
 
INSERT INTO t1 SELECT * FROM t0_template
7438
 
WHERE MOD(f_int1,3) = 0;
7439
 
        
7440
 
# check multiple-3 success:     1
7441
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
7442
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7443
 
AND @max_row_div2 + @max_row_div4;
7444
 
        
7445
 
# check multiple-4 success:     1
7446
 
DELETE FROM t1
7447
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7448
 
AND @max_row_div2 + @max_row_div4 + @max_row;
7449
 
        
7450
 
# check multiple-5 success:     1
7451
 
SELECT COUNT(*) INTO @try_count FROM t0_template
7452
 
WHERE MOD(f_int1,3) = 0
7453
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7454
 
SELECT COUNT(*) INTO @clash_count
7455
 
FROM t1 INNER JOIN t0_template USING(f_int1)
7456
 
WHERE MOD(f_int1,3) = 0
7457
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7458
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7459
 
INSERT INTO t1
7460
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
7461
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7462
 
f_charbig = '#SINGLE#';
7463
 
        
7464
 
# check single-1 success:       1
7465
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7466
 
INSERT INTO t1
7467
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
7468
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7469
 
f_charbig = '#SINGLE#';
7470
 
        
7471
 
# check single-2 success:       1
7472
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7473
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7474
 
UPDATE t1 SET f_int1 = @cur_value2
7475
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7476
 
        
7477
 
# check single-3 success:       1
7478
 
SET @cur_value1= -1;
7479
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7480
 
UPDATE t1 SET f_int1 = @cur_value1
7481
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7482
 
        
7483
 
# check single-4 success:       1
7484
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
7485
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7486
 
        
7487
 
# check single-5 success:       1
7488
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7489
 
        
7490
 
# check single-6 success:       1
7491
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7492
 
        
7493
 
# check single-7 success:       1
7494
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7495
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7496
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7497
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7498
 
f_charbig = '#NULL#';
7499
 
INSERT INTO t1
7500
 
SET f_int1 = NULL , f_int2 = -@max_row,
7501
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7502
 
f_charbig = '#NULL#';
7503
 
ERROR 23000: Column 'f_int1' cannot be null
7504
 
# check null success:    1
7505
 
DELETE FROM t1
7506
 
WHERE f_int1 = 0 AND f_int2 = 0
7507
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7508
 
AND f_charbig = '#NULL#';
7509
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7510
 
SELECT f_int1, f_int1, '', '', 'was inserted'
7511
 
   FROM t0_template source_tab
7512
 
WHERE MOD(f_int1,3) = 0
7513
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
7514
 
ON DUPLICATE KEY
7515
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7516
 
f_int2 = 2 * @max_row + source_tab.f_int1,
7517
 
f_charbig = 'was updated';
7518
 
        
7519
 
# check unique-1-a success:     1
7520
 
        
7521
 
# check unique-1-b success:     1
7522
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7523
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7524
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7525
 
f_charbig = CONCAT('===',f_char1,'===')
7526
 
WHERE f_charbig = 'was updated';
7527
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7528
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7529
 
   FROM t0_template source_tab
7530
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7531
 
        
7532
 
# check replace success:        1
7533
 
DELETE FROM t1
7534
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7535
 
DELETE FROM t1
7536
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7537
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7538
 
UPDATE t1 SET f_int2 = f_int1,
7539
 
f_char1 = CAST(f_int1 AS CHAR),
7540
 
f_char2 = CAST(f_int1 AS CHAR),
7541
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7542
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7543
 
SET AUTOCOMMIT= 0;
7544
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7545
 
SELECT f_int1, f_int1, '', '', 'was inserted'
7546
 
FROM t0_template source_tab
7547
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7548
 
        
7549
 
# check transactions-1 success:         1
7550
 
COMMIT WORK;
7551
 
        
7552
 
# check transactions-2 success:         1
7553
 
ROLLBACK WORK;
7554
 
        
7555
 
# check transactions-3 success:         1
7556
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7557
 
COMMIT WORK;
7558
 
ROLLBACK WORK;
7559
 
        
7560
 
# check transactions-4 success:         1
7561
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7562
 
SELECT f_int1, f_int1, '', '', 'was inserted'
7563
 
FROM t0_template source_tab
7564
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7565
 
        
7566
 
# check transactions-5 success:         1
7567
 
ROLLBACK WORK;
7568
 
        
7569
 
# check transactions-6 success:         1
7570
 
# INFO: Storage engine used for t1 seems to be transactional.
7571
 
COMMIT;
7572
 
        
7573
 
# check transactions-7 success:         1
7574
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7575
 
COMMIT WORK;
7576
 
SET @@session.sql_mode = 'traditional';
7577
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7578
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7579
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7580
 
'', '', 'was inserted' FROM t0_template
7581
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7582
 
ERROR 22012: Division by 0
7583
 
COMMIT;
7584
 
        
7585
 
# check transactions-8 success:         1
7586
 
# INFO: Storage engine used for t1 seems to be able to revert
7587
 
#       changes made by the failing statement.
7588
 
SET @@session.sql_mode = '';
7589
 
SET AUTOCOMMIT= 1;
7590
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
7591
 
COMMIT WORK;
7592
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7593
 
        
7594
 
# check special-1 success:      1
7595
 
UPDATE t1 SET f_charbig = '';
7596
 
        
7597
 
# check special-2 success:      1
7598
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7599
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7600
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7601
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7602
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7603
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7604
 
'just inserted' FROM t0_template
7605
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7606
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7607
 
BEGIN
7608
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7609
 
f_charbig = 'updated by trigger'
7610
 
      WHERE f_int1 = new.f_int1;
7611
 
END|
7612
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7613
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7614
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7615
 
        
7616
 
# check trigger-1 success:      1
7617
 
DROP TRIGGER trg_1;
7618
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7619
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7620
 
f_charbig = 'just inserted'
7621
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7622
 
DELETE FROM t0_aux
7623
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7624
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7625
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7626
 
'just inserted' FROM t0_template
7627
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7628
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7629
 
BEGIN
7630
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7631
 
f_charbig = 'updated by trigger'
7632
 
      WHERE f_int1 = new.f_int1;
7633
 
END|
7634
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7635
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7636
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7637
 
        
7638
 
# check trigger-2 success:      1
7639
 
DROP TRIGGER trg_1;
7640
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7641
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7642
 
f_charbig = 'just inserted'
7643
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7644
 
DELETE FROM t0_aux
7645
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7646
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7647
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7648
 
'just inserted' FROM t0_template
7649
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7650
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7651
 
BEGIN
7652
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7653
 
f_charbig = 'updated by trigger'
7654
 
      WHERE f_int1 = new.f_int1;
7655
 
END|
7656
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7657
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7658
 
        
7659
 
# check trigger-3 success:      1
7660
 
DROP TRIGGER trg_1;
7661
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7662
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7663
 
f_charbig = 'just inserted'
7664
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7665
 
DELETE FROM t0_aux
7666
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7667
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7668
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7669
 
'just inserted' FROM t0_template
7670
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7671
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7672
 
BEGIN
7673
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7674
 
f_charbig = 'updated by trigger'
7675
 
      WHERE f_int1 = - old.f_int1;
7676
 
END|
7677
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7678
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7679
 
        
7680
 
# check trigger-4 success:      1
7681
 
DROP TRIGGER trg_1;
7682
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7683
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7684
 
f_charbig = 'just inserted'
7685
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7686
 
DELETE FROM t0_aux
7687
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7688
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7689
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7690
 
'just inserted' FROM t0_template
7691
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7692
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7693
 
BEGIN
7694
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7695
 
f_charbig = 'updated by trigger'
7696
 
      WHERE f_int1 = new.f_int1;
7697
 
END|
7698
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7699
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7700
 
        
7701
 
# check trigger-5 success:      1
7702
 
DROP TRIGGER trg_1;
7703
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7704
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7705
 
f_charbig = 'just inserted'
7706
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7707
 
DELETE FROM t0_aux
7708
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7709
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7710
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7711
 
'just inserted' FROM t0_template
7712
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7713
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7714
 
BEGIN
7715
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7716
 
f_charbig = 'updated by trigger'
7717
 
      WHERE f_int1 = - old.f_int1;
7718
 
END|
7719
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7720
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7721
 
        
7722
 
# check trigger-6 success:      1
7723
 
DROP TRIGGER trg_1;
7724
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7725
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7726
 
f_charbig = 'just inserted'
7727
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7728
 
DELETE FROM t0_aux
7729
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7730
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7731
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7732
 
'just inserted' FROM t0_template
7733
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7734
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7735
 
BEGIN
7736
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7737
 
f_charbig = 'updated by trigger'
7738
 
      WHERE f_int1 = - old.f_int1;
7739
 
END|
7740
 
DELETE FROM t0_aux
7741
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7742
 
        
7743
 
# check trigger-7 success:      1
7744
 
DROP TRIGGER trg_1;
7745
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7746
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7747
 
f_charbig = 'just inserted'
7748
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7749
 
DELETE FROM t0_aux
7750
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7751
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7752
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7753
 
'just inserted' FROM t0_template
7754
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7755
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7756
 
BEGIN
7757
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7758
 
f_charbig = 'updated by trigger'
7759
 
      WHERE f_int1 = - old.f_int1;
7760
 
END|
7761
 
DELETE FROM t0_aux
7762
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7763
 
        
7764
 
# check trigger-8 success:      1
7765
 
DROP TRIGGER trg_1;
7766
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7767
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7768
 
f_charbig = 'just inserted'
7769
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7770
 
DELETE FROM t0_aux
7771
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7772
 
DELETE FROM t1
7773
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7774
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7775
 
BEGIN
7776
 
SET new.f_int1 = old.f_int1 + @max_row,
7777
 
new.f_int2 = old.f_int2 - @max_row,
7778
 
new.f_charbig = '####updated per update trigger####';
7779
 
END|
7780
 
UPDATE t1
7781
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7782
 
f_charbig = '####updated per update statement itself####';
7783
 
        
7784
 
# check trigger-9 success:      1
7785
 
DROP TRIGGER trg_2;
7786
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7787
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7788
 
f_charbig = CONCAT('===',f_char1,'===');
7789
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7790
 
BEGIN
7791
 
SET new.f_int1 = new.f_int1 + @max_row,
7792
 
new.f_int2 = new.f_int2 - @max_row,
7793
 
new.f_charbig = '####updated per update trigger####';
7794
 
END|
7795
 
UPDATE t1
7796
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7797
 
f_charbig = '####updated per update statement itself####';
7798
 
        
7799
 
# check trigger-10 success:     1
7800
 
DROP TRIGGER trg_2;
7801
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7802
 
f_int2 = CAST(f_char1 AS SIGNED INT),
7803
 
f_charbig = CONCAT('===',f_char1,'===');
7804
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7805
 
BEGIN
7806
 
SET new.f_int1 = @my_max1 + @counter,
7807
 
new.f_int2 = @my_min2 - @counter,
7808
 
new.f_charbig = '####updated per insert trigger####';
7809
 
SET @counter = @counter + 1;
7810
 
END|
7811
 
SET @counter = 1;
7812
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7813
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7814
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7815
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7816
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7817
 
ORDER BY f_int1;
7818
 
DROP TRIGGER trg_3;
7819
 
        
7820
 
# check trigger-11 success:     1
7821
 
DELETE FROM t1
7822
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7823
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7824
 
AND f_charbig = '####updated per insert trigger####';
7825
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7826
 
BEGIN
7827
 
SET new.f_int1 = @my_max1 + @counter,
7828
 
new.f_int2 = @my_min2 - @counter,
7829
 
new.f_charbig = '####updated per insert trigger####';
7830
 
SET @counter = @counter + 1;
7831
 
END|
7832
 
SET @counter = 1;
7833
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7834
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
7835
 
SELECT CAST(f_int1 AS CHAR),
7836
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7837
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7838
 
ORDER BY f_int1;
7839
 
DROP TRIGGER trg_3;
7840
 
        
7841
 
# check trigger-12 success:     1
7842
 
DELETE FROM t1
7843
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7844
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7845
 
AND f_charbig = '####updated per insert trigger####';
7846
 
ANALYZE  TABLE t1;
7847
 
Table   Op      Msg_type        Msg_text
7848
 
test.t1 analyze status  OK
7849
 
CHECK    TABLE t1 EXTENDED;
7850
 
Table   Op      Msg_type        Msg_text
7851
 
test.t1 check   status  OK
7852
 
CHECKSUM TABLE t1 EXTENDED;
7853
 
Table   Checksum
7854
 
test.t1 <some_value>
7855
 
OPTIMIZE TABLE t1;
7856
 
Table   Op      Msg_type        Msg_text
7857
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
7858
 
test.t1 optimize        status  OK
7859
 
# check layout success:    1
7860
 
REPAIR   TABLE t1 EXTENDED;
7861
 
Table   Op      Msg_type        Msg_text
7862
 
test.t1 repair  note    The storage engine for the table doesn't support repair
7863
 
# check layout success:    1
7864
 
TRUNCATE t1;
7865
 
        
7866
 
# check TRUNCATE success:       1
7867
 
# check layout success:    1
7868
 
# End usability test (inc/partition_check.inc)
7869
 
DROP TABLE t1;
7870
 
CREATE TABLE t1 (
7871
 
f_int1 INTEGER,
7872
 
f_int2 INTEGER,
7873
 
f_char1 CHAR(20),
7874
 
f_char2 CHAR(20),
7875
 
f_charbig VARCHAR(1000)
7876
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
7877
 
)
7878
 
PARTITION BY KEY(f_int1) PARTITIONS 5;
7879
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7880
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
7881
 
# Start usability test (inc/partition_check.inc)
7882
 
create_command
7883
 
SHOW CREATE TABLE t1;
7884
 
Table   Create Table
7885
 
t1      CREATE TABLE `t1` (
7886
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
7887
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
7888
 
  `f_char1` char(20) DEFAULT NULL,
7889
 
  `f_char2` char(20) DEFAULT NULL,
7890
 
  `f_charbig` varchar(1000) DEFAULT NULL,
7891
 
  PRIMARY KEY (`f_int2`,`f_int1`),
7892
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
7893
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
7894
 
 
7895
 
unified filelist
7896
 
t1.frm
7897
 
t1.par
7898
 
 
7899
 
# check prerequisites-1 success:    1
7900
 
# check COUNT(*) success:    1
7901
 
# check MIN/MAX(f_int1) success:    1
7902
 
# check MIN/MAX(f_int2) success:    1
7903
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7904
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7905
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7906
 
WHERE f_int1 IN (2,3);
7907
 
ERROR 23000: Can't write; duplicate key in table 't1'
7908
 
# check prerequisites-3 success:    1
7909
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7910
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7911
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7912
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7913
 
WHERE f_int1 IN (2,3);
7914
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
7915
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7916
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7917
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7918
 
WHERE f_int1 IN (2,3);
7919
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
7920
 
# check read via f_int1 success: 1
7921
 
# check read via f_int2 success: 1
7922
 
        
7923
 
# check multiple-1 success:     1
7924
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7925
 
        
7926
 
# check multiple-2 success:     1
7927
 
INSERT INTO t1 SELECT * FROM t0_template
7928
 
WHERE MOD(f_int1,3) = 0;
7929
 
        
7930
 
# check multiple-3 success:     1
7931
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
7932
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7933
 
AND @max_row_div2 + @max_row_div4;
7934
 
        
7935
 
# check multiple-4 success:     1
7936
 
DELETE FROM t1
7937
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7938
 
AND @max_row_div2 + @max_row_div4 + @max_row;
7939
 
        
7940
 
# check multiple-5 success:     1
7941
 
SELECT COUNT(*) INTO @try_count FROM t0_template
7942
 
WHERE MOD(f_int1,3) = 0
7943
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7944
 
SELECT COUNT(*) INTO @clash_count
7945
 
FROM t1 INNER JOIN t0_template USING(f_int1)
7946
 
WHERE MOD(f_int1,3) = 0
7947
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7948
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7949
 
INSERT INTO t1
7950
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
7951
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7952
 
f_charbig = '#SINGLE#';
7953
 
        
7954
 
# check single-1 success:       1
7955
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7956
 
INSERT INTO t1
7957
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
7958
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7959
 
f_charbig = '#SINGLE#';
7960
 
        
7961
 
# check single-2 success:       1
7962
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7963
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7964
 
UPDATE t1 SET f_int1 = @cur_value2
7965
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7966
 
        
7967
 
# check single-3 success:       1
7968
 
SET @cur_value1= -1;
7969
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7970
 
UPDATE t1 SET f_int1 = @cur_value1
7971
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7972
 
        
7973
 
# check single-4 success:       1
7974
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
7975
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7976
 
        
7977
 
# check single-5 success:       1
7978
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7979
 
        
7980
 
# check single-6 success:       1
7981
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7982
 
        
7983
 
# check single-7 success:       1
7984
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7985
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7986
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7987
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7988
 
f_charbig = '#NULL#';
7989
 
INSERT INTO t1
7990
 
SET f_int1 = NULL , f_int2 = -@max_row,
7991
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7992
 
f_charbig = '#NULL#';
7993
 
ERROR 23000: Column 'f_int1' cannot be null
7994
 
# check null success:    1
7995
 
DELETE FROM t1
7996
 
WHERE f_int1 = 0 AND f_int2 = 0
7997
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7998
 
AND f_charbig = '#NULL#';
7999
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8000
 
SELECT f_int1, f_int1, '', '', 'was inserted'
8001
 
   FROM t0_template source_tab
8002
 
WHERE MOD(f_int1,3) = 0
8003
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
8004
 
ON DUPLICATE KEY
8005
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8006
 
f_int2 = 2 * @max_row + source_tab.f_int1,
8007
 
f_charbig = 'was updated';
8008
 
        
8009
 
# check unique-1-a success:     1
8010
 
        
8011
 
# check unique-1-b success:     1
8012
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8013
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8014
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8015
 
f_charbig = CONCAT('===',f_char1,'===')
8016
 
WHERE f_charbig = 'was updated';
8017
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8018
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8019
 
   FROM t0_template source_tab
8020
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8021
 
        
8022
 
# check replace success:        1
8023
 
DELETE FROM t1
8024
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8025
 
DELETE FROM t1
8026
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8027
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8028
 
UPDATE t1 SET f_int2 = f_int1,
8029
 
f_char1 = CAST(f_int1 AS CHAR),
8030
 
f_char2 = CAST(f_int1 AS CHAR),
8031
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8032
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8033
 
SET AUTOCOMMIT= 0;
8034
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8035
 
SELECT f_int1, f_int1, '', '', 'was inserted'
8036
 
FROM t0_template source_tab
8037
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8038
 
        
8039
 
# check transactions-1 success:         1
8040
 
COMMIT WORK;
8041
 
        
8042
 
# check transactions-2 success:         1
8043
 
ROLLBACK WORK;
8044
 
        
8045
 
# check transactions-3 success:         1
8046
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8047
 
COMMIT WORK;
8048
 
ROLLBACK WORK;
8049
 
        
8050
 
# check transactions-4 success:         1
8051
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8052
 
SELECT f_int1, f_int1, '', '', 'was inserted'
8053
 
FROM t0_template source_tab
8054
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8055
 
        
8056
 
# check transactions-5 success:         1
8057
 
ROLLBACK WORK;
8058
 
        
8059
 
# check transactions-6 success:         1
8060
 
# INFO: Storage engine used for t1 seems to be transactional.
8061
 
COMMIT;
8062
 
        
8063
 
# check transactions-7 success:         1
8064
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8065
 
COMMIT WORK;
8066
 
SET @@session.sql_mode = 'traditional';
8067
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8068
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8069
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8070
 
'', '', 'was inserted' FROM t0_template
8071
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8072
 
ERROR 22012: Division by 0
8073
 
COMMIT;
8074
 
        
8075
 
# check transactions-8 success:         1
8076
 
# INFO: Storage engine used for t1 seems to be able to revert
8077
 
#       changes made by the failing statement.
8078
 
SET @@session.sql_mode = '';
8079
 
SET AUTOCOMMIT= 1;
8080
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8081
 
COMMIT WORK;
8082
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8083
 
        
8084
 
# check special-1 success:      1
8085
 
UPDATE t1 SET f_charbig = '';
8086
 
        
8087
 
# check special-2 success:      1
8088
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8089
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8090
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8091
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8092
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8093
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8094
 
'just inserted' FROM t0_template
8095
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8096
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8097
 
BEGIN
8098
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8099
 
f_charbig = 'updated by trigger'
8100
 
      WHERE f_int1 = new.f_int1;
8101
 
END|
8102
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8103
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8104
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8105
 
        
8106
 
# check trigger-1 success:      1
8107
 
DROP TRIGGER trg_1;
8108
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8109
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8110
 
f_charbig = 'just inserted'
8111
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8112
 
DELETE FROM t0_aux
8113
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8114
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8115
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8116
 
'just inserted' FROM t0_template
8117
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8118
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8119
 
BEGIN
8120
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8121
 
f_charbig = 'updated by trigger'
8122
 
      WHERE f_int1 = new.f_int1;
8123
 
END|
8124
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8125
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8126
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8127
 
        
8128
 
# check trigger-2 success:      1
8129
 
DROP TRIGGER trg_1;
8130
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8131
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8132
 
f_charbig = 'just inserted'
8133
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8134
 
DELETE FROM t0_aux
8135
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8136
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8137
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8138
 
'just inserted' FROM t0_template
8139
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8140
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8141
 
BEGIN
8142
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8143
 
f_charbig = 'updated by trigger'
8144
 
      WHERE f_int1 = new.f_int1;
8145
 
END|
8146
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8147
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8148
 
        
8149
 
# check trigger-3 success:      1
8150
 
DROP TRIGGER trg_1;
8151
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8152
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8153
 
f_charbig = 'just inserted'
8154
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8155
 
DELETE FROM t0_aux
8156
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8157
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8158
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8159
 
'just inserted' FROM t0_template
8160
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8161
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8162
 
BEGIN
8163
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8164
 
f_charbig = 'updated by trigger'
8165
 
      WHERE f_int1 = - old.f_int1;
8166
 
END|
8167
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8168
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8169
 
        
8170
 
# check trigger-4 success:      1
8171
 
DROP TRIGGER trg_1;
8172
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8173
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8174
 
f_charbig = 'just inserted'
8175
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8176
 
DELETE FROM t0_aux
8177
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8178
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8179
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8180
 
'just inserted' FROM t0_template
8181
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8182
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8183
 
BEGIN
8184
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8185
 
f_charbig = 'updated by trigger'
8186
 
      WHERE f_int1 = new.f_int1;
8187
 
END|
8188
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8189
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8190
 
        
8191
 
# check trigger-5 success:      1
8192
 
DROP TRIGGER trg_1;
8193
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8194
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8195
 
f_charbig = 'just inserted'
8196
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8197
 
DELETE FROM t0_aux
8198
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8199
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8200
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8201
 
'just inserted' FROM t0_template
8202
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8203
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8204
 
BEGIN
8205
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8206
 
f_charbig = 'updated by trigger'
8207
 
      WHERE f_int1 = - old.f_int1;
8208
 
END|
8209
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8210
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8211
 
        
8212
 
# check trigger-6 success:      1
8213
 
DROP TRIGGER trg_1;
8214
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8215
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8216
 
f_charbig = 'just inserted'
8217
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8218
 
DELETE FROM t0_aux
8219
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8220
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8221
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8222
 
'just inserted' FROM t0_template
8223
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8224
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8225
 
BEGIN
8226
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8227
 
f_charbig = 'updated by trigger'
8228
 
      WHERE f_int1 = - old.f_int1;
8229
 
END|
8230
 
DELETE FROM t0_aux
8231
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8232
 
        
8233
 
# check trigger-7 success:      1
8234
 
DROP TRIGGER trg_1;
8235
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8236
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8237
 
f_charbig = 'just inserted'
8238
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8239
 
DELETE FROM t0_aux
8240
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8241
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8242
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8243
 
'just inserted' FROM t0_template
8244
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8245
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8246
 
BEGIN
8247
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8248
 
f_charbig = 'updated by trigger'
8249
 
      WHERE f_int1 = - old.f_int1;
8250
 
END|
8251
 
DELETE FROM t0_aux
8252
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8253
 
        
8254
 
# check trigger-8 success:      1
8255
 
DROP TRIGGER trg_1;
8256
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8257
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8258
 
f_charbig = 'just inserted'
8259
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8260
 
DELETE FROM t0_aux
8261
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8262
 
DELETE FROM t1
8263
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8264
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8265
 
BEGIN
8266
 
SET new.f_int1 = old.f_int1 + @max_row,
8267
 
new.f_int2 = old.f_int2 - @max_row,
8268
 
new.f_charbig = '####updated per update trigger####';
8269
 
END|
8270
 
UPDATE t1
8271
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8272
 
f_charbig = '####updated per update statement itself####';
8273
 
        
8274
 
# check trigger-9 success:      1
8275
 
DROP TRIGGER trg_2;
8276
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8277
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8278
 
f_charbig = CONCAT('===',f_char1,'===');
8279
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8280
 
BEGIN
8281
 
SET new.f_int1 = new.f_int1 + @max_row,
8282
 
new.f_int2 = new.f_int2 - @max_row,
8283
 
new.f_charbig = '####updated per update trigger####';
8284
 
END|
8285
 
UPDATE t1
8286
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8287
 
f_charbig = '####updated per update statement itself####';
8288
 
        
8289
 
# check trigger-10 success:     1
8290
 
DROP TRIGGER trg_2;
8291
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8292
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8293
 
f_charbig = CONCAT('===',f_char1,'===');
8294
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8295
 
BEGIN
8296
 
SET new.f_int1 = @my_max1 + @counter,
8297
 
new.f_int2 = @my_min2 - @counter,
8298
 
new.f_charbig = '####updated per insert trigger####';
8299
 
SET @counter = @counter + 1;
8300
 
END|
8301
 
SET @counter = 1;
8302
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8303
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8304
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8305
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8306
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8307
 
ORDER BY f_int1;
8308
 
DROP TRIGGER trg_3;
8309
 
        
8310
 
# check trigger-11 success:     1
8311
 
DELETE FROM t1
8312
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8313
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8314
 
AND f_charbig = '####updated per insert trigger####';
8315
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8316
 
BEGIN
8317
 
SET new.f_int1 = @my_max1 + @counter,
8318
 
new.f_int2 = @my_min2 - @counter,
8319
 
new.f_charbig = '####updated per insert trigger####';
8320
 
SET @counter = @counter + 1;
8321
 
END|
8322
 
SET @counter = 1;
8323
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8324
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
8325
 
SELECT CAST(f_int1 AS CHAR),
8326
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8327
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8328
 
ORDER BY f_int1;
8329
 
DROP TRIGGER trg_3;
8330
 
        
8331
 
# check trigger-12 success:     1
8332
 
DELETE FROM t1
8333
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8334
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8335
 
AND f_charbig = '####updated per insert trigger####';
8336
 
ANALYZE  TABLE t1;
8337
 
Table   Op      Msg_type        Msg_text
8338
 
test.t1 analyze status  OK
8339
 
CHECK    TABLE t1 EXTENDED;
8340
 
Table   Op      Msg_type        Msg_text
8341
 
test.t1 check   status  OK
8342
 
CHECKSUM TABLE t1 EXTENDED;
8343
 
Table   Checksum
8344
 
test.t1 <some_value>
8345
 
OPTIMIZE TABLE t1;
8346
 
Table   Op      Msg_type        Msg_text
8347
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
8348
 
test.t1 optimize        status  OK
8349
 
# check layout success:    1
8350
 
REPAIR   TABLE t1 EXTENDED;
8351
 
Table   Op      Msg_type        Msg_text
8352
 
test.t1 repair  note    The storage engine for the table doesn't support repair
8353
 
# check layout success:    1
8354
 
TRUNCATE t1;
8355
 
        
8356
 
# check TRUNCATE success:       1
8357
 
# check layout success:    1
8358
 
# End usability test (inc/partition_check.inc)
8359
 
DROP TABLE t1;
8360
 
CREATE TABLE t1 (
8361
 
f_int1 INTEGER,
8362
 
f_int2 INTEGER,
8363
 
f_char1 CHAR(20),
8364
 
f_char2 CHAR(20),
8365
 
f_charbig VARCHAR(1000)
8366
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
8367
 
)
8368
 
PARTITION BY LIST(MOD(f_int1,4))
8369
 
(PARTITION part_3 VALUES IN (-3),
8370
 
PARTITION part_2 VALUES IN (-2),
8371
 
PARTITION part_1 VALUES IN (-1),
8372
 
PARTITION part_N VALUES IN (NULL),
8373
 
PARTITION part0 VALUES IN (0),
8374
 
PARTITION part1 VALUES IN (1),
8375
 
PARTITION part2 VALUES IN (2),
8376
 
PARTITION part3 VALUES IN (3));
8377
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8378
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
8379
 
# Start usability test (inc/partition_check.inc)
8380
 
create_command
8381
 
SHOW CREATE TABLE t1;
8382
 
Table   Create Table
8383
 
t1      CREATE TABLE `t1` (
8384
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
8385
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
8386
 
  `f_char1` char(20) DEFAULT NULL,
8387
 
  `f_char2` char(20) DEFAULT NULL,
8388
 
  `f_charbig` varchar(1000) DEFAULT NULL,
8389
 
  PRIMARY KEY (`f_int2`,`f_int1`),
8390
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
8391
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
8392
 
 
8393
 
unified filelist
8394
 
t1.frm
8395
 
t1.par
8396
 
 
8397
 
# check prerequisites-1 success:    1
8398
 
# check COUNT(*) success:    1
8399
 
# check MIN/MAX(f_int1) success:    1
8400
 
# check MIN/MAX(f_int2) success:    1
8401
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8402
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8403
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8404
 
WHERE f_int1 IN (2,3);
8405
 
ERROR 23000: Can't write; duplicate key in table 't1'
8406
 
# check prerequisites-3 success:    1
8407
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8408
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8409
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8410
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8411
 
WHERE f_int1 IN (2,3);
8412
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
8413
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8414
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8415
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8416
 
WHERE f_int1 IN (2,3);
8417
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
8418
 
# check read via f_int1 success: 1
8419
 
# check read via f_int2 success: 1
8420
 
        
8421
 
# check multiple-1 success:     1
8422
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8423
 
        
8424
 
# check multiple-2 success:     1
8425
 
INSERT INTO t1 SELECT * FROM t0_template
8426
 
WHERE MOD(f_int1,3) = 0;
8427
 
        
8428
 
# check multiple-3 success:     1
8429
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
8430
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8431
 
AND @max_row_div2 + @max_row_div4;
8432
 
        
8433
 
# check multiple-4 success:     1
8434
 
DELETE FROM t1
8435
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8436
 
AND @max_row_div2 + @max_row_div4 + @max_row;
8437
 
        
8438
 
# check multiple-5 success:     1
8439
 
SELECT COUNT(*) INTO @try_count FROM t0_template
8440
 
WHERE MOD(f_int1,3) = 0
8441
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8442
 
SELECT COUNT(*) INTO @clash_count
8443
 
FROM t1 INNER JOIN t0_template USING(f_int1)
8444
 
WHERE MOD(f_int1,3) = 0
8445
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8446
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8447
 
INSERT INTO t1
8448
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
8449
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8450
 
f_charbig = '#SINGLE#';
8451
 
        
8452
 
# check single-1 success:       1
8453
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8454
 
INSERT INTO t1
8455
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
8456
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8457
 
f_charbig = '#SINGLE#';
8458
 
        
8459
 
# check single-2 success:       1
8460
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8461
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8462
 
UPDATE t1 SET f_int1 = @cur_value2
8463
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8464
 
        
8465
 
# check single-3 success:       1
8466
 
SET @cur_value1= -1;
8467
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8468
 
UPDATE t1 SET f_int1 = @cur_value1
8469
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8470
 
        
8471
 
# check single-4 success:       1
8472
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
8473
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8474
 
        
8475
 
# check single-5 success:       1
8476
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8477
 
        
8478
 
# check single-6 success:       1
8479
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8480
 
        
8481
 
# check single-7 success:       1
8482
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8483
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8484
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8485
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8486
 
f_charbig = '#NULL#';
8487
 
INSERT INTO t1
8488
 
SET f_int1 = NULL , f_int2 = -@max_row,
8489
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8490
 
f_charbig = '#NULL#';
8491
 
ERROR 23000: Column 'f_int1' cannot be null
8492
 
# check null success:    1
8493
 
DELETE FROM t1
8494
 
WHERE f_int1 = 0 AND f_int2 = 0
8495
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8496
 
AND f_charbig = '#NULL#';
8497
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8498
 
SELECT f_int1, f_int1, '', '', 'was inserted'
8499
 
   FROM t0_template source_tab
8500
 
WHERE MOD(f_int1,3) = 0
8501
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
8502
 
ON DUPLICATE KEY
8503
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8504
 
f_int2 = 2 * @max_row + source_tab.f_int1,
8505
 
f_charbig = 'was updated';
8506
 
        
8507
 
# check unique-1-a success:     1
8508
 
        
8509
 
# check unique-1-b success:     1
8510
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8511
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8512
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8513
 
f_charbig = CONCAT('===',f_char1,'===')
8514
 
WHERE f_charbig = 'was updated';
8515
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8516
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8517
 
   FROM t0_template source_tab
8518
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8519
 
        
8520
 
# check replace success:        1
8521
 
DELETE FROM t1
8522
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8523
 
DELETE FROM t1
8524
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8525
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8526
 
UPDATE t1 SET f_int2 = f_int1,
8527
 
f_char1 = CAST(f_int1 AS CHAR),
8528
 
f_char2 = CAST(f_int1 AS CHAR),
8529
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8530
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8531
 
SET AUTOCOMMIT= 0;
8532
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8533
 
SELECT f_int1, f_int1, '', '', 'was inserted'
8534
 
FROM t0_template source_tab
8535
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8536
 
        
8537
 
# check transactions-1 success:         1
8538
 
COMMIT WORK;
8539
 
        
8540
 
# check transactions-2 success:         1
8541
 
ROLLBACK WORK;
8542
 
        
8543
 
# check transactions-3 success:         1
8544
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8545
 
COMMIT WORK;
8546
 
ROLLBACK WORK;
8547
 
        
8548
 
# check transactions-4 success:         1
8549
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8550
 
SELECT f_int1, f_int1, '', '', 'was inserted'
8551
 
FROM t0_template source_tab
8552
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8553
 
        
8554
 
# check transactions-5 success:         1
8555
 
ROLLBACK WORK;
8556
 
        
8557
 
# check transactions-6 success:         1
8558
 
# INFO: Storage engine used for t1 seems to be transactional.
8559
 
COMMIT;
8560
 
        
8561
 
# check transactions-7 success:         1
8562
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8563
 
COMMIT WORK;
8564
 
SET @@session.sql_mode = 'traditional';
8565
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8566
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8567
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8568
 
'', '', 'was inserted' FROM t0_template
8569
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8570
 
ERROR 22012: Division by 0
8571
 
COMMIT;
8572
 
        
8573
 
# check transactions-8 success:         1
8574
 
# INFO: Storage engine used for t1 seems to be able to revert
8575
 
#       changes made by the failing statement.
8576
 
SET @@session.sql_mode = '';
8577
 
SET AUTOCOMMIT= 1;
8578
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
8579
 
COMMIT WORK;
8580
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8581
 
        
8582
 
# check special-1 success:      1
8583
 
UPDATE t1 SET f_charbig = '';
8584
 
        
8585
 
# check special-2 success:      1
8586
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8587
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8588
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8589
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8590
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8591
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8592
 
'just inserted' FROM t0_template
8593
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8594
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8595
 
BEGIN
8596
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8597
 
f_charbig = 'updated by trigger'
8598
 
      WHERE f_int1 = new.f_int1;
8599
 
END|
8600
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8601
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8602
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8603
 
        
8604
 
# check trigger-1 success:      1
8605
 
DROP TRIGGER trg_1;
8606
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8607
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8608
 
f_charbig = 'just inserted'
8609
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8610
 
DELETE FROM t0_aux
8611
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8612
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8613
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8614
 
'just inserted' FROM t0_template
8615
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8616
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8617
 
BEGIN
8618
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8619
 
f_charbig = 'updated by trigger'
8620
 
      WHERE f_int1 = new.f_int1;
8621
 
END|
8622
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8623
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8624
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8625
 
        
8626
 
# check trigger-2 success:      1
8627
 
DROP TRIGGER trg_1;
8628
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8629
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8630
 
f_charbig = 'just inserted'
8631
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8632
 
DELETE FROM t0_aux
8633
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8634
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8635
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8636
 
'just inserted' FROM t0_template
8637
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8638
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8639
 
BEGIN
8640
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8641
 
f_charbig = 'updated by trigger'
8642
 
      WHERE f_int1 = new.f_int1;
8643
 
END|
8644
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8645
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8646
 
        
8647
 
# check trigger-3 success:      1
8648
 
DROP TRIGGER trg_1;
8649
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8650
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8651
 
f_charbig = 'just inserted'
8652
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8653
 
DELETE FROM t0_aux
8654
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8655
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8656
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8657
 
'just inserted' FROM t0_template
8658
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8659
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8660
 
BEGIN
8661
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8662
 
f_charbig = 'updated by trigger'
8663
 
      WHERE f_int1 = - old.f_int1;
8664
 
END|
8665
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8666
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8667
 
        
8668
 
# check trigger-4 success:      1
8669
 
DROP TRIGGER trg_1;
8670
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8671
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8672
 
f_charbig = 'just inserted'
8673
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8674
 
DELETE FROM t0_aux
8675
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8676
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8677
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8678
 
'just inserted' FROM t0_template
8679
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8680
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8681
 
BEGIN
8682
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8683
 
f_charbig = 'updated by trigger'
8684
 
      WHERE f_int1 = new.f_int1;
8685
 
END|
8686
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8687
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8688
 
        
8689
 
# check trigger-5 success:      1
8690
 
DROP TRIGGER trg_1;
8691
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8692
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8693
 
f_charbig = 'just inserted'
8694
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8695
 
DELETE FROM t0_aux
8696
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8697
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8698
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8699
 
'just inserted' FROM t0_template
8700
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8701
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8702
 
BEGIN
8703
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8704
 
f_charbig = 'updated by trigger'
8705
 
      WHERE f_int1 = - old.f_int1;
8706
 
END|
8707
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8708
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8709
 
        
8710
 
# check trigger-6 success:      1
8711
 
DROP TRIGGER trg_1;
8712
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8713
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8714
 
f_charbig = 'just inserted'
8715
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8716
 
DELETE FROM t0_aux
8717
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8718
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8719
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8720
 
'just inserted' FROM t0_template
8721
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8722
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8723
 
BEGIN
8724
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8725
 
f_charbig = 'updated by trigger'
8726
 
      WHERE f_int1 = - old.f_int1;
8727
 
END|
8728
 
DELETE FROM t0_aux
8729
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8730
 
        
8731
 
# check trigger-7 success:      1
8732
 
DROP TRIGGER trg_1;
8733
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8734
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8735
 
f_charbig = 'just inserted'
8736
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8737
 
DELETE FROM t0_aux
8738
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8739
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8740
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8741
 
'just inserted' FROM t0_template
8742
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8743
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8744
 
BEGIN
8745
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8746
 
f_charbig = 'updated by trigger'
8747
 
      WHERE f_int1 = - old.f_int1;
8748
 
END|
8749
 
DELETE FROM t0_aux
8750
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8751
 
        
8752
 
# check trigger-8 success:      1
8753
 
DROP TRIGGER trg_1;
8754
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8755
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8756
 
f_charbig = 'just inserted'
8757
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8758
 
DELETE FROM t0_aux
8759
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8760
 
DELETE FROM t1
8761
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8762
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8763
 
BEGIN
8764
 
SET new.f_int1 = old.f_int1 + @max_row,
8765
 
new.f_int2 = old.f_int2 - @max_row,
8766
 
new.f_charbig = '####updated per update trigger####';
8767
 
END|
8768
 
UPDATE t1
8769
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8770
 
f_charbig = '####updated per update statement itself####';
8771
 
        
8772
 
# check trigger-9 success:      1
8773
 
DROP TRIGGER trg_2;
8774
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8775
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8776
 
f_charbig = CONCAT('===',f_char1,'===');
8777
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8778
 
BEGIN
8779
 
SET new.f_int1 = new.f_int1 + @max_row,
8780
 
new.f_int2 = new.f_int2 - @max_row,
8781
 
new.f_charbig = '####updated per update trigger####';
8782
 
END|
8783
 
UPDATE t1
8784
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8785
 
f_charbig = '####updated per update statement itself####';
8786
 
        
8787
 
# check trigger-10 success:     1
8788
 
DROP TRIGGER trg_2;
8789
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8790
 
f_int2 = CAST(f_char1 AS SIGNED INT),
8791
 
f_charbig = CONCAT('===',f_char1,'===');
8792
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8793
 
BEGIN
8794
 
SET new.f_int1 = @my_max1 + @counter,
8795
 
new.f_int2 = @my_min2 - @counter,
8796
 
new.f_charbig = '####updated per insert trigger####';
8797
 
SET @counter = @counter + 1;
8798
 
END|
8799
 
SET @counter = 1;
8800
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8801
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8802
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8803
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8804
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8805
 
ORDER BY f_int1;
8806
 
DROP TRIGGER trg_3;
8807
 
        
8808
 
# check trigger-11 success:     1
8809
 
DELETE FROM t1
8810
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8811
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8812
 
AND f_charbig = '####updated per insert trigger####';
8813
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8814
 
BEGIN
8815
 
SET new.f_int1 = @my_max1 + @counter,
8816
 
new.f_int2 = @my_min2 - @counter,
8817
 
new.f_charbig = '####updated per insert trigger####';
8818
 
SET @counter = @counter + 1;
8819
 
END|
8820
 
SET @counter = 1;
8821
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8822
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
8823
 
SELECT CAST(f_int1 AS CHAR),
8824
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8825
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8826
 
ORDER BY f_int1;
8827
 
DROP TRIGGER trg_3;
8828
 
        
8829
 
# check trigger-12 success:     1
8830
 
DELETE FROM t1
8831
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8832
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8833
 
AND f_charbig = '####updated per insert trigger####';
8834
 
ANALYZE  TABLE t1;
8835
 
Table   Op      Msg_type        Msg_text
8836
 
test.t1 analyze status  OK
8837
 
CHECK    TABLE t1 EXTENDED;
8838
 
Table   Op      Msg_type        Msg_text
8839
 
test.t1 check   status  OK
8840
 
CHECKSUM TABLE t1 EXTENDED;
8841
 
Table   Checksum
8842
 
test.t1 <some_value>
8843
 
OPTIMIZE TABLE t1;
8844
 
Table   Op      Msg_type        Msg_text
8845
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
8846
 
test.t1 optimize        status  OK
8847
 
# check layout success:    1
8848
 
REPAIR   TABLE t1 EXTENDED;
8849
 
Table   Op      Msg_type        Msg_text
8850
 
test.t1 repair  note    The storage engine for the table doesn't support repair
8851
 
# check layout success:    1
8852
 
TRUNCATE t1;
8853
 
        
8854
 
# check TRUNCATE success:       1
8855
 
# check layout success:    1
8856
 
# End usability test (inc/partition_check.inc)
8857
 
DROP TABLE t1;
8858
 
CREATE TABLE t1 (
8859
 
f_int1 INTEGER,
8860
 
f_int2 INTEGER,
8861
 
f_char1 CHAR(20),
8862
 
f_char2 CHAR(20),
8863
 
f_charbig VARCHAR(1000)
8864
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
8865
 
)
8866
 
PARTITION BY RANGE(f_int1)
8867
 
(PARTITION parta VALUES LESS THAN (0),
8868
 
PARTITION partb VALUES LESS THAN (5),
8869
 
PARTITION partc VALUES LESS THAN (10),
8870
 
PARTITION partd VALUES LESS THAN (10 + 5),
8871
 
PARTITION parte VALUES LESS THAN (20),
8872
 
PARTITION partf VALUES LESS THAN (2147483646));
8873
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8874
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
8875
 
# Start usability test (inc/partition_check.inc)
8876
 
create_command
8877
 
SHOW CREATE TABLE t1;
8878
 
Table   Create Table
8879
 
t1      CREATE TABLE `t1` (
8880
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
8881
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
8882
 
  `f_char1` char(20) DEFAULT NULL,
8883
 
  `f_char2` char(20) DEFAULT NULL,
8884
 
  `f_charbig` varchar(1000) DEFAULT NULL,
8885
 
  PRIMARY KEY (`f_int2`,`f_int1`),
8886
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
8887
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
8888
 
 
8889
 
unified filelist
8890
 
t1.frm
8891
 
t1.par
8892
 
 
8893
 
# check prerequisites-1 success:    1
8894
 
# check COUNT(*) success:    1
8895
 
# check MIN/MAX(f_int1) success:    1
8896
 
# check MIN/MAX(f_int2) success:    1
8897
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8898
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8899
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8900
 
WHERE f_int1 IN (2,3);
8901
 
ERROR 23000: Can't write; duplicate key in table 't1'
8902
 
# check prerequisites-3 success:    1
8903
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8904
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8905
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8906
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8907
 
WHERE f_int1 IN (2,3);
8908
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
8909
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8910
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8911
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8912
 
WHERE f_int1 IN (2,3);
8913
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
8914
 
# check read via f_int1 success: 1
8915
 
# check read via f_int2 success: 1
8916
 
        
8917
 
# check multiple-1 success:     1
8918
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8919
 
        
8920
 
# check multiple-2 success:     1
8921
 
INSERT INTO t1 SELECT * FROM t0_template
8922
 
WHERE MOD(f_int1,3) = 0;
8923
 
        
8924
 
# check multiple-3 success:     1
8925
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
8926
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8927
 
AND @max_row_div2 + @max_row_div4;
8928
 
        
8929
 
# check multiple-4 success:     1
8930
 
DELETE FROM t1
8931
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8932
 
AND @max_row_div2 + @max_row_div4 + @max_row;
8933
 
        
8934
 
# check multiple-5 success:     1
8935
 
SELECT COUNT(*) INTO @try_count FROM t0_template
8936
 
WHERE MOD(f_int1,3) = 0
8937
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8938
 
SELECT COUNT(*) INTO @clash_count
8939
 
FROM t1 INNER JOIN t0_template USING(f_int1)
8940
 
WHERE MOD(f_int1,3) = 0
8941
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8942
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8943
 
INSERT INTO t1
8944
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
8945
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8946
 
f_charbig = '#SINGLE#';
8947
 
        
8948
 
# check single-1 success:       1
8949
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8950
 
INSERT INTO t1
8951
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
8952
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8953
 
f_charbig = '#SINGLE#';
8954
 
        
8955
 
# check single-2 success:       1
8956
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8957
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8958
 
UPDATE t1 SET f_int1 = @cur_value2
8959
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8960
 
        
8961
 
# check single-3 success:       1
8962
 
SET @cur_value1= -1;
8963
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8964
 
UPDATE t1 SET f_int1 = @cur_value1
8965
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8966
 
        
8967
 
# check single-4 success:       1
8968
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
8969
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8970
 
        
8971
 
# check single-5 success:       1
8972
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8973
 
        
8974
 
# check single-6 success:       1
8975
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8976
 
ERROR HY000: Table has no partition for value 2147483647
8977
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8978
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8979
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8980
 
f_charbig = '#NULL#';
8981
 
INSERT INTO t1
8982
 
SET f_int1 = NULL , f_int2 = -@max_row,
8983
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8984
 
f_charbig = '#NULL#';
8985
 
ERROR 23000: Column 'f_int1' cannot be null
8986
 
# check null success:    1
8987
 
DELETE FROM t1
8988
 
WHERE f_int1 = 0 AND f_int2 = 0
8989
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8990
 
AND f_charbig = '#NULL#';
8991
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8992
 
SELECT f_int1, f_int1, '', '', 'was inserted'
8993
 
   FROM t0_template source_tab
8994
 
WHERE MOD(f_int1,3) = 0
8995
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
8996
 
ON DUPLICATE KEY
8997
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8998
 
f_int2 = 2 * @max_row + source_tab.f_int1,
8999
 
f_charbig = 'was updated';
9000
 
        
9001
 
# check unique-1-a success:     1
9002
 
        
9003
 
# check unique-1-b success:     1
9004
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
9005
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9006
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9007
 
f_charbig = CONCAT('===',f_char1,'===')
9008
 
WHERE f_charbig = 'was updated';
9009
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9010
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9011
 
   FROM t0_template source_tab
9012
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9013
 
        
9014
 
# check replace success:        1
9015
 
DELETE FROM t1
9016
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9017
 
DELETE FROM t1
9018
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9019
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9020
 
UPDATE t1 SET f_int2 = f_int1,
9021
 
f_char1 = CAST(f_int1 AS CHAR),
9022
 
f_char2 = CAST(f_int1 AS CHAR),
9023
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9024
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9025
 
SET AUTOCOMMIT= 0;
9026
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9027
 
SELECT f_int1, f_int1, '', '', 'was inserted'
9028
 
FROM t0_template source_tab
9029
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9030
 
        
9031
 
# check transactions-1 success:         1
9032
 
COMMIT WORK;
9033
 
        
9034
 
# check transactions-2 success:         1
9035
 
ROLLBACK WORK;
9036
 
        
9037
 
# check transactions-3 success:         1
9038
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
9039
 
COMMIT WORK;
9040
 
ROLLBACK WORK;
9041
 
        
9042
 
# check transactions-4 success:         1
9043
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9044
 
SELECT f_int1, f_int1, '', '', 'was inserted'
9045
 
FROM t0_template source_tab
9046
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9047
 
        
9048
 
# check transactions-5 success:         1
9049
 
ROLLBACK WORK;
9050
 
        
9051
 
# check transactions-6 success:         1
9052
 
# INFO: Storage engine used for t1 seems to be transactional.
9053
 
COMMIT;
9054
 
        
9055
 
# check transactions-7 success:         1
9056
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
9057
 
COMMIT WORK;
9058
 
SET @@session.sql_mode = 'traditional';
9059
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9060
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9061
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9062
 
'', '', 'was inserted' FROM t0_template
9063
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9064
 
ERROR 22012: Division by 0
9065
 
COMMIT;
9066
 
        
9067
 
# check transactions-8 success:         1
9068
 
# INFO: Storage engine used for t1 seems to be able to revert
9069
 
#       changes made by the failing statement.
9070
 
SET @@session.sql_mode = '';
9071
 
SET AUTOCOMMIT= 1;
9072
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
9073
 
COMMIT WORK;
9074
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9075
 
        
9076
 
# check special-1 success:      1
9077
 
UPDATE t1 SET f_charbig = '';
9078
 
        
9079
 
# check special-2 success:      1
9080
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9081
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9082
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9083
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9084
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9085
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9086
 
'just inserted' FROM t0_template
9087
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9088
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9089
 
BEGIN
9090
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9091
 
f_charbig = 'updated by trigger'
9092
 
      WHERE f_int1 = new.f_int1;
9093
 
END|
9094
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9095
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9096
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9097
 
        
9098
 
# check trigger-1 success:      1
9099
 
DROP TRIGGER trg_1;
9100
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9101
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9102
 
f_charbig = 'just inserted'
9103
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9104
 
DELETE FROM t0_aux
9105
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9106
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9107
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9108
 
'just inserted' FROM t0_template
9109
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9110
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9111
 
BEGIN
9112
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9113
 
f_charbig = 'updated by trigger'
9114
 
      WHERE f_int1 = new.f_int1;
9115
 
END|
9116
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9117
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9118
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9119
 
        
9120
 
# check trigger-2 success:      1
9121
 
DROP TRIGGER trg_1;
9122
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9123
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9124
 
f_charbig = 'just inserted'
9125
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9126
 
DELETE FROM t0_aux
9127
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9128
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9129
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9130
 
'just inserted' FROM t0_template
9131
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9132
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9133
 
BEGIN
9134
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9135
 
f_charbig = 'updated by trigger'
9136
 
      WHERE f_int1 = new.f_int1;
9137
 
END|
9138
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9139
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9140
 
        
9141
 
# check trigger-3 success:      1
9142
 
DROP TRIGGER trg_1;
9143
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9144
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9145
 
f_charbig = 'just inserted'
9146
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9147
 
DELETE FROM t0_aux
9148
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9149
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9150
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9151
 
'just inserted' FROM t0_template
9152
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9153
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9154
 
BEGIN
9155
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9156
 
f_charbig = 'updated by trigger'
9157
 
      WHERE f_int1 = - old.f_int1;
9158
 
END|
9159
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9160
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9161
 
        
9162
 
# check trigger-4 success:      1
9163
 
DROP TRIGGER trg_1;
9164
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9165
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9166
 
f_charbig = 'just inserted'
9167
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9168
 
DELETE FROM t0_aux
9169
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9170
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9171
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9172
 
'just inserted' FROM t0_template
9173
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9174
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9175
 
BEGIN
9176
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9177
 
f_charbig = 'updated by trigger'
9178
 
      WHERE f_int1 = new.f_int1;
9179
 
END|
9180
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9181
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9182
 
        
9183
 
# check trigger-5 success:      1
9184
 
DROP TRIGGER trg_1;
9185
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9186
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9187
 
f_charbig = 'just inserted'
9188
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9189
 
DELETE FROM t0_aux
9190
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9191
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9192
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9193
 
'just inserted' FROM t0_template
9194
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9195
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9196
 
BEGIN
9197
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9198
 
f_charbig = 'updated by trigger'
9199
 
      WHERE f_int1 = - old.f_int1;
9200
 
END|
9201
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9202
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9203
 
        
9204
 
# check trigger-6 success:      1
9205
 
DROP TRIGGER trg_1;
9206
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9207
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9208
 
f_charbig = 'just inserted'
9209
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9210
 
DELETE FROM t0_aux
9211
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9212
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9213
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9214
 
'just inserted' FROM t0_template
9215
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9216
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9217
 
BEGIN
9218
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9219
 
f_charbig = 'updated by trigger'
9220
 
      WHERE f_int1 = - old.f_int1;
9221
 
END|
9222
 
DELETE FROM t0_aux
9223
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9224
 
        
9225
 
# check trigger-7 success:      1
9226
 
DROP TRIGGER trg_1;
9227
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9228
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9229
 
f_charbig = 'just inserted'
9230
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9231
 
DELETE FROM t0_aux
9232
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9233
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9234
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9235
 
'just inserted' FROM t0_template
9236
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9237
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9238
 
BEGIN
9239
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9240
 
f_charbig = 'updated by trigger'
9241
 
      WHERE f_int1 = - old.f_int1;
9242
 
END|
9243
 
DELETE FROM t0_aux
9244
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9245
 
        
9246
 
# check trigger-8 success:      1
9247
 
DROP TRIGGER trg_1;
9248
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9249
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9250
 
f_charbig = 'just inserted'
9251
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9252
 
DELETE FROM t0_aux
9253
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9254
 
DELETE FROM t1
9255
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9256
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9257
 
BEGIN
9258
 
SET new.f_int1 = old.f_int1 + @max_row,
9259
 
new.f_int2 = old.f_int2 - @max_row,
9260
 
new.f_charbig = '####updated per update trigger####';
9261
 
END|
9262
 
UPDATE t1
9263
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9264
 
f_charbig = '####updated per update statement itself####';
9265
 
        
9266
 
# check trigger-9 success:      1
9267
 
DROP TRIGGER trg_2;
9268
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9269
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9270
 
f_charbig = CONCAT('===',f_char1,'===');
9271
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9272
 
BEGIN
9273
 
SET new.f_int1 = new.f_int1 + @max_row,
9274
 
new.f_int2 = new.f_int2 - @max_row,
9275
 
new.f_charbig = '####updated per update trigger####';
9276
 
END|
9277
 
UPDATE t1
9278
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9279
 
f_charbig = '####updated per update statement itself####';
9280
 
        
9281
 
# check trigger-10 success:     1
9282
 
DROP TRIGGER trg_2;
9283
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9284
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9285
 
f_charbig = CONCAT('===',f_char1,'===');
9286
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9287
 
BEGIN
9288
 
SET new.f_int1 = @my_max1 + @counter,
9289
 
new.f_int2 = @my_min2 - @counter,
9290
 
new.f_charbig = '####updated per insert trigger####';
9291
 
SET @counter = @counter + 1;
9292
 
END|
9293
 
SET @counter = 1;
9294
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9295
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9296
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9297
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9298
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9299
 
ORDER BY f_int1;
9300
 
DROP TRIGGER trg_3;
9301
 
        
9302
 
# check trigger-11 success:     1
9303
 
DELETE FROM t1
9304
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9305
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9306
 
AND f_charbig = '####updated per insert trigger####';
9307
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9308
 
BEGIN
9309
 
SET new.f_int1 = @my_max1 + @counter,
9310
 
new.f_int2 = @my_min2 - @counter,
9311
 
new.f_charbig = '####updated per insert trigger####';
9312
 
SET @counter = @counter + 1;
9313
 
END|
9314
 
SET @counter = 1;
9315
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9316
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
9317
 
SELECT CAST(f_int1 AS CHAR),
9318
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9319
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9320
 
ORDER BY f_int1;
9321
 
DROP TRIGGER trg_3;
9322
 
        
9323
 
# check trigger-12 success:     1
9324
 
DELETE FROM t1
9325
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9326
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9327
 
AND f_charbig = '####updated per insert trigger####';
9328
 
ANALYZE  TABLE t1;
9329
 
Table   Op      Msg_type        Msg_text
9330
 
test.t1 analyze status  OK
9331
 
CHECK    TABLE t1 EXTENDED;
9332
 
Table   Op      Msg_type        Msg_text
9333
 
test.t1 check   status  OK
9334
 
CHECKSUM TABLE t1 EXTENDED;
9335
 
Table   Checksum
9336
 
test.t1 <some_value>
9337
 
OPTIMIZE TABLE t1;
9338
 
Table   Op      Msg_type        Msg_text
9339
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
9340
 
test.t1 optimize        status  OK
9341
 
# check layout success:    1
9342
 
REPAIR   TABLE t1 EXTENDED;
9343
 
Table   Op      Msg_type        Msg_text
9344
 
test.t1 repair  note    The storage engine for the table doesn't support repair
9345
 
# check layout success:    1
9346
 
TRUNCATE t1;
9347
 
        
9348
 
# check TRUNCATE success:       1
9349
 
# check layout success:    1
9350
 
# End usability test (inc/partition_check.inc)
9351
 
DROP TABLE t1;
9352
 
CREATE TABLE t1 (
9353
 
f_int1 INTEGER,
9354
 
f_int2 INTEGER,
9355
 
f_char1 CHAR(20),
9356
 
f_char2 CHAR(20),
9357
 
f_charbig VARCHAR(1000)
9358
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
9359
 
)
9360
 
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
9361
 
(PARTITION parta VALUES LESS THAN (0),
9362
 
PARTITION partb VALUES LESS THAN (5),
9363
 
PARTITION partc VALUES LESS THAN (10),
9364
 
PARTITION partd VALUES LESS THAN (2147483646));
9365
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9366
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
9367
 
# Start usability test (inc/partition_check.inc)
9368
 
create_command
9369
 
SHOW CREATE TABLE t1;
9370
 
Table   Create Table
9371
 
t1      CREATE TABLE `t1` (
9372
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
9373
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
9374
 
  `f_char1` char(20) DEFAULT NULL,
9375
 
  `f_char2` char(20) DEFAULT NULL,
9376
 
  `f_charbig` varchar(1000) DEFAULT NULL,
9377
 
  PRIMARY KEY (`f_int2`,`f_int1`),
9378
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
9379
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
9380
 
 
9381
 
unified filelist
9382
 
t1.frm
9383
 
t1.par
9384
 
 
9385
 
# check prerequisites-1 success:    1
9386
 
# check COUNT(*) success:    1
9387
 
# check MIN/MAX(f_int1) success:    1
9388
 
# check MIN/MAX(f_int2) success:    1
9389
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9390
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9391
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9392
 
WHERE f_int1 IN (2,3);
9393
 
ERROR 23000: Can't write; duplicate key in table 't1'
9394
 
# check prerequisites-3 success:    1
9395
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9396
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9397
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9398
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9399
 
WHERE f_int1 IN (2,3);
9400
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
9401
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9402
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9403
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9404
 
WHERE f_int1 IN (2,3);
9405
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
9406
 
# check read via f_int1 success: 1
9407
 
# check read via f_int2 success: 1
9408
 
        
9409
 
# check multiple-1 success:     1
9410
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9411
 
        
9412
 
# check multiple-2 success:     1
9413
 
INSERT INTO t1 SELECT * FROM t0_template
9414
 
WHERE MOD(f_int1,3) = 0;
9415
 
        
9416
 
# check multiple-3 success:     1
9417
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
9418
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9419
 
AND @max_row_div2 + @max_row_div4;
9420
 
        
9421
 
# check multiple-4 success:     1
9422
 
DELETE FROM t1
9423
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9424
 
AND @max_row_div2 + @max_row_div4 + @max_row;
9425
 
        
9426
 
# check multiple-5 success:     1
9427
 
SELECT COUNT(*) INTO @try_count FROM t0_template
9428
 
WHERE MOD(f_int1,3) = 0
9429
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9430
 
SELECT COUNT(*) INTO @clash_count
9431
 
FROM t1 INNER JOIN t0_template USING(f_int1)
9432
 
WHERE MOD(f_int1,3) = 0
9433
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9434
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9435
 
INSERT INTO t1
9436
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
9437
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9438
 
f_charbig = '#SINGLE#';
9439
 
        
9440
 
# check single-1 success:       1
9441
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9442
 
INSERT INTO t1
9443
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
9444
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9445
 
f_charbig = '#SINGLE#';
9446
 
        
9447
 
# check single-2 success:       1
9448
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9449
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9450
 
UPDATE t1 SET f_int1 = @cur_value2
9451
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9452
 
        
9453
 
# check single-3 success:       1
9454
 
SET @cur_value1= -1;
9455
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9456
 
UPDATE t1 SET f_int1 = @cur_value1
9457
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9458
 
        
9459
 
# check single-4 success:       1
9460
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
9461
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9462
 
        
9463
 
# check single-5 success:       1
9464
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9465
 
        
9466
 
# check single-6 success:       1
9467
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9468
 
        
9469
 
# check single-7 success:       1
9470
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
9471
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9472
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9473
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9474
 
f_charbig = '#NULL#';
9475
 
INSERT INTO t1
9476
 
SET f_int1 = NULL , f_int2 = -@max_row,
9477
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9478
 
f_charbig = '#NULL#';
9479
 
ERROR 23000: Column 'f_int1' cannot be null
9480
 
# check null success:    1
9481
 
DELETE FROM t1
9482
 
WHERE f_int1 = 0 AND f_int2 = 0
9483
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9484
 
AND f_charbig = '#NULL#';
9485
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9486
 
SELECT f_int1, f_int1, '', '', 'was inserted'
9487
 
   FROM t0_template source_tab
9488
 
WHERE MOD(f_int1,3) = 0
9489
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
9490
 
ON DUPLICATE KEY
9491
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9492
 
f_int2 = 2 * @max_row + source_tab.f_int1,
9493
 
f_charbig = 'was updated';
9494
 
        
9495
 
# check unique-1-a success:     1
9496
 
        
9497
 
# check unique-1-b success:     1
9498
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
9499
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9500
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9501
 
f_charbig = CONCAT('===',f_char1,'===')
9502
 
WHERE f_charbig = 'was updated';
9503
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9504
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9505
 
   FROM t0_template source_tab
9506
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9507
 
        
9508
 
# check replace success:        1
9509
 
DELETE FROM t1
9510
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9511
 
DELETE FROM t1
9512
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9513
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9514
 
UPDATE t1 SET f_int2 = f_int1,
9515
 
f_char1 = CAST(f_int1 AS CHAR),
9516
 
f_char2 = CAST(f_int1 AS CHAR),
9517
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9518
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9519
 
SET AUTOCOMMIT= 0;
9520
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9521
 
SELECT f_int1, f_int1, '', '', 'was inserted'
9522
 
FROM t0_template source_tab
9523
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9524
 
        
9525
 
# check transactions-1 success:         1
9526
 
COMMIT WORK;
9527
 
        
9528
 
# check transactions-2 success:         1
9529
 
ROLLBACK WORK;
9530
 
        
9531
 
# check transactions-3 success:         1
9532
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
9533
 
COMMIT WORK;
9534
 
ROLLBACK WORK;
9535
 
        
9536
 
# check transactions-4 success:         1
9537
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9538
 
SELECT f_int1, f_int1, '', '', 'was inserted'
9539
 
FROM t0_template source_tab
9540
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9541
 
        
9542
 
# check transactions-5 success:         1
9543
 
ROLLBACK WORK;
9544
 
        
9545
 
# check transactions-6 success:         1
9546
 
# INFO: Storage engine used for t1 seems to be transactional.
9547
 
COMMIT;
9548
 
        
9549
 
# check transactions-7 success:         1
9550
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
9551
 
COMMIT WORK;
9552
 
SET @@session.sql_mode = 'traditional';
9553
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9554
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9555
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9556
 
'', '', 'was inserted' FROM t0_template
9557
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9558
 
ERROR 22012: Division by 0
9559
 
COMMIT;
9560
 
        
9561
 
# check transactions-8 success:         1
9562
 
# INFO: Storage engine used for t1 seems to be able to revert
9563
 
#       changes made by the failing statement.
9564
 
SET @@session.sql_mode = '';
9565
 
SET AUTOCOMMIT= 1;
9566
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
9567
 
COMMIT WORK;
9568
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9569
 
        
9570
 
# check special-1 success:      1
9571
 
UPDATE t1 SET f_charbig = '';
9572
 
        
9573
 
# check special-2 success:      1
9574
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9575
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9576
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9577
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9578
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9579
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9580
 
'just inserted' FROM t0_template
9581
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9582
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9583
 
BEGIN
9584
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9585
 
f_charbig = 'updated by trigger'
9586
 
      WHERE f_int1 = new.f_int1;
9587
 
END|
9588
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9589
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9590
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9591
 
        
9592
 
# check trigger-1 success:      1
9593
 
DROP TRIGGER trg_1;
9594
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9595
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9596
 
f_charbig = 'just inserted'
9597
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9598
 
DELETE FROM t0_aux
9599
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9600
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9601
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9602
 
'just inserted' FROM t0_template
9603
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9604
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9605
 
BEGIN
9606
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9607
 
f_charbig = 'updated by trigger'
9608
 
      WHERE f_int1 = new.f_int1;
9609
 
END|
9610
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9611
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9612
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9613
 
        
9614
 
# check trigger-2 success:      1
9615
 
DROP TRIGGER trg_1;
9616
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9617
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9618
 
f_charbig = 'just inserted'
9619
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9620
 
DELETE FROM t0_aux
9621
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9622
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9623
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9624
 
'just inserted' FROM t0_template
9625
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9626
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9627
 
BEGIN
9628
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9629
 
f_charbig = 'updated by trigger'
9630
 
      WHERE f_int1 = new.f_int1;
9631
 
END|
9632
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9633
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9634
 
        
9635
 
# check trigger-3 success:      1
9636
 
DROP TRIGGER trg_1;
9637
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9638
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9639
 
f_charbig = 'just inserted'
9640
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9641
 
DELETE FROM t0_aux
9642
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9643
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9644
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9645
 
'just inserted' FROM t0_template
9646
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9647
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9648
 
BEGIN
9649
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9650
 
f_charbig = 'updated by trigger'
9651
 
      WHERE f_int1 = - old.f_int1;
9652
 
END|
9653
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9654
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9655
 
        
9656
 
# check trigger-4 success:      1
9657
 
DROP TRIGGER trg_1;
9658
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9659
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9660
 
f_charbig = 'just inserted'
9661
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9662
 
DELETE FROM t0_aux
9663
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9664
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9665
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9666
 
'just inserted' FROM t0_template
9667
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9668
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9669
 
BEGIN
9670
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9671
 
f_charbig = 'updated by trigger'
9672
 
      WHERE f_int1 = new.f_int1;
9673
 
END|
9674
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9675
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9676
 
        
9677
 
# check trigger-5 success:      1
9678
 
DROP TRIGGER trg_1;
9679
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9680
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9681
 
f_charbig = 'just inserted'
9682
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9683
 
DELETE FROM t0_aux
9684
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9685
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9686
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9687
 
'just inserted' FROM t0_template
9688
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9689
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9690
 
BEGIN
9691
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9692
 
f_charbig = 'updated by trigger'
9693
 
      WHERE f_int1 = - old.f_int1;
9694
 
END|
9695
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9696
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9697
 
        
9698
 
# check trigger-6 success:      1
9699
 
DROP TRIGGER trg_1;
9700
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9701
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9702
 
f_charbig = 'just inserted'
9703
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9704
 
DELETE FROM t0_aux
9705
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9706
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9707
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9708
 
'just inserted' FROM t0_template
9709
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9710
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9711
 
BEGIN
9712
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9713
 
f_charbig = 'updated by trigger'
9714
 
      WHERE f_int1 = - old.f_int1;
9715
 
END|
9716
 
DELETE FROM t0_aux
9717
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9718
 
        
9719
 
# check trigger-7 success:      1
9720
 
DROP TRIGGER trg_1;
9721
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9722
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9723
 
f_charbig = 'just inserted'
9724
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9725
 
DELETE FROM t0_aux
9726
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9727
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9728
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9729
 
'just inserted' FROM t0_template
9730
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9731
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9732
 
BEGIN
9733
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9734
 
f_charbig = 'updated by trigger'
9735
 
      WHERE f_int1 = - old.f_int1;
9736
 
END|
9737
 
DELETE FROM t0_aux
9738
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9739
 
        
9740
 
# check trigger-8 success:      1
9741
 
DROP TRIGGER trg_1;
9742
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9743
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9744
 
f_charbig = 'just inserted'
9745
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9746
 
DELETE FROM t0_aux
9747
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9748
 
DELETE FROM t1
9749
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9750
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9751
 
BEGIN
9752
 
SET new.f_int1 = old.f_int1 + @max_row,
9753
 
new.f_int2 = old.f_int2 - @max_row,
9754
 
new.f_charbig = '####updated per update trigger####';
9755
 
END|
9756
 
UPDATE t1
9757
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9758
 
f_charbig = '####updated per update statement itself####';
9759
 
        
9760
 
# check trigger-9 success:      1
9761
 
DROP TRIGGER trg_2;
9762
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9763
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9764
 
f_charbig = CONCAT('===',f_char1,'===');
9765
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9766
 
BEGIN
9767
 
SET new.f_int1 = new.f_int1 + @max_row,
9768
 
new.f_int2 = new.f_int2 - @max_row,
9769
 
new.f_charbig = '####updated per update trigger####';
9770
 
END|
9771
 
UPDATE t1
9772
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9773
 
f_charbig = '####updated per update statement itself####';
9774
 
        
9775
 
# check trigger-10 success:     1
9776
 
DROP TRIGGER trg_2;
9777
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9778
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9779
 
f_charbig = CONCAT('===',f_char1,'===');
9780
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9781
 
BEGIN
9782
 
SET new.f_int1 = @my_max1 + @counter,
9783
 
new.f_int2 = @my_min2 - @counter,
9784
 
new.f_charbig = '####updated per insert trigger####';
9785
 
SET @counter = @counter + 1;
9786
 
END|
9787
 
SET @counter = 1;
9788
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9789
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9790
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9791
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9792
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9793
 
ORDER BY f_int1;
9794
 
DROP TRIGGER trg_3;
9795
 
        
9796
 
# check trigger-11 success:     1
9797
 
DELETE FROM t1
9798
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9799
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9800
 
AND f_charbig = '####updated per insert trigger####';
9801
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9802
 
BEGIN
9803
 
SET new.f_int1 = @my_max1 + @counter,
9804
 
new.f_int2 = @my_min2 - @counter,
9805
 
new.f_charbig = '####updated per insert trigger####';
9806
 
SET @counter = @counter + 1;
9807
 
END|
9808
 
SET @counter = 1;
9809
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9810
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
9811
 
SELECT CAST(f_int1 AS CHAR),
9812
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9813
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9814
 
ORDER BY f_int1;
9815
 
DROP TRIGGER trg_3;
9816
 
        
9817
 
# check trigger-12 success:     1
9818
 
DELETE FROM t1
9819
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9820
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9821
 
AND f_charbig = '####updated per insert trigger####';
9822
 
ANALYZE  TABLE t1;
9823
 
Table   Op      Msg_type        Msg_text
9824
 
test.t1 analyze status  OK
9825
 
CHECK    TABLE t1 EXTENDED;
9826
 
Table   Op      Msg_type        Msg_text
9827
 
test.t1 check   status  OK
9828
 
CHECKSUM TABLE t1 EXTENDED;
9829
 
Table   Checksum
9830
 
test.t1 <some_value>
9831
 
OPTIMIZE TABLE t1;
9832
 
Table   Op      Msg_type        Msg_text
9833
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
9834
 
test.t1 optimize        status  OK
9835
 
# check layout success:    1
9836
 
REPAIR   TABLE t1 EXTENDED;
9837
 
Table   Op      Msg_type        Msg_text
9838
 
test.t1 repair  note    The storage engine for the table doesn't support repair
9839
 
# check layout success:    1
9840
 
TRUNCATE t1;
9841
 
        
9842
 
# check TRUNCATE success:       1
9843
 
# check layout success:    1
9844
 
# End usability test (inc/partition_check.inc)
9845
 
DROP TABLE t1;
9846
 
CREATE TABLE t1 (
9847
 
f_int1 INTEGER,
9848
 
f_int2 INTEGER,
9849
 
f_char1 CHAR(20),
9850
 
f_char2 CHAR(20),
9851
 
f_charbig VARCHAR(1000)
9852
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
9853
 
)
9854
 
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
9855
 
(PARTITION part1 VALUES LESS THAN (0)
9856
 
(SUBPARTITION subpart11, SUBPARTITION subpart12),
9857
 
PARTITION part2 VALUES LESS THAN (5)
9858
 
(SUBPARTITION subpart21, SUBPARTITION subpart22),
9859
 
PARTITION part3 VALUES LESS THAN (10)
9860
 
(SUBPARTITION subpart31, SUBPARTITION subpart32),
9861
 
PARTITION part4 VALUES LESS THAN (2147483646)
9862
 
(SUBPARTITION subpart41, SUBPARTITION subpart42));
9863
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9864
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
9865
 
# Start usability test (inc/partition_check.inc)
9866
 
create_command
9867
 
SHOW CREATE TABLE t1;
9868
 
Table   Create Table
9869
 
t1      CREATE TABLE `t1` (
9870
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
9871
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
9872
 
  `f_char1` char(20) DEFAULT NULL,
9873
 
  `f_char2` char(20) DEFAULT NULL,
9874
 
  `f_charbig` varchar(1000) DEFAULT NULL,
9875
 
  PRIMARY KEY (`f_int2`,`f_int1`),
9876
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
9877
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
9878
 
 
9879
 
unified filelist
9880
 
t1.frm
9881
 
t1.par
9882
 
 
9883
 
# check prerequisites-1 success:    1
9884
 
# check COUNT(*) success:    1
9885
 
# check MIN/MAX(f_int1) success:    1
9886
 
# check MIN/MAX(f_int2) success:    1
9887
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9888
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9889
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9890
 
WHERE f_int1 IN (2,3);
9891
 
ERROR 23000: Can't write; duplicate key in table 't1'
9892
 
# check prerequisites-3 success:    1
9893
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9894
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9895
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9896
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9897
 
WHERE f_int1 IN (2,3);
9898
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
9899
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9900
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9901
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9902
 
WHERE f_int1 IN (2,3);
9903
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
9904
 
# check read via f_int1 success: 1
9905
 
# check read via f_int2 success: 1
9906
 
        
9907
 
# check multiple-1 success:     1
9908
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9909
 
        
9910
 
# check multiple-2 success:     1
9911
 
INSERT INTO t1 SELECT * FROM t0_template
9912
 
WHERE MOD(f_int1,3) = 0;
9913
 
        
9914
 
# check multiple-3 success:     1
9915
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
9916
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9917
 
AND @max_row_div2 + @max_row_div4;
9918
 
        
9919
 
# check multiple-4 success:     1
9920
 
DELETE FROM t1
9921
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9922
 
AND @max_row_div2 + @max_row_div4 + @max_row;
9923
 
        
9924
 
# check multiple-5 success:     1
9925
 
SELECT COUNT(*) INTO @try_count FROM t0_template
9926
 
WHERE MOD(f_int1,3) = 0
9927
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9928
 
SELECT COUNT(*) INTO @clash_count
9929
 
FROM t1 INNER JOIN t0_template USING(f_int1)
9930
 
WHERE MOD(f_int1,3) = 0
9931
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9932
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9933
 
INSERT INTO t1
9934
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
9935
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9936
 
f_charbig = '#SINGLE#';
9937
 
        
9938
 
# check single-1 success:       1
9939
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9940
 
INSERT INTO t1
9941
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
9942
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9943
 
f_charbig = '#SINGLE#';
9944
 
        
9945
 
# check single-2 success:       1
9946
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9947
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9948
 
UPDATE t1 SET f_int1 = @cur_value2
9949
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9950
 
        
9951
 
# check single-3 success:       1
9952
 
SET @cur_value1= -1;
9953
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9954
 
UPDATE t1 SET f_int1 = @cur_value1
9955
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9956
 
        
9957
 
# check single-4 success:       1
9958
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
9959
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9960
 
        
9961
 
# check single-5 success:       1
9962
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9963
 
        
9964
 
# check single-6 success:       1
9965
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9966
 
ERROR HY000: Table has no partition for value 2147483647
9967
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9968
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9969
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9970
 
f_charbig = '#NULL#';
9971
 
INSERT INTO t1
9972
 
SET f_int1 = NULL , f_int2 = -@max_row,
9973
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9974
 
f_charbig = '#NULL#';
9975
 
ERROR 23000: Column 'f_int1' cannot be null
9976
 
# check null success:    1
9977
 
DELETE FROM t1
9978
 
WHERE f_int1 = 0 AND f_int2 = 0
9979
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9980
 
AND f_charbig = '#NULL#';
9981
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9982
 
SELECT f_int1, f_int1, '', '', 'was inserted'
9983
 
   FROM t0_template source_tab
9984
 
WHERE MOD(f_int1,3) = 0
9985
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
9986
 
ON DUPLICATE KEY
9987
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9988
 
f_int2 = 2 * @max_row + source_tab.f_int1,
9989
 
f_charbig = 'was updated';
9990
 
        
9991
 
# check unique-1-a success:     1
9992
 
        
9993
 
# check unique-1-b success:     1
9994
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
9995
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9996
 
f_int2 = CAST(f_char1 AS SIGNED INT),
9997
 
f_charbig = CONCAT('===',f_char1,'===')
9998
 
WHERE f_charbig = 'was updated';
9999
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10000
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10001
 
   FROM t0_template source_tab
10002
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10003
 
        
10004
 
# check replace success:        1
10005
 
DELETE FROM t1
10006
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10007
 
DELETE FROM t1
10008
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10009
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10010
 
UPDATE t1 SET f_int2 = f_int1,
10011
 
f_char1 = CAST(f_int1 AS CHAR),
10012
 
f_char2 = CAST(f_int1 AS CHAR),
10013
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10014
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10015
 
SET AUTOCOMMIT= 0;
10016
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10017
 
SELECT f_int1, f_int1, '', '', 'was inserted'
10018
 
FROM t0_template source_tab
10019
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10020
 
        
10021
 
# check transactions-1 success:         1
10022
 
COMMIT WORK;
10023
 
        
10024
 
# check transactions-2 success:         1
10025
 
ROLLBACK WORK;
10026
 
        
10027
 
# check transactions-3 success:         1
10028
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
10029
 
COMMIT WORK;
10030
 
ROLLBACK WORK;
10031
 
        
10032
 
# check transactions-4 success:         1
10033
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10034
 
SELECT f_int1, f_int1, '', '', 'was inserted'
10035
 
FROM t0_template source_tab
10036
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10037
 
        
10038
 
# check transactions-5 success:         1
10039
 
ROLLBACK WORK;
10040
 
        
10041
 
# check transactions-6 success:         1
10042
 
# INFO: Storage engine used for t1 seems to be transactional.
10043
 
COMMIT;
10044
 
        
10045
 
# check transactions-7 success:         1
10046
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
10047
 
COMMIT WORK;
10048
 
SET @@session.sql_mode = 'traditional';
10049
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10050
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10051
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10052
 
'', '', 'was inserted' FROM t0_template
10053
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10054
 
ERROR 22012: Division by 0
10055
 
COMMIT;
10056
 
        
10057
 
# check transactions-8 success:         1
10058
 
# INFO: Storage engine used for t1 seems to be able to revert
10059
 
#       changes made by the failing statement.
10060
 
SET @@session.sql_mode = '';
10061
 
SET AUTOCOMMIT= 1;
10062
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
10063
 
COMMIT WORK;
10064
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10065
 
        
10066
 
# check special-1 success:      1
10067
 
UPDATE t1 SET f_charbig = '';
10068
 
        
10069
 
# check special-2 success:      1
10070
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10071
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10072
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10073
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10074
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10075
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10076
 
'just inserted' FROM t0_template
10077
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10078
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10079
 
BEGIN
10080
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10081
 
f_charbig = 'updated by trigger'
10082
 
      WHERE f_int1 = new.f_int1;
10083
 
END|
10084
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10085
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10086
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10087
 
        
10088
 
# check trigger-1 success:      1
10089
 
DROP TRIGGER trg_1;
10090
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10091
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10092
 
f_charbig = 'just inserted'
10093
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10094
 
DELETE FROM t0_aux
10095
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10096
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10097
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10098
 
'just inserted' FROM t0_template
10099
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10100
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10101
 
BEGIN
10102
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10103
 
f_charbig = 'updated by trigger'
10104
 
      WHERE f_int1 = new.f_int1;
10105
 
END|
10106
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10107
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10108
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10109
 
        
10110
 
# check trigger-2 success:      1
10111
 
DROP TRIGGER trg_1;
10112
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10113
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10114
 
f_charbig = 'just inserted'
10115
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10116
 
DELETE FROM t0_aux
10117
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10118
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10119
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10120
 
'just inserted' FROM t0_template
10121
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10122
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10123
 
BEGIN
10124
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10125
 
f_charbig = 'updated by trigger'
10126
 
      WHERE f_int1 = new.f_int1;
10127
 
END|
10128
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10129
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10130
 
        
10131
 
# check trigger-3 success:      1
10132
 
DROP TRIGGER trg_1;
10133
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10134
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10135
 
f_charbig = 'just inserted'
10136
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10137
 
DELETE FROM t0_aux
10138
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10139
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10140
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10141
 
'just inserted' FROM t0_template
10142
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10143
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10144
 
BEGIN
10145
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10146
 
f_charbig = 'updated by trigger'
10147
 
      WHERE f_int1 = - old.f_int1;
10148
 
END|
10149
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10150
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10151
 
        
10152
 
# check trigger-4 success:      1
10153
 
DROP TRIGGER trg_1;
10154
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10155
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10156
 
f_charbig = 'just inserted'
10157
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10158
 
DELETE FROM t0_aux
10159
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10160
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10161
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10162
 
'just inserted' FROM t0_template
10163
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10164
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10165
 
BEGIN
10166
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10167
 
f_charbig = 'updated by trigger'
10168
 
      WHERE f_int1 = new.f_int1;
10169
 
END|
10170
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10171
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10172
 
        
10173
 
# check trigger-5 success:      1
10174
 
DROP TRIGGER trg_1;
10175
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10176
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10177
 
f_charbig = 'just inserted'
10178
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10179
 
DELETE FROM t0_aux
10180
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10181
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10182
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10183
 
'just inserted' FROM t0_template
10184
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10185
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10186
 
BEGIN
10187
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10188
 
f_charbig = 'updated by trigger'
10189
 
      WHERE f_int1 = - old.f_int1;
10190
 
END|
10191
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10192
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10193
 
        
10194
 
# check trigger-6 success:      1
10195
 
DROP TRIGGER trg_1;
10196
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10197
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10198
 
f_charbig = 'just inserted'
10199
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10200
 
DELETE FROM t0_aux
10201
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10202
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10203
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10204
 
'just inserted' FROM t0_template
10205
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10206
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10207
 
BEGIN
10208
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10209
 
f_charbig = 'updated by trigger'
10210
 
      WHERE f_int1 = - old.f_int1;
10211
 
END|
10212
 
DELETE FROM t0_aux
10213
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10214
 
        
10215
 
# check trigger-7 success:      1
10216
 
DROP TRIGGER trg_1;
10217
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10218
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10219
 
f_charbig = 'just inserted'
10220
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10221
 
DELETE FROM t0_aux
10222
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10223
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10224
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10225
 
'just inserted' FROM t0_template
10226
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10227
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10228
 
BEGIN
10229
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10230
 
f_charbig = 'updated by trigger'
10231
 
      WHERE f_int1 = - old.f_int1;
10232
 
END|
10233
 
DELETE FROM t0_aux
10234
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10235
 
        
10236
 
# check trigger-8 success:      1
10237
 
DROP TRIGGER trg_1;
10238
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10239
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10240
 
f_charbig = 'just inserted'
10241
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10242
 
DELETE FROM t0_aux
10243
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10244
 
DELETE FROM t1
10245
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10246
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10247
 
BEGIN
10248
 
SET new.f_int1 = old.f_int1 + @max_row,
10249
 
new.f_int2 = old.f_int2 - @max_row,
10250
 
new.f_charbig = '####updated per update trigger####';
10251
 
END|
10252
 
UPDATE t1
10253
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10254
 
f_charbig = '####updated per update statement itself####';
10255
 
        
10256
 
# check trigger-9 success:      1
10257
 
DROP TRIGGER trg_2;
10258
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10259
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10260
 
f_charbig = CONCAT('===',f_char1,'===');
10261
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10262
 
BEGIN
10263
 
SET new.f_int1 = new.f_int1 + @max_row,
10264
 
new.f_int2 = new.f_int2 - @max_row,
10265
 
new.f_charbig = '####updated per update trigger####';
10266
 
END|
10267
 
UPDATE t1
10268
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10269
 
f_charbig = '####updated per update statement itself####';
10270
 
        
10271
 
# check trigger-10 success:     1
10272
 
DROP TRIGGER trg_2;
10273
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10274
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10275
 
f_charbig = CONCAT('===',f_char1,'===');
10276
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10277
 
BEGIN
10278
 
SET new.f_int1 = @my_max1 + @counter,
10279
 
new.f_int2 = @my_min2 - @counter,
10280
 
new.f_charbig = '####updated per insert trigger####';
10281
 
SET @counter = @counter + 1;
10282
 
END|
10283
 
SET @counter = 1;
10284
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10285
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10286
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10287
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10288
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10289
 
ORDER BY f_int1;
10290
 
DROP TRIGGER trg_3;
10291
 
        
10292
 
# check trigger-11 success:     1
10293
 
DELETE FROM t1
10294
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10295
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10296
 
AND f_charbig = '####updated per insert trigger####';
10297
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10298
 
BEGIN
10299
 
SET new.f_int1 = @my_max1 + @counter,
10300
 
new.f_int2 = @my_min2 - @counter,
10301
 
new.f_charbig = '####updated per insert trigger####';
10302
 
SET @counter = @counter + 1;
10303
 
END|
10304
 
SET @counter = 1;
10305
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10306
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
10307
 
SELECT CAST(f_int1 AS CHAR),
10308
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10309
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10310
 
ORDER BY f_int1;
10311
 
DROP TRIGGER trg_3;
10312
 
        
10313
 
# check trigger-12 success:     1
10314
 
DELETE FROM t1
10315
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10316
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10317
 
AND f_charbig = '####updated per insert trigger####';
10318
 
ANALYZE  TABLE t1;
10319
 
Table   Op      Msg_type        Msg_text
10320
 
test.t1 analyze status  OK
10321
 
CHECK    TABLE t1 EXTENDED;
10322
 
Table   Op      Msg_type        Msg_text
10323
 
test.t1 check   status  OK
10324
 
CHECKSUM TABLE t1 EXTENDED;
10325
 
Table   Checksum
10326
 
test.t1 <some_value>
10327
 
OPTIMIZE TABLE t1;
10328
 
Table   Op      Msg_type        Msg_text
10329
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
10330
 
test.t1 optimize        status  OK
10331
 
# check layout success:    1
10332
 
REPAIR   TABLE t1 EXTENDED;
10333
 
Table   Op      Msg_type        Msg_text
10334
 
test.t1 repair  note    The storage engine for the table doesn't support repair
10335
 
# check layout success:    1
10336
 
TRUNCATE t1;
10337
 
        
10338
 
# check TRUNCATE success:       1
10339
 
# check layout success:    1
10340
 
# End usability test (inc/partition_check.inc)
10341
 
DROP TABLE t1;
10342
 
CREATE TABLE t1 (
10343
 
f_int1 INTEGER,
10344
 
f_int2 INTEGER,
10345
 
f_char1 CHAR(20),
10346
 
f_char2 CHAR(20),
10347
 
f_charbig VARCHAR(1000)
10348
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
10349
 
)
10350
 
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
10351
 
(PARTITION part1 VALUES IN (0)
10352
 
(SUBPARTITION sp11,
10353
 
SUBPARTITION sp12),
10354
 
PARTITION part2 VALUES IN (1)
10355
 
(SUBPARTITION sp21,
10356
 
SUBPARTITION sp22),
10357
 
PARTITION part3 VALUES IN (2)
10358
 
(SUBPARTITION sp31, 
10359
 
SUBPARTITION sp32),
10360
 
PARTITION part4 VALUES IN (NULL)
10361
 
(SUBPARTITION sp41,
10362
 
SUBPARTITION sp42));
10363
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10364
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
10365
 
# Start usability test (inc/partition_check.inc)
10366
 
create_command
10367
 
SHOW CREATE TABLE t1;
10368
 
Table   Create Table
10369
 
t1      CREATE TABLE `t1` (
10370
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
10371
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
10372
 
  `f_char1` char(20) DEFAULT NULL,
10373
 
  `f_char2` char(20) DEFAULT NULL,
10374
 
  `f_charbig` varchar(1000) DEFAULT NULL,
10375
 
  PRIMARY KEY (`f_int2`,`f_int1`),
10376
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
10377
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
10378
 
 
10379
 
unified filelist
10380
 
t1.frm
10381
 
t1.par
10382
 
 
10383
 
# check prerequisites-1 success:    1
10384
 
# check COUNT(*) success:    1
10385
 
# check MIN/MAX(f_int1) success:    1
10386
 
# check MIN/MAX(f_int2) success:    1
10387
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10388
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10389
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10390
 
WHERE f_int1 IN (2,3);
10391
 
ERROR 23000: Can't write; duplicate key in table 't1'
10392
 
# check prerequisites-3 success:    1
10393
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10394
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10395
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10396
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10397
 
WHERE f_int1 IN (2,3);
10398
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
10399
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10400
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10401
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10402
 
WHERE f_int1 IN (2,3);
10403
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
10404
 
# check read via f_int1 success: 1
10405
 
# check read via f_int2 success: 1
10406
 
        
10407
 
# check multiple-1 success:     1
10408
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10409
 
        
10410
 
# check multiple-2 success:     1
10411
 
INSERT INTO t1 SELECT * FROM t0_template
10412
 
WHERE MOD(f_int1,3) = 0;
10413
 
        
10414
 
# check multiple-3 success:     1
10415
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
10416
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10417
 
AND @max_row_div2 + @max_row_div4;
10418
 
        
10419
 
# check multiple-4 success:     1
10420
 
DELETE FROM t1
10421
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10422
 
AND @max_row_div2 + @max_row_div4 + @max_row;
10423
 
        
10424
 
# check multiple-5 success:     1
10425
 
SELECT COUNT(*) INTO @try_count FROM t0_template
10426
 
WHERE MOD(f_int1,3) = 0
10427
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10428
 
SELECT COUNT(*) INTO @clash_count
10429
 
FROM t1 INNER JOIN t0_template USING(f_int1)
10430
 
WHERE MOD(f_int1,3) = 0
10431
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10432
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10433
 
INSERT INTO t1
10434
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
10435
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10436
 
f_charbig = '#SINGLE#';
10437
 
        
10438
 
# check single-1 success:       1
10439
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10440
 
INSERT INTO t1
10441
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
10442
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10443
 
f_charbig = '#SINGLE#';
10444
 
        
10445
 
# check single-2 success:       1
10446
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10447
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10448
 
UPDATE t1 SET f_int1 = @cur_value2
10449
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10450
 
        
10451
 
# check single-3 success:       1
10452
 
SET @cur_value1= -1;
10453
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10454
 
UPDATE t1 SET f_int1 = @cur_value1
10455
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10456
 
        
10457
 
# check single-4 success:       1
10458
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
10459
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10460
 
        
10461
 
# check single-5 success:       1
10462
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10463
 
        
10464
 
# check single-6 success:       1
10465
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10466
 
        
10467
 
# check single-7 success:       1
10468
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
10469
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10470
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10471
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10472
 
f_charbig = '#NULL#';
10473
 
INSERT INTO t1
10474
 
SET f_int1 = NULL , f_int2 = -@max_row,
10475
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10476
 
f_charbig = '#NULL#';
10477
 
ERROR 23000: Column 'f_int1' cannot be null
10478
 
# check null success:    1
10479
 
DELETE FROM t1
10480
 
WHERE f_int1 = 0 AND f_int2 = 0
10481
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10482
 
AND f_charbig = '#NULL#';
10483
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10484
 
SELECT f_int1, f_int1, '', '', 'was inserted'
10485
 
   FROM t0_template source_tab
10486
 
WHERE MOD(f_int1,3) = 0
10487
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
10488
 
ON DUPLICATE KEY
10489
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10490
 
f_int2 = 2 * @max_row + source_tab.f_int1,
10491
 
f_charbig = 'was updated';
10492
 
        
10493
 
# check unique-1-a success:     1
10494
 
        
10495
 
# check unique-1-b success:     1
10496
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
10497
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10498
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10499
 
f_charbig = CONCAT('===',f_char1,'===')
10500
 
WHERE f_charbig = 'was updated';
10501
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10502
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10503
 
   FROM t0_template source_tab
10504
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10505
 
        
10506
 
# check replace success:        1
10507
 
DELETE FROM t1
10508
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10509
 
DELETE FROM t1
10510
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10511
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10512
 
UPDATE t1 SET f_int2 = f_int1,
10513
 
f_char1 = CAST(f_int1 AS CHAR),
10514
 
f_char2 = CAST(f_int1 AS CHAR),
10515
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10516
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10517
 
SET AUTOCOMMIT= 0;
10518
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10519
 
SELECT f_int1, f_int1, '', '', 'was inserted'
10520
 
FROM t0_template source_tab
10521
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10522
 
        
10523
 
# check transactions-1 success:         1
10524
 
COMMIT WORK;
10525
 
        
10526
 
# check transactions-2 success:         1
10527
 
ROLLBACK WORK;
10528
 
        
10529
 
# check transactions-3 success:         1
10530
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
10531
 
COMMIT WORK;
10532
 
ROLLBACK WORK;
10533
 
        
10534
 
# check transactions-4 success:         1
10535
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10536
 
SELECT f_int1, f_int1, '', '', 'was inserted'
10537
 
FROM t0_template source_tab
10538
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10539
 
        
10540
 
# check transactions-5 success:         1
10541
 
ROLLBACK WORK;
10542
 
        
10543
 
# check transactions-6 success:         1
10544
 
# INFO: Storage engine used for t1 seems to be transactional.
10545
 
COMMIT;
10546
 
        
10547
 
# check transactions-7 success:         1
10548
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
10549
 
COMMIT WORK;
10550
 
SET @@session.sql_mode = 'traditional';
10551
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10552
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10553
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10554
 
'', '', 'was inserted' FROM t0_template
10555
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10556
 
ERROR 22012: Division by 0
10557
 
COMMIT;
10558
 
        
10559
 
# check transactions-8 success:         1
10560
 
# INFO: Storage engine used for t1 seems to be able to revert
10561
 
#       changes made by the failing statement.
10562
 
SET @@session.sql_mode = '';
10563
 
SET AUTOCOMMIT= 1;
10564
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
10565
 
COMMIT WORK;
10566
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10567
 
        
10568
 
# check special-1 success:      1
10569
 
UPDATE t1 SET f_charbig = '';
10570
 
        
10571
 
# check special-2 success:      1
10572
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10573
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10574
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10575
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10576
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10577
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10578
 
'just inserted' FROM t0_template
10579
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10580
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10581
 
BEGIN
10582
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10583
 
f_charbig = 'updated by trigger'
10584
 
      WHERE f_int1 = new.f_int1;
10585
 
END|
10586
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10587
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10588
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10589
 
        
10590
 
# check trigger-1 success:      1
10591
 
DROP TRIGGER trg_1;
10592
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10593
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10594
 
f_charbig = 'just inserted'
10595
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10596
 
DELETE FROM t0_aux
10597
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10598
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10599
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10600
 
'just inserted' FROM t0_template
10601
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10602
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10603
 
BEGIN
10604
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10605
 
f_charbig = 'updated by trigger'
10606
 
      WHERE f_int1 = new.f_int1;
10607
 
END|
10608
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10609
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10610
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10611
 
        
10612
 
# check trigger-2 success:      1
10613
 
DROP TRIGGER trg_1;
10614
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10615
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10616
 
f_charbig = 'just inserted'
10617
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10618
 
DELETE FROM t0_aux
10619
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10620
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10621
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10622
 
'just inserted' FROM t0_template
10623
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10624
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10625
 
BEGIN
10626
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10627
 
f_charbig = 'updated by trigger'
10628
 
      WHERE f_int1 = new.f_int1;
10629
 
END|
10630
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10631
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10632
 
        
10633
 
# check trigger-3 success:      1
10634
 
DROP TRIGGER trg_1;
10635
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10636
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10637
 
f_charbig = 'just inserted'
10638
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10639
 
DELETE FROM t0_aux
10640
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10641
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10642
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10643
 
'just inserted' FROM t0_template
10644
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10645
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10646
 
BEGIN
10647
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10648
 
f_charbig = 'updated by trigger'
10649
 
      WHERE f_int1 = - old.f_int1;
10650
 
END|
10651
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10652
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10653
 
        
10654
 
# check trigger-4 success:      1
10655
 
DROP TRIGGER trg_1;
10656
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10657
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10658
 
f_charbig = 'just inserted'
10659
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10660
 
DELETE FROM t0_aux
10661
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10662
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10663
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10664
 
'just inserted' FROM t0_template
10665
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10666
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10667
 
BEGIN
10668
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10669
 
f_charbig = 'updated by trigger'
10670
 
      WHERE f_int1 = new.f_int1;
10671
 
END|
10672
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10673
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10674
 
        
10675
 
# check trigger-5 success:      1
10676
 
DROP TRIGGER trg_1;
10677
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10678
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10679
 
f_charbig = 'just inserted'
10680
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10681
 
DELETE FROM t0_aux
10682
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10683
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10684
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10685
 
'just inserted' FROM t0_template
10686
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10687
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10688
 
BEGIN
10689
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10690
 
f_charbig = 'updated by trigger'
10691
 
      WHERE f_int1 = - old.f_int1;
10692
 
END|
10693
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10694
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10695
 
        
10696
 
# check trigger-6 success:      1
10697
 
DROP TRIGGER trg_1;
10698
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10699
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10700
 
f_charbig = 'just inserted'
10701
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10702
 
DELETE FROM t0_aux
10703
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10704
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10705
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10706
 
'just inserted' FROM t0_template
10707
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10708
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10709
 
BEGIN
10710
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10711
 
f_charbig = 'updated by trigger'
10712
 
      WHERE f_int1 = - old.f_int1;
10713
 
END|
10714
 
DELETE FROM t0_aux
10715
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10716
 
        
10717
 
# check trigger-7 success:      1
10718
 
DROP TRIGGER trg_1;
10719
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10720
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10721
 
f_charbig = 'just inserted'
10722
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10723
 
DELETE FROM t0_aux
10724
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10725
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10726
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10727
 
'just inserted' FROM t0_template
10728
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10729
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10730
 
BEGIN
10731
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10732
 
f_charbig = 'updated by trigger'
10733
 
      WHERE f_int1 = - old.f_int1;
10734
 
END|
10735
 
DELETE FROM t0_aux
10736
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10737
 
        
10738
 
# check trigger-8 success:      1
10739
 
DROP TRIGGER trg_1;
10740
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10741
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10742
 
f_charbig = 'just inserted'
10743
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10744
 
DELETE FROM t0_aux
10745
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10746
 
DELETE FROM t1
10747
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10748
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10749
 
BEGIN
10750
 
SET new.f_int1 = old.f_int1 + @max_row,
10751
 
new.f_int2 = old.f_int2 - @max_row,
10752
 
new.f_charbig = '####updated per update trigger####';
10753
 
END|
10754
 
UPDATE t1
10755
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10756
 
f_charbig = '####updated per update statement itself####';
10757
 
        
10758
 
# check trigger-9 success:      1
10759
 
DROP TRIGGER trg_2;
10760
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10761
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10762
 
f_charbig = CONCAT('===',f_char1,'===');
10763
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10764
 
BEGIN
10765
 
SET new.f_int1 = new.f_int1 + @max_row,
10766
 
new.f_int2 = new.f_int2 - @max_row,
10767
 
new.f_charbig = '####updated per update trigger####';
10768
 
END|
10769
 
UPDATE t1
10770
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10771
 
f_charbig = '####updated per update statement itself####';
10772
 
        
10773
 
# check trigger-10 success:     1
10774
 
DROP TRIGGER trg_2;
10775
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10776
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10777
 
f_charbig = CONCAT('===',f_char1,'===');
10778
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10779
 
BEGIN
10780
 
SET new.f_int1 = @my_max1 + @counter,
10781
 
new.f_int2 = @my_min2 - @counter,
10782
 
new.f_charbig = '####updated per insert trigger####';
10783
 
SET @counter = @counter + 1;
10784
 
END|
10785
 
SET @counter = 1;
10786
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10787
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10788
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10789
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10790
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10791
 
ORDER BY f_int1;
10792
 
DROP TRIGGER trg_3;
10793
 
        
10794
 
# check trigger-11 success:     1
10795
 
DELETE FROM t1
10796
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10797
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10798
 
AND f_charbig = '####updated per insert trigger####';
10799
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10800
 
BEGIN
10801
 
SET new.f_int1 = @my_max1 + @counter,
10802
 
new.f_int2 = @my_min2 - @counter,
10803
 
new.f_charbig = '####updated per insert trigger####';
10804
 
SET @counter = @counter + 1;
10805
 
END|
10806
 
SET @counter = 1;
10807
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10808
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
10809
 
SELECT CAST(f_int1 AS CHAR),
10810
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10811
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10812
 
ORDER BY f_int1;
10813
 
DROP TRIGGER trg_3;
10814
 
        
10815
 
# check trigger-12 success:     1
10816
 
DELETE FROM t1
10817
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10818
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10819
 
AND f_charbig = '####updated per insert trigger####';
10820
 
ANALYZE  TABLE t1;
10821
 
Table   Op      Msg_type        Msg_text
10822
 
test.t1 analyze status  OK
10823
 
CHECK    TABLE t1 EXTENDED;
10824
 
Table   Op      Msg_type        Msg_text
10825
 
test.t1 check   status  OK
10826
 
CHECKSUM TABLE t1 EXTENDED;
10827
 
Table   Checksum
10828
 
test.t1 <some_value>
10829
 
OPTIMIZE TABLE t1;
10830
 
Table   Op      Msg_type        Msg_text
10831
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
10832
 
test.t1 optimize        status  OK
10833
 
# check layout success:    1
10834
 
REPAIR   TABLE t1 EXTENDED;
10835
 
Table   Op      Msg_type        Msg_text
10836
 
test.t1 repair  note    The storage engine for the table doesn't support repair
10837
 
# check layout success:    1
10838
 
TRUNCATE t1;
10839
 
        
10840
 
# check TRUNCATE success:       1
10841
 
# check layout success:    1
10842
 
# End usability test (inc/partition_check.inc)
10843
 
DROP TABLE t1;
10844
 
CREATE TABLE t1 (
10845
 
f_int1 INTEGER,
10846
 
f_int2 INTEGER,
10847
 
f_char1 CHAR(20),
10848
 
f_char2 CHAR(20),
10849
 
f_charbig VARCHAR(1000)
10850
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
10851
 
)
10852
 
PARTITION BY LIST(ABS(MOD(f_int1,2)))
10853
 
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
10854
 
(PARTITION part1 VALUES IN (0),
10855
 
PARTITION part2 VALUES IN (1),
10856
 
PARTITION part3 VALUES IN (NULL));
10857
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10858
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
10859
 
# Start usability test (inc/partition_check.inc)
10860
 
create_command
10861
 
SHOW CREATE TABLE t1;
10862
 
Table   Create Table
10863
 
t1      CREATE TABLE `t1` (
10864
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
10865
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
10866
 
  `f_char1` char(20) DEFAULT NULL,
10867
 
  `f_char2` char(20) DEFAULT NULL,
10868
 
  `f_charbig` varchar(1000) DEFAULT NULL,
10869
 
  PRIMARY KEY (`f_int2`,`f_int1`),
10870
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
10871
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
10872
 
 
10873
 
unified filelist
10874
 
t1.frm
10875
 
t1.par
10876
 
 
10877
 
# check prerequisites-1 success:    1
10878
 
# check COUNT(*) success:    1
10879
 
# check MIN/MAX(f_int1) success:    1
10880
 
# check MIN/MAX(f_int2) success:    1
10881
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10882
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10883
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10884
 
WHERE f_int1 IN (2,3);
10885
 
ERROR 23000: Can't write; duplicate key in table 't1'
10886
 
# check prerequisites-3 success:    1
10887
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10888
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10889
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10890
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10891
 
WHERE f_int1 IN (2,3);
10892
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
10893
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10894
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10895
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10896
 
WHERE f_int1 IN (2,3);
10897
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
10898
 
# check read via f_int1 success: 1
10899
 
# check read via f_int2 success: 1
10900
 
        
10901
 
# check multiple-1 success:     1
10902
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10903
 
        
10904
 
# check multiple-2 success:     1
10905
 
INSERT INTO t1 SELECT * FROM t0_template
10906
 
WHERE MOD(f_int1,3) = 0;
10907
 
        
10908
 
# check multiple-3 success:     1
10909
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
10910
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10911
 
AND @max_row_div2 + @max_row_div4;
10912
 
        
10913
 
# check multiple-4 success:     1
10914
 
DELETE FROM t1
10915
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10916
 
AND @max_row_div2 + @max_row_div4 + @max_row;
10917
 
        
10918
 
# check multiple-5 success:     1
10919
 
SELECT COUNT(*) INTO @try_count FROM t0_template
10920
 
WHERE MOD(f_int1,3) = 0
10921
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10922
 
SELECT COUNT(*) INTO @clash_count
10923
 
FROM t1 INNER JOIN t0_template USING(f_int1)
10924
 
WHERE MOD(f_int1,3) = 0
10925
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10926
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10927
 
INSERT INTO t1
10928
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
10929
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10930
 
f_charbig = '#SINGLE#';
10931
 
        
10932
 
# check single-1 success:       1
10933
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10934
 
INSERT INTO t1
10935
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
10936
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10937
 
f_charbig = '#SINGLE#';
10938
 
        
10939
 
# check single-2 success:       1
10940
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10941
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10942
 
UPDATE t1 SET f_int1 = @cur_value2
10943
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10944
 
        
10945
 
# check single-3 success:       1
10946
 
SET @cur_value1= -1;
10947
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10948
 
UPDATE t1 SET f_int1 = @cur_value1
10949
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10950
 
        
10951
 
# check single-4 success:       1
10952
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
10953
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10954
 
        
10955
 
# check single-5 success:       1
10956
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10957
 
        
10958
 
# check single-6 success:       1
10959
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10960
 
        
10961
 
# check single-7 success:       1
10962
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
10963
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10964
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10965
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10966
 
f_charbig = '#NULL#';
10967
 
INSERT INTO t1
10968
 
SET f_int1 = NULL , f_int2 = -@max_row,
10969
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10970
 
f_charbig = '#NULL#';
10971
 
ERROR 23000: Column 'f_int1' cannot be null
10972
 
# check null success:    1
10973
 
DELETE FROM t1
10974
 
WHERE f_int1 = 0 AND f_int2 = 0
10975
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10976
 
AND f_charbig = '#NULL#';
10977
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10978
 
SELECT f_int1, f_int1, '', '', 'was inserted'
10979
 
   FROM t0_template source_tab
10980
 
WHERE MOD(f_int1,3) = 0
10981
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
10982
 
ON DUPLICATE KEY
10983
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10984
 
f_int2 = 2 * @max_row + source_tab.f_int1,
10985
 
f_charbig = 'was updated';
10986
 
        
10987
 
# check unique-1-a success:     1
10988
 
        
10989
 
# check unique-1-b success:     1
10990
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
10991
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10992
 
f_int2 = CAST(f_char1 AS SIGNED INT),
10993
 
f_charbig = CONCAT('===',f_char1,'===')
10994
 
WHERE f_charbig = 'was updated';
10995
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10996
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10997
 
   FROM t0_template source_tab
10998
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10999
 
        
11000
 
# check replace success:        1
11001
 
DELETE FROM t1
11002
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11003
 
DELETE FROM t1
11004
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11005
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11006
 
UPDATE t1 SET f_int2 = f_int1,
11007
 
f_char1 = CAST(f_int1 AS CHAR),
11008
 
f_char2 = CAST(f_int1 AS CHAR),
11009
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11010
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11011
 
SET AUTOCOMMIT= 0;
11012
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11013
 
SELECT f_int1, f_int1, '', '', 'was inserted'
11014
 
FROM t0_template source_tab
11015
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11016
 
        
11017
 
# check transactions-1 success:         1
11018
 
COMMIT WORK;
11019
 
        
11020
 
# check transactions-2 success:         1
11021
 
ROLLBACK WORK;
11022
 
        
11023
 
# check transactions-3 success:         1
11024
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
11025
 
COMMIT WORK;
11026
 
ROLLBACK WORK;
11027
 
        
11028
 
# check transactions-4 success:         1
11029
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11030
 
SELECT f_int1, f_int1, '', '', 'was inserted'
11031
 
FROM t0_template source_tab
11032
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11033
 
        
11034
 
# check transactions-5 success:         1
11035
 
ROLLBACK WORK;
11036
 
        
11037
 
# check transactions-6 success:         1
11038
 
# INFO: Storage engine used for t1 seems to be transactional.
11039
 
COMMIT;
11040
 
        
11041
 
# check transactions-7 success:         1
11042
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
11043
 
COMMIT WORK;
11044
 
SET @@session.sql_mode = 'traditional';
11045
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11046
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11047
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11048
 
'', '', 'was inserted' FROM t0_template
11049
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11050
 
ERROR 22012: Division by 0
11051
 
COMMIT;
11052
 
        
11053
 
# check transactions-8 success:         1
11054
 
# INFO: Storage engine used for t1 seems to be able to revert
11055
 
#       changes made by the failing statement.
11056
 
SET @@session.sql_mode = '';
11057
 
SET AUTOCOMMIT= 1;
11058
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
11059
 
COMMIT WORK;
11060
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11061
 
        
11062
 
# check special-1 success:      1
11063
 
UPDATE t1 SET f_charbig = '';
11064
 
        
11065
 
# check special-2 success:      1
11066
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11067
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11068
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11069
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11070
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11071
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11072
 
'just inserted' FROM t0_template
11073
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11074
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11075
 
BEGIN
11076
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11077
 
f_charbig = 'updated by trigger'
11078
 
      WHERE f_int1 = new.f_int1;
11079
 
END|
11080
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11081
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11082
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11083
 
        
11084
 
# check trigger-1 success:      1
11085
 
DROP TRIGGER trg_1;
11086
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11087
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11088
 
f_charbig = 'just inserted'
11089
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11090
 
DELETE FROM t0_aux
11091
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11092
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11093
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11094
 
'just inserted' FROM t0_template
11095
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11096
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11097
 
BEGIN
11098
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11099
 
f_charbig = 'updated by trigger'
11100
 
      WHERE f_int1 = new.f_int1;
11101
 
END|
11102
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11103
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11104
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11105
 
        
11106
 
# check trigger-2 success:      1
11107
 
DROP TRIGGER trg_1;
11108
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11109
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11110
 
f_charbig = 'just inserted'
11111
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11112
 
DELETE FROM t0_aux
11113
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11114
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11115
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11116
 
'just inserted' FROM t0_template
11117
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11118
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11119
 
BEGIN
11120
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11121
 
f_charbig = 'updated by trigger'
11122
 
      WHERE f_int1 = new.f_int1;
11123
 
END|
11124
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11125
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11126
 
        
11127
 
# check trigger-3 success:      1
11128
 
DROP TRIGGER trg_1;
11129
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11130
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11131
 
f_charbig = 'just inserted'
11132
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11133
 
DELETE FROM t0_aux
11134
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11135
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11136
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11137
 
'just inserted' FROM t0_template
11138
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11139
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11140
 
BEGIN
11141
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11142
 
f_charbig = 'updated by trigger'
11143
 
      WHERE f_int1 = - old.f_int1;
11144
 
END|
11145
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11146
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11147
 
        
11148
 
# check trigger-4 success:      1
11149
 
DROP TRIGGER trg_1;
11150
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11151
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11152
 
f_charbig = 'just inserted'
11153
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11154
 
DELETE FROM t0_aux
11155
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11156
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11157
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11158
 
'just inserted' FROM t0_template
11159
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11160
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11161
 
BEGIN
11162
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11163
 
f_charbig = 'updated by trigger'
11164
 
      WHERE f_int1 = new.f_int1;
11165
 
END|
11166
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11167
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11168
 
        
11169
 
# check trigger-5 success:      1
11170
 
DROP TRIGGER trg_1;
11171
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11172
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11173
 
f_charbig = 'just inserted'
11174
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11175
 
DELETE FROM t0_aux
11176
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11177
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11178
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11179
 
'just inserted' FROM t0_template
11180
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11181
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11182
 
BEGIN
11183
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11184
 
f_charbig = 'updated by trigger'
11185
 
      WHERE f_int1 = - old.f_int1;
11186
 
END|
11187
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11188
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11189
 
        
11190
 
# check trigger-6 success:      1
11191
 
DROP TRIGGER trg_1;
11192
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11193
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11194
 
f_charbig = 'just inserted'
11195
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11196
 
DELETE FROM t0_aux
11197
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11198
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11199
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11200
 
'just inserted' FROM t0_template
11201
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11202
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11203
 
BEGIN
11204
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11205
 
f_charbig = 'updated by trigger'
11206
 
      WHERE f_int1 = - old.f_int1;
11207
 
END|
11208
 
DELETE FROM t0_aux
11209
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11210
 
        
11211
 
# check trigger-7 success:      1
11212
 
DROP TRIGGER trg_1;
11213
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11214
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11215
 
f_charbig = 'just inserted'
11216
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11217
 
DELETE FROM t0_aux
11218
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11219
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11220
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11221
 
'just inserted' FROM t0_template
11222
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11223
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11224
 
BEGIN
11225
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11226
 
f_charbig = 'updated by trigger'
11227
 
      WHERE f_int1 = - old.f_int1;
11228
 
END|
11229
 
DELETE FROM t0_aux
11230
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11231
 
        
11232
 
# check trigger-8 success:      1
11233
 
DROP TRIGGER trg_1;
11234
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11235
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11236
 
f_charbig = 'just inserted'
11237
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11238
 
DELETE FROM t0_aux
11239
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11240
 
DELETE FROM t1
11241
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11242
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11243
 
BEGIN
11244
 
SET new.f_int1 = old.f_int1 + @max_row,
11245
 
new.f_int2 = old.f_int2 - @max_row,
11246
 
new.f_charbig = '####updated per update trigger####';
11247
 
END|
11248
 
UPDATE t1
11249
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11250
 
f_charbig = '####updated per update statement itself####';
11251
 
        
11252
 
# check trigger-9 success:      1
11253
 
DROP TRIGGER trg_2;
11254
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11255
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11256
 
f_charbig = CONCAT('===',f_char1,'===');
11257
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11258
 
BEGIN
11259
 
SET new.f_int1 = new.f_int1 + @max_row,
11260
 
new.f_int2 = new.f_int2 - @max_row,
11261
 
new.f_charbig = '####updated per update trigger####';
11262
 
END|
11263
 
UPDATE t1
11264
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11265
 
f_charbig = '####updated per update statement itself####';
11266
 
        
11267
 
# check trigger-10 success:     1
11268
 
DROP TRIGGER trg_2;
11269
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11270
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11271
 
f_charbig = CONCAT('===',f_char1,'===');
11272
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11273
 
BEGIN
11274
 
SET new.f_int1 = @my_max1 + @counter,
11275
 
new.f_int2 = @my_min2 - @counter,
11276
 
new.f_charbig = '####updated per insert trigger####';
11277
 
SET @counter = @counter + 1;
11278
 
END|
11279
 
SET @counter = 1;
11280
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11281
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11282
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11283
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11284
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11285
 
ORDER BY f_int1;
11286
 
DROP TRIGGER trg_3;
11287
 
        
11288
 
# check trigger-11 success:     1
11289
 
DELETE FROM t1
11290
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11291
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11292
 
AND f_charbig = '####updated per insert trigger####';
11293
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11294
 
BEGIN
11295
 
SET new.f_int1 = @my_max1 + @counter,
11296
 
new.f_int2 = @my_min2 - @counter,
11297
 
new.f_charbig = '####updated per insert trigger####';
11298
 
SET @counter = @counter + 1;
11299
 
END|
11300
 
SET @counter = 1;
11301
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11302
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
11303
 
SELECT CAST(f_int1 AS CHAR),
11304
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11305
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11306
 
ORDER BY f_int1;
11307
 
DROP TRIGGER trg_3;
11308
 
        
11309
 
# check trigger-12 success:     1
11310
 
DELETE FROM t1
11311
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11312
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11313
 
AND f_charbig = '####updated per insert trigger####';
11314
 
ANALYZE  TABLE t1;
11315
 
Table   Op      Msg_type        Msg_text
11316
 
test.t1 analyze status  OK
11317
 
CHECK    TABLE t1 EXTENDED;
11318
 
Table   Op      Msg_type        Msg_text
11319
 
test.t1 check   status  OK
11320
 
CHECKSUM TABLE t1 EXTENDED;
11321
 
Table   Checksum
11322
 
test.t1 <some_value>
11323
 
OPTIMIZE TABLE t1;
11324
 
Table   Op      Msg_type        Msg_text
11325
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
11326
 
test.t1 optimize        status  OK
11327
 
# check layout success:    1
11328
 
REPAIR   TABLE t1 EXTENDED;
11329
 
Table   Op      Msg_type        Msg_text
11330
 
test.t1 repair  note    The storage engine for the table doesn't support repair
11331
 
# check layout success:    1
11332
 
TRUNCATE t1;
11333
 
        
11334
 
# check TRUNCATE success:       1
11335
 
# check layout success:    1
11336
 
# End usability test (inc/partition_check.inc)
11337
 
DROP TABLE t1;
11338
 
DROP TABLE IF EXISTS t1;
11339
 
CREATE TABLE t1 (
11340
 
f_int1 INTEGER,
11341
 
f_int2 INTEGER,
11342
 
f_char1 CHAR(20),
11343
 
f_char2 CHAR(20),
11344
 
f_charbig VARCHAR(1000)
11345
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
11346
 
)
11347
 
PARTITION BY HASH(f_int1) PARTITIONS 2;
11348
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11349
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
11350
 
# Start usability test (inc/partition_check.inc)
11351
 
create_command
11352
 
SHOW CREATE TABLE t1;
11353
 
Table   Create Table
11354
 
t1      CREATE TABLE `t1` (
11355
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
11356
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
11357
 
  `f_char1` char(20) DEFAULT NULL,
11358
 
  `f_char2` char(20) DEFAULT NULL,
11359
 
  `f_charbig` varchar(1000) DEFAULT NULL,
11360
 
  PRIMARY KEY (`f_int1`,`f_int2`),
11361
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
11362
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
11363
 
 
11364
 
unified filelist
11365
 
t1.frm
11366
 
t1.par
11367
 
 
11368
 
# check prerequisites-1 success:    1
11369
 
# check COUNT(*) success:    1
11370
 
# check MIN/MAX(f_int1) success:    1
11371
 
# check MIN/MAX(f_int2) success:    1
11372
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11373
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11374
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11375
 
WHERE f_int1 IN (2,3);
11376
 
ERROR 23000: Can't write; duplicate key in table 't1'
11377
 
# check prerequisites-3 success:    1
11378
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11379
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11380
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11381
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11382
 
WHERE f_int1 IN (2,3);
11383
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
11384
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11385
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11386
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11387
 
WHERE f_int1 IN (2,3);
11388
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
11389
 
# check read via f_int1 success: 1
11390
 
# check read via f_int2 success: 1
11391
 
        
11392
 
# check multiple-1 success:     1
11393
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11394
 
        
11395
 
# check multiple-2 success:     1
11396
 
INSERT INTO t1 SELECT * FROM t0_template
11397
 
WHERE MOD(f_int1,3) = 0;
11398
 
        
11399
 
# check multiple-3 success:     1
11400
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
11401
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11402
 
AND @max_row_div2 + @max_row_div4;
11403
 
        
11404
 
# check multiple-4 success:     1
11405
 
DELETE FROM t1
11406
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11407
 
AND @max_row_div2 + @max_row_div4 + @max_row;
11408
 
        
11409
 
# check multiple-5 success:     1
11410
 
SELECT COUNT(*) INTO @try_count FROM t0_template
11411
 
WHERE MOD(f_int1,3) = 0
11412
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11413
 
SELECT COUNT(*) INTO @clash_count
11414
 
FROM t1 INNER JOIN t0_template USING(f_int1)
11415
 
WHERE MOD(f_int1,3) = 0
11416
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11417
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11418
 
INSERT INTO t1
11419
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
11420
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11421
 
f_charbig = '#SINGLE#';
11422
 
        
11423
 
# check single-1 success:       1
11424
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11425
 
INSERT INTO t1
11426
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
11427
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11428
 
f_charbig = '#SINGLE#';
11429
 
        
11430
 
# check single-2 success:       1
11431
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11432
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11433
 
UPDATE t1 SET f_int1 = @cur_value2
11434
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11435
 
        
11436
 
# check single-3 success:       1
11437
 
SET @cur_value1= -1;
11438
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11439
 
UPDATE t1 SET f_int1 = @cur_value1
11440
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11441
 
        
11442
 
# check single-4 success:       1
11443
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
11444
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11445
 
        
11446
 
# check single-5 success:       1
11447
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11448
 
        
11449
 
# check single-6 success:       1
11450
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11451
 
        
11452
 
# check single-7 success:       1
11453
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11454
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11455
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11456
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11457
 
f_charbig = '#NULL#';
11458
 
INSERT INTO t1
11459
 
SET f_int1 = NULL , f_int2 = -@max_row,
11460
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11461
 
f_charbig = '#NULL#';
11462
 
ERROR 23000: Column 'f_int1' cannot be null
11463
 
# check null success:    1
11464
 
DELETE FROM t1
11465
 
WHERE f_int1 = 0 AND f_int2 = 0
11466
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11467
 
AND f_charbig = '#NULL#';
11468
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11469
 
SELECT f_int1, f_int1, '', '', 'was inserted'
11470
 
   FROM t0_template source_tab
11471
 
WHERE MOD(f_int1,3) = 0
11472
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
11473
 
ON DUPLICATE KEY
11474
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11475
 
f_int2 = 2 * @max_row + source_tab.f_int1,
11476
 
f_charbig = 'was updated';
11477
 
        
11478
 
# check unique-1-a success:     1
11479
 
        
11480
 
# check unique-1-b success:     1
11481
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
11482
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11483
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11484
 
f_charbig = CONCAT('===',f_char1,'===')
11485
 
WHERE f_charbig = 'was updated';
11486
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11487
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11488
 
   FROM t0_template source_tab
11489
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11490
 
        
11491
 
# check replace success:        1
11492
 
DELETE FROM t1
11493
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11494
 
DELETE FROM t1
11495
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11496
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11497
 
UPDATE t1 SET f_int2 = f_int1,
11498
 
f_char1 = CAST(f_int1 AS CHAR),
11499
 
f_char2 = CAST(f_int1 AS CHAR),
11500
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11501
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11502
 
SET AUTOCOMMIT= 0;
11503
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11504
 
SELECT f_int1, f_int1, '', '', 'was inserted'
11505
 
FROM t0_template source_tab
11506
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11507
 
        
11508
 
# check transactions-1 success:         1
11509
 
COMMIT WORK;
11510
 
        
11511
 
# check transactions-2 success:         1
11512
 
ROLLBACK WORK;
11513
 
        
11514
 
# check transactions-3 success:         1
11515
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
11516
 
COMMIT WORK;
11517
 
ROLLBACK WORK;
11518
 
        
11519
 
# check transactions-4 success:         1
11520
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11521
 
SELECT f_int1, f_int1, '', '', 'was inserted'
11522
 
FROM t0_template source_tab
11523
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11524
 
        
11525
 
# check transactions-5 success:         1
11526
 
ROLLBACK WORK;
11527
 
        
11528
 
# check transactions-6 success:         1
11529
 
# INFO: Storage engine used for t1 seems to be transactional.
11530
 
COMMIT;
11531
 
        
11532
 
# check transactions-7 success:         1
11533
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
11534
 
COMMIT WORK;
11535
 
SET @@session.sql_mode = 'traditional';
11536
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11537
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11538
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11539
 
'', '', 'was inserted' FROM t0_template
11540
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11541
 
ERROR 22012: Division by 0
11542
 
COMMIT;
11543
 
        
11544
 
# check transactions-8 success:         1
11545
 
# INFO: Storage engine used for t1 seems to be able to revert
11546
 
#       changes made by the failing statement.
11547
 
SET @@session.sql_mode = '';
11548
 
SET AUTOCOMMIT= 1;
11549
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
11550
 
COMMIT WORK;
11551
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11552
 
        
11553
 
# check special-1 success:      1
11554
 
UPDATE t1 SET f_charbig = '';
11555
 
        
11556
 
# check special-2 success:      1
11557
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11558
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11559
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11560
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11561
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11562
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11563
 
'just inserted' FROM t0_template
11564
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11565
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11566
 
BEGIN
11567
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11568
 
f_charbig = 'updated by trigger'
11569
 
      WHERE f_int1 = new.f_int1;
11570
 
END|
11571
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11572
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11573
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11574
 
        
11575
 
# check trigger-1 success:      1
11576
 
DROP TRIGGER trg_1;
11577
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11578
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11579
 
f_charbig = 'just inserted'
11580
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11581
 
DELETE FROM t0_aux
11582
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11583
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11584
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11585
 
'just inserted' FROM t0_template
11586
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11587
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11588
 
BEGIN
11589
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11590
 
f_charbig = 'updated by trigger'
11591
 
      WHERE f_int1 = new.f_int1;
11592
 
END|
11593
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11594
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11595
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11596
 
        
11597
 
# check trigger-2 success:      1
11598
 
DROP TRIGGER trg_1;
11599
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11600
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11601
 
f_charbig = 'just inserted'
11602
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11603
 
DELETE FROM t0_aux
11604
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11605
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11606
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11607
 
'just inserted' FROM t0_template
11608
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11609
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11610
 
BEGIN
11611
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11612
 
f_charbig = 'updated by trigger'
11613
 
      WHERE f_int1 = new.f_int1;
11614
 
END|
11615
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11616
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11617
 
        
11618
 
# check trigger-3 success:      1
11619
 
DROP TRIGGER trg_1;
11620
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11621
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11622
 
f_charbig = 'just inserted'
11623
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11624
 
DELETE FROM t0_aux
11625
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11626
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11627
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11628
 
'just inserted' FROM t0_template
11629
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11630
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11631
 
BEGIN
11632
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11633
 
f_charbig = 'updated by trigger'
11634
 
      WHERE f_int1 = - old.f_int1;
11635
 
END|
11636
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11637
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11638
 
        
11639
 
# check trigger-4 success:      1
11640
 
DROP TRIGGER trg_1;
11641
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11642
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11643
 
f_charbig = 'just inserted'
11644
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11645
 
DELETE FROM t0_aux
11646
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11647
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11648
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11649
 
'just inserted' FROM t0_template
11650
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11651
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11652
 
BEGIN
11653
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11654
 
f_charbig = 'updated by trigger'
11655
 
      WHERE f_int1 = new.f_int1;
11656
 
END|
11657
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11658
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11659
 
        
11660
 
# check trigger-5 success:      1
11661
 
DROP TRIGGER trg_1;
11662
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11663
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11664
 
f_charbig = 'just inserted'
11665
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11666
 
DELETE FROM t0_aux
11667
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11668
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11669
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11670
 
'just inserted' FROM t0_template
11671
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11672
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11673
 
BEGIN
11674
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11675
 
f_charbig = 'updated by trigger'
11676
 
      WHERE f_int1 = - old.f_int1;
11677
 
END|
11678
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11679
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11680
 
        
11681
 
# check trigger-6 success:      1
11682
 
DROP TRIGGER trg_1;
11683
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11684
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11685
 
f_charbig = 'just inserted'
11686
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11687
 
DELETE FROM t0_aux
11688
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11689
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11690
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11691
 
'just inserted' FROM t0_template
11692
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11693
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11694
 
BEGIN
11695
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11696
 
f_charbig = 'updated by trigger'
11697
 
      WHERE f_int1 = - old.f_int1;
11698
 
END|
11699
 
DELETE FROM t0_aux
11700
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11701
 
        
11702
 
# check trigger-7 success:      1
11703
 
DROP TRIGGER trg_1;
11704
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11705
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11706
 
f_charbig = 'just inserted'
11707
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11708
 
DELETE FROM t0_aux
11709
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11710
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11711
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11712
 
'just inserted' FROM t0_template
11713
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11714
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11715
 
BEGIN
11716
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11717
 
f_charbig = 'updated by trigger'
11718
 
      WHERE f_int1 = - old.f_int1;
11719
 
END|
11720
 
DELETE FROM t0_aux
11721
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11722
 
        
11723
 
# check trigger-8 success:      1
11724
 
DROP TRIGGER trg_1;
11725
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11726
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11727
 
f_charbig = 'just inserted'
11728
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11729
 
DELETE FROM t0_aux
11730
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11731
 
DELETE FROM t1
11732
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11733
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11734
 
BEGIN
11735
 
SET new.f_int1 = old.f_int1 + @max_row,
11736
 
new.f_int2 = old.f_int2 - @max_row,
11737
 
new.f_charbig = '####updated per update trigger####';
11738
 
END|
11739
 
UPDATE t1
11740
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11741
 
f_charbig = '####updated per update statement itself####';
11742
 
        
11743
 
# check trigger-9 success:      1
11744
 
DROP TRIGGER trg_2;
11745
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11746
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11747
 
f_charbig = CONCAT('===',f_char1,'===');
11748
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11749
 
BEGIN
11750
 
SET new.f_int1 = new.f_int1 + @max_row,
11751
 
new.f_int2 = new.f_int2 - @max_row,
11752
 
new.f_charbig = '####updated per update trigger####';
11753
 
END|
11754
 
UPDATE t1
11755
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11756
 
f_charbig = '####updated per update statement itself####';
11757
 
        
11758
 
# check trigger-10 success:     1
11759
 
DROP TRIGGER trg_2;
11760
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11761
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11762
 
f_charbig = CONCAT('===',f_char1,'===');
11763
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11764
 
BEGIN
11765
 
SET new.f_int1 = @my_max1 + @counter,
11766
 
new.f_int2 = @my_min2 - @counter,
11767
 
new.f_charbig = '####updated per insert trigger####';
11768
 
SET @counter = @counter + 1;
11769
 
END|
11770
 
SET @counter = 1;
11771
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11772
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11773
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11774
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11775
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11776
 
ORDER BY f_int1;
11777
 
DROP TRIGGER trg_3;
11778
 
        
11779
 
# check trigger-11 success:     1
11780
 
DELETE FROM t1
11781
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11782
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11783
 
AND f_charbig = '####updated per insert trigger####';
11784
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11785
 
BEGIN
11786
 
SET new.f_int1 = @my_max1 + @counter,
11787
 
new.f_int2 = @my_min2 - @counter,
11788
 
new.f_charbig = '####updated per insert trigger####';
11789
 
SET @counter = @counter + 1;
11790
 
END|
11791
 
SET @counter = 1;
11792
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11793
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
11794
 
SELECT CAST(f_int1 AS CHAR),
11795
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11796
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11797
 
ORDER BY f_int1;
11798
 
DROP TRIGGER trg_3;
11799
 
        
11800
 
# check trigger-12 success:     1
11801
 
DELETE FROM t1
11802
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11803
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11804
 
AND f_charbig = '####updated per insert trigger####';
11805
 
ANALYZE  TABLE t1;
11806
 
Table   Op      Msg_type        Msg_text
11807
 
test.t1 analyze status  OK
11808
 
CHECK    TABLE t1 EXTENDED;
11809
 
Table   Op      Msg_type        Msg_text
11810
 
test.t1 check   status  OK
11811
 
CHECKSUM TABLE t1 EXTENDED;
11812
 
Table   Checksum
11813
 
test.t1 <some_value>
11814
 
OPTIMIZE TABLE t1;
11815
 
Table   Op      Msg_type        Msg_text
11816
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
11817
 
test.t1 optimize        status  OK
11818
 
# check layout success:    1
11819
 
REPAIR   TABLE t1 EXTENDED;
11820
 
Table   Op      Msg_type        Msg_text
11821
 
test.t1 repair  note    The storage engine for the table doesn't support repair
11822
 
# check layout success:    1
11823
 
TRUNCATE t1;
11824
 
        
11825
 
# check TRUNCATE success:       1
11826
 
# check layout success:    1
11827
 
# End usability test (inc/partition_check.inc)
11828
 
DROP TABLE t1;
11829
 
CREATE TABLE t1 (
11830
 
f_int1 INTEGER,
11831
 
f_int2 INTEGER,
11832
 
f_char1 CHAR(20),
11833
 
f_char2 CHAR(20),
11834
 
f_charbig VARCHAR(1000)
11835
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
11836
 
)
11837
 
PARTITION BY KEY(f_int1) PARTITIONS 5;
11838
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11839
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
11840
 
# Start usability test (inc/partition_check.inc)
11841
 
create_command
11842
 
SHOW CREATE TABLE t1;
11843
 
Table   Create Table
11844
 
t1      CREATE TABLE `t1` (
11845
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
11846
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
11847
 
  `f_char1` char(20) DEFAULT NULL,
11848
 
  `f_char2` char(20) DEFAULT NULL,
11849
 
  `f_charbig` varchar(1000) DEFAULT NULL,
11850
 
  PRIMARY KEY (`f_int1`,`f_int2`),
11851
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
11852
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
11853
 
 
11854
 
unified filelist
11855
 
t1.frm
11856
 
t1.par
11857
 
 
11858
 
# check prerequisites-1 success:    1
11859
 
# check COUNT(*) success:    1
11860
 
# check MIN/MAX(f_int1) success:    1
11861
 
# check MIN/MAX(f_int2) success:    1
11862
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11863
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11864
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11865
 
WHERE f_int1 IN (2,3);
11866
 
ERROR 23000: Can't write; duplicate key in table 't1'
11867
 
# check prerequisites-3 success:    1
11868
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11869
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11870
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11871
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11872
 
WHERE f_int1 IN (2,3);
11873
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
11874
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11875
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11876
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11877
 
WHERE f_int1 IN (2,3);
11878
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
11879
 
# check read via f_int1 success: 1
11880
 
# check read via f_int2 success: 1
11881
 
        
11882
 
# check multiple-1 success:     1
11883
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11884
 
        
11885
 
# check multiple-2 success:     1
11886
 
INSERT INTO t1 SELECT * FROM t0_template
11887
 
WHERE MOD(f_int1,3) = 0;
11888
 
        
11889
 
# check multiple-3 success:     1
11890
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
11891
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11892
 
AND @max_row_div2 + @max_row_div4;
11893
 
        
11894
 
# check multiple-4 success:     1
11895
 
DELETE FROM t1
11896
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11897
 
AND @max_row_div2 + @max_row_div4 + @max_row;
11898
 
        
11899
 
# check multiple-5 success:     1
11900
 
SELECT COUNT(*) INTO @try_count FROM t0_template
11901
 
WHERE MOD(f_int1,3) = 0
11902
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11903
 
SELECT COUNT(*) INTO @clash_count
11904
 
FROM t1 INNER JOIN t0_template USING(f_int1)
11905
 
WHERE MOD(f_int1,3) = 0
11906
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11907
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11908
 
INSERT INTO t1
11909
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
11910
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11911
 
f_charbig = '#SINGLE#';
11912
 
        
11913
 
# check single-1 success:       1
11914
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11915
 
INSERT INTO t1
11916
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
11917
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11918
 
f_charbig = '#SINGLE#';
11919
 
        
11920
 
# check single-2 success:       1
11921
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11922
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11923
 
UPDATE t1 SET f_int1 = @cur_value2
11924
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11925
 
        
11926
 
# check single-3 success:       1
11927
 
SET @cur_value1= -1;
11928
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11929
 
UPDATE t1 SET f_int1 = @cur_value1
11930
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11931
 
        
11932
 
# check single-4 success:       1
11933
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
11934
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11935
 
        
11936
 
# check single-5 success:       1
11937
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11938
 
        
11939
 
# check single-6 success:       1
11940
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11941
 
        
11942
 
# check single-7 success:       1
11943
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11944
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11945
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11946
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11947
 
f_charbig = '#NULL#';
11948
 
INSERT INTO t1
11949
 
SET f_int1 = NULL , f_int2 = -@max_row,
11950
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11951
 
f_charbig = '#NULL#';
11952
 
ERROR 23000: Column 'f_int1' cannot be null
11953
 
# check null success:    1
11954
 
DELETE FROM t1
11955
 
WHERE f_int1 = 0 AND f_int2 = 0
11956
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11957
 
AND f_charbig = '#NULL#';
11958
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11959
 
SELECT f_int1, f_int1, '', '', 'was inserted'
11960
 
   FROM t0_template source_tab
11961
 
WHERE MOD(f_int1,3) = 0
11962
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
11963
 
ON DUPLICATE KEY
11964
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11965
 
f_int2 = 2 * @max_row + source_tab.f_int1,
11966
 
f_charbig = 'was updated';
11967
 
        
11968
 
# check unique-1-a success:     1
11969
 
        
11970
 
# check unique-1-b success:     1
11971
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
11972
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11973
 
f_int2 = CAST(f_char1 AS SIGNED INT),
11974
 
f_charbig = CONCAT('===',f_char1,'===')
11975
 
WHERE f_charbig = 'was updated';
11976
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11977
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11978
 
   FROM t0_template source_tab
11979
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11980
 
        
11981
 
# check replace success:        1
11982
 
DELETE FROM t1
11983
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11984
 
DELETE FROM t1
11985
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11986
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11987
 
UPDATE t1 SET f_int2 = f_int1,
11988
 
f_char1 = CAST(f_int1 AS CHAR),
11989
 
f_char2 = CAST(f_int1 AS CHAR),
11990
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11991
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11992
 
SET AUTOCOMMIT= 0;
11993
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11994
 
SELECT f_int1, f_int1, '', '', 'was inserted'
11995
 
FROM t0_template source_tab
11996
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11997
 
        
11998
 
# check transactions-1 success:         1
11999
 
COMMIT WORK;
12000
 
        
12001
 
# check transactions-2 success:         1
12002
 
ROLLBACK WORK;
12003
 
        
12004
 
# check transactions-3 success:         1
12005
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
12006
 
COMMIT WORK;
12007
 
ROLLBACK WORK;
12008
 
        
12009
 
# check transactions-4 success:         1
12010
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12011
 
SELECT f_int1, f_int1, '', '', 'was inserted'
12012
 
FROM t0_template source_tab
12013
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12014
 
        
12015
 
# check transactions-5 success:         1
12016
 
ROLLBACK WORK;
12017
 
        
12018
 
# check transactions-6 success:         1
12019
 
# INFO: Storage engine used for t1 seems to be transactional.
12020
 
COMMIT;
12021
 
        
12022
 
# check transactions-7 success:         1
12023
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
12024
 
COMMIT WORK;
12025
 
SET @@session.sql_mode = 'traditional';
12026
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12027
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12028
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12029
 
'', '', 'was inserted' FROM t0_template
12030
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12031
 
ERROR 22012: Division by 0
12032
 
COMMIT;
12033
 
        
12034
 
# check transactions-8 success:         1
12035
 
# INFO: Storage engine used for t1 seems to be able to revert
12036
 
#       changes made by the failing statement.
12037
 
SET @@session.sql_mode = '';
12038
 
SET AUTOCOMMIT= 1;
12039
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
12040
 
COMMIT WORK;
12041
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12042
 
        
12043
 
# check special-1 success:      1
12044
 
UPDATE t1 SET f_charbig = '';
12045
 
        
12046
 
# check special-2 success:      1
12047
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12048
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12049
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12050
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12051
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12052
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12053
 
'just inserted' FROM t0_template
12054
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12055
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12056
 
BEGIN
12057
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12058
 
f_charbig = 'updated by trigger'
12059
 
      WHERE f_int1 = new.f_int1;
12060
 
END|
12061
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12062
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12063
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12064
 
        
12065
 
# check trigger-1 success:      1
12066
 
DROP TRIGGER trg_1;
12067
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12068
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12069
 
f_charbig = 'just inserted'
12070
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12071
 
DELETE FROM t0_aux
12072
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12073
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12074
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12075
 
'just inserted' FROM t0_template
12076
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12077
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12078
 
BEGIN
12079
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12080
 
f_charbig = 'updated by trigger'
12081
 
      WHERE f_int1 = new.f_int1;
12082
 
END|
12083
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12084
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12085
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12086
 
        
12087
 
# check trigger-2 success:      1
12088
 
DROP TRIGGER trg_1;
12089
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12090
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12091
 
f_charbig = 'just inserted'
12092
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12093
 
DELETE FROM t0_aux
12094
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12095
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12096
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12097
 
'just inserted' FROM t0_template
12098
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12099
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12100
 
BEGIN
12101
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12102
 
f_charbig = 'updated by trigger'
12103
 
      WHERE f_int1 = new.f_int1;
12104
 
END|
12105
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12106
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12107
 
        
12108
 
# check trigger-3 success:      1
12109
 
DROP TRIGGER trg_1;
12110
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12111
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12112
 
f_charbig = 'just inserted'
12113
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12114
 
DELETE FROM t0_aux
12115
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12116
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12117
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12118
 
'just inserted' FROM t0_template
12119
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12120
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12121
 
BEGIN
12122
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12123
 
f_charbig = 'updated by trigger'
12124
 
      WHERE f_int1 = - old.f_int1;
12125
 
END|
12126
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12127
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12128
 
        
12129
 
# check trigger-4 success:      1
12130
 
DROP TRIGGER trg_1;
12131
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12132
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12133
 
f_charbig = 'just inserted'
12134
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12135
 
DELETE FROM t0_aux
12136
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12137
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12138
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12139
 
'just inserted' FROM t0_template
12140
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12141
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12142
 
BEGIN
12143
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12144
 
f_charbig = 'updated by trigger'
12145
 
      WHERE f_int1 = new.f_int1;
12146
 
END|
12147
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12148
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12149
 
        
12150
 
# check trigger-5 success:      1
12151
 
DROP TRIGGER trg_1;
12152
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12153
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12154
 
f_charbig = 'just inserted'
12155
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12156
 
DELETE FROM t0_aux
12157
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12158
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12159
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12160
 
'just inserted' FROM t0_template
12161
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12162
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12163
 
BEGIN
12164
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12165
 
f_charbig = 'updated by trigger'
12166
 
      WHERE f_int1 = - old.f_int1;
12167
 
END|
12168
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12169
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12170
 
        
12171
 
# check trigger-6 success:      1
12172
 
DROP TRIGGER trg_1;
12173
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12174
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12175
 
f_charbig = 'just inserted'
12176
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12177
 
DELETE FROM t0_aux
12178
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12179
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12180
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12181
 
'just inserted' FROM t0_template
12182
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12183
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12184
 
BEGIN
12185
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12186
 
f_charbig = 'updated by trigger'
12187
 
      WHERE f_int1 = - old.f_int1;
12188
 
END|
12189
 
DELETE FROM t0_aux
12190
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12191
 
        
12192
 
# check trigger-7 success:      1
12193
 
DROP TRIGGER trg_1;
12194
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12195
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12196
 
f_charbig = 'just inserted'
12197
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12198
 
DELETE FROM t0_aux
12199
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12200
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12201
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12202
 
'just inserted' FROM t0_template
12203
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12204
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12205
 
BEGIN
12206
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12207
 
f_charbig = 'updated by trigger'
12208
 
      WHERE f_int1 = - old.f_int1;
12209
 
END|
12210
 
DELETE FROM t0_aux
12211
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12212
 
        
12213
 
# check trigger-8 success:      1
12214
 
DROP TRIGGER trg_1;
12215
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12216
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12217
 
f_charbig = 'just inserted'
12218
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12219
 
DELETE FROM t0_aux
12220
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12221
 
DELETE FROM t1
12222
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12223
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12224
 
BEGIN
12225
 
SET new.f_int1 = old.f_int1 + @max_row,
12226
 
new.f_int2 = old.f_int2 - @max_row,
12227
 
new.f_charbig = '####updated per update trigger####';
12228
 
END|
12229
 
UPDATE t1
12230
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12231
 
f_charbig = '####updated per update statement itself####';
12232
 
        
12233
 
# check trigger-9 success:      1
12234
 
DROP TRIGGER trg_2;
12235
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12236
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12237
 
f_charbig = CONCAT('===',f_char1,'===');
12238
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12239
 
BEGIN
12240
 
SET new.f_int1 = new.f_int1 + @max_row,
12241
 
new.f_int2 = new.f_int2 - @max_row,
12242
 
new.f_charbig = '####updated per update trigger####';
12243
 
END|
12244
 
UPDATE t1
12245
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12246
 
f_charbig = '####updated per update statement itself####';
12247
 
        
12248
 
# check trigger-10 success:     1
12249
 
DROP TRIGGER trg_2;
12250
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12251
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12252
 
f_charbig = CONCAT('===',f_char1,'===');
12253
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12254
 
BEGIN
12255
 
SET new.f_int1 = @my_max1 + @counter,
12256
 
new.f_int2 = @my_min2 - @counter,
12257
 
new.f_charbig = '####updated per insert trigger####';
12258
 
SET @counter = @counter + 1;
12259
 
END|
12260
 
SET @counter = 1;
12261
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12262
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12263
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12264
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12265
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12266
 
ORDER BY f_int1;
12267
 
DROP TRIGGER trg_3;
12268
 
        
12269
 
# check trigger-11 success:     1
12270
 
DELETE FROM t1
12271
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12272
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12273
 
AND f_charbig = '####updated per insert trigger####';
12274
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12275
 
BEGIN
12276
 
SET new.f_int1 = @my_max1 + @counter,
12277
 
new.f_int2 = @my_min2 - @counter,
12278
 
new.f_charbig = '####updated per insert trigger####';
12279
 
SET @counter = @counter + 1;
12280
 
END|
12281
 
SET @counter = 1;
12282
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12283
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
12284
 
SELECT CAST(f_int1 AS CHAR),
12285
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12286
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12287
 
ORDER BY f_int1;
12288
 
DROP TRIGGER trg_3;
12289
 
        
12290
 
# check trigger-12 success:     1
12291
 
DELETE FROM t1
12292
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12293
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12294
 
AND f_charbig = '####updated per insert trigger####';
12295
 
ANALYZE  TABLE t1;
12296
 
Table   Op      Msg_type        Msg_text
12297
 
test.t1 analyze status  OK
12298
 
CHECK    TABLE t1 EXTENDED;
12299
 
Table   Op      Msg_type        Msg_text
12300
 
test.t1 check   status  OK
12301
 
CHECKSUM TABLE t1 EXTENDED;
12302
 
Table   Checksum
12303
 
test.t1 <some_value>
12304
 
OPTIMIZE TABLE t1;
12305
 
Table   Op      Msg_type        Msg_text
12306
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
12307
 
test.t1 optimize        status  OK
12308
 
# check layout success:    1
12309
 
REPAIR   TABLE t1 EXTENDED;
12310
 
Table   Op      Msg_type        Msg_text
12311
 
test.t1 repair  note    The storage engine for the table doesn't support repair
12312
 
# check layout success:    1
12313
 
TRUNCATE t1;
12314
 
        
12315
 
# check TRUNCATE success:       1
12316
 
# check layout success:    1
12317
 
# End usability test (inc/partition_check.inc)
12318
 
DROP TABLE t1;
12319
 
CREATE TABLE t1 (
12320
 
f_int1 INTEGER,
12321
 
f_int2 INTEGER,
12322
 
f_char1 CHAR(20),
12323
 
f_char2 CHAR(20),
12324
 
f_charbig VARCHAR(1000)
12325
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
12326
 
)
12327
 
PARTITION BY LIST(MOD(f_int1,4))
12328
 
(PARTITION part_3 VALUES IN (-3),
12329
 
PARTITION part_2 VALUES IN (-2),
12330
 
PARTITION part_1 VALUES IN (-1),
12331
 
PARTITION part_N VALUES IN (NULL),
12332
 
PARTITION part0 VALUES IN (0),
12333
 
PARTITION part1 VALUES IN (1),
12334
 
PARTITION part2 VALUES IN (2),
12335
 
PARTITION part3 VALUES IN (3));
12336
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12337
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
12338
 
# Start usability test (inc/partition_check.inc)
12339
 
create_command
12340
 
SHOW CREATE TABLE t1;
12341
 
Table   Create Table
12342
 
t1      CREATE TABLE `t1` (
12343
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
12344
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
12345
 
  `f_char1` char(20) DEFAULT NULL,
12346
 
  `f_char2` char(20) DEFAULT NULL,
12347
 
  `f_charbig` varchar(1000) DEFAULT NULL,
12348
 
  PRIMARY KEY (`f_int1`,`f_int2`),
12349
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
12350
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
12351
 
 
12352
 
unified filelist
12353
 
t1.frm
12354
 
t1.par
12355
 
 
12356
 
# check prerequisites-1 success:    1
12357
 
# check COUNT(*) success:    1
12358
 
# check MIN/MAX(f_int1) success:    1
12359
 
# check MIN/MAX(f_int2) success:    1
12360
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12361
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12362
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12363
 
WHERE f_int1 IN (2,3);
12364
 
ERROR 23000: Can't write; duplicate key in table 't1'
12365
 
# check prerequisites-3 success:    1
12366
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12367
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12368
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12369
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12370
 
WHERE f_int1 IN (2,3);
12371
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
12372
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12373
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12374
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12375
 
WHERE f_int1 IN (2,3);
12376
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
12377
 
# check read via f_int1 success: 1
12378
 
# check read via f_int2 success: 1
12379
 
        
12380
 
# check multiple-1 success:     1
12381
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12382
 
        
12383
 
# check multiple-2 success:     1
12384
 
INSERT INTO t1 SELECT * FROM t0_template
12385
 
WHERE MOD(f_int1,3) = 0;
12386
 
        
12387
 
# check multiple-3 success:     1
12388
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
12389
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12390
 
AND @max_row_div2 + @max_row_div4;
12391
 
        
12392
 
# check multiple-4 success:     1
12393
 
DELETE FROM t1
12394
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12395
 
AND @max_row_div2 + @max_row_div4 + @max_row;
12396
 
        
12397
 
# check multiple-5 success:     1
12398
 
SELECT COUNT(*) INTO @try_count FROM t0_template
12399
 
WHERE MOD(f_int1,3) = 0
12400
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12401
 
SELECT COUNT(*) INTO @clash_count
12402
 
FROM t1 INNER JOIN t0_template USING(f_int1)
12403
 
WHERE MOD(f_int1,3) = 0
12404
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12405
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12406
 
INSERT INTO t1
12407
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
12408
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12409
 
f_charbig = '#SINGLE#';
12410
 
        
12411
 
# check single-1 success:       1
12412
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12413
 
INSERT INTO t1
12414
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
12415
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12416
 
f_charbig = '#SINGLE#';
12417
 
        
12418
 
# check single-2 success:       1
12419
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12420
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12421
 
UPDATE t1 SET f_int1 = @cur_value2
12422
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12423
 
        
12424
 
# check single-3 success:       1
12425
 
SET @cur_value1= -1;
12426
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12427
 
UPDATE t1 SET f_int1 = @cur_value1
12428
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12429
 
        
12430
 
# check single-4 success:       1
12431
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
12432
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12433
 
        
12434
 
# check single-5 success:       1
12435
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12436
 
        
12437
 
# check single-6 success:       1
12438
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12439
 
        
12440
 
# check single-7 success:       1
12441
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12442
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12443
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12444
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12445
 
f_charbig = '#NULL#';
12446
 
INSERT INTO t1
12447
 
SET f_int1 = NULL , f_int2 = -@max_row,
12448
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12449
 
f_charbig = '#NULL#';
12450
 
ERROR 23000: Column 'f_int1' cannot be null
12451
 
# check null success:    1
12452
 
DELETE FROM t1
12453
 
WHERE f_int1 = 0 AND f_int2 = 0
12454
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12455
 
AND f_charbig = '#NULL#';
12456
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12457
 
SELECT f_int1, f_int1, '', '', 'was inserted'
12458
 
   FROM t0_template source_tab
12459
 
WHERE MOD(f_int1,3) = 0
12460
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
12461
 
ON DUPLICATE KEY
12462
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12463
 
f_int2 = 2 * @max_row + source_tab.f_int1,
12464
 
f_charbig = 'was updated';
12465
 
        
12466
 
# check unique-1-a success:     1
12467
 
        
12468
 
# check unique-1-b success:     1
12469
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
12470
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12471
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12472
 
f_charbig = CONCAT('===',f_char1,'===')
12473
 
WHERE f_charbig = 'was updated';
12474
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12475
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12476
 
   FROM t0_template source_tab
12477
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12478
 
        
12479
 
# check replace success:        1
12480
 
DELETE FROM t1
12481
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12482
 
DELETE FROM t1
12483
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12484
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12485
 
UPDATE t1 SET f_int2 = f_int1,
12486
 
f_char1 = CAST(f_int1 AS CHAR),
12487
 
f_char2 = CAST(f_int1 AS CHAR),
12488
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12489
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12490
 
SET AUTOCOMMIT= 0;
12491
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12492
 
SELECT f_int1, f_int1, '', '', 'was inserted'
12493
 
FROM t0_template source_tab
12494
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12495
 
        
12496
 
# check transactions-1 success:         1
12497
 
COMMIT WORK;
12498
 
        
12499
 
# check transactions-2 success:         1
12500
 
ROLLBACK WORK;
12501
 
        
12502
 
# check transactions-3 success:         1
12503
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
12504
 
COMMIT WORK;
12505
 
ROLLBACK WORK;
12506
 
        
12507
 
# check transactions-4 success:         1
12508
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12509
 
SELECT f_int1, f_int1, '', '', 'was inserted'
12510
 
FROM t0_template source_tab
12511
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12512
 
        
12513
 
# check transactions-5 success:         1
12514
 
ROLLBACK WORK;
12515
 
        
12516
 
# check transactions-6 success:         1
12517
 
# INFO: Storage engine used for t1 seems to be transactional.
12518
 
COMMIT;
12519
 
        
12520
 
# check transactions-7 success:         1
12521
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
12522
 
COMMIT WORK;
12523
 
SET @@session.sql_mode = 'traditional';
12524
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12525
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12526
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12527
 
'', '', 'was inserted' FROM t0_template
12528
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12529
 
ERROR 22012: Division by 0
12530
 
COMMIT;
12531
 
        
12532
 
# check transactions-8 success:         1
12533
 
# INFO: Storage engine used for t1 seems to be able to revert
12534
 
#       changes made by the failing statement.
12535
 
SET @@session.sql_mode = '';
12536
 
SET AUTOCOMMIT= 1;
12537
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
12538
 
COMMIT WORK;
12539
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12540
 
        
12541
 
# check special-1 success:      1
12542
 
UPDATE t1 SET f_charbig = '';
12543
 
        
12544
 
# check special-2 success:      1
12545
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12546
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12547
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12548
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12549
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12550
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12551
 
'just inserted' FROM t0_template
12552
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12553
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12554
 
BEGIN
12555
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12556
 
f_charbig = 'updated by trigger'
12557
 
      WHERE f_int1 = new.f_int1;
12558
 
END|
12559
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12560
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12561
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12562
 
        
12563
 
# check trigger-1 success:      1
12564
 
DROP TRIGGER trg_1;
12565
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12566
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12567
 
f_charbig = 'just inserted'
12568
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12569
 
DELETE FROM t0_aux
12570
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12571
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12572
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12573
 
'just inserted' FROM t0_template
12574
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12575
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12576
 
BEGIN
12577
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12578
 
f_charbig = 'updated by trigger'
12579
 
      WHERE f_int1 = new.f_int1;
12580
 
END|
12581
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12582
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12583
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12584
 
        
12585
 
# check trigger-2 success:      1
12586
 
DROP TRIGGER trg_1;
12587
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12588
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12589
 
f_charbig = 'just inserted'
12590
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12591
 
DELETE FROM t0_aux
12592
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12593
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12594
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12595
 
'just inserted' FROM t0_template
12596
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12597
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12598
 
BEGIN
12599
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12600
 
f_charbig = 'updated by trigger'
12601
 
      WHERE f_int1 = new.f_int1;
12602
 
END|
12603
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12604
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12605
 
        
12606
 
# check trigger-3 success:      1
12607
 
DROP TRIGGER trg_1;
12608
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12609
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12610
 
f_charbig = 'just inserted'
12611
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12612
 
DELETE FROM t0_aux
12613
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12614
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12615
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12616
 
'just inserted' FROM t0_template
12617
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12618
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12619
 
BEGIN
12620
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12621
 
f_charbig = 'updated by trigger'
12622
 
      WHERE f_int1 = - old.f_int1;
12623
 
END|
12624
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12625
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12626
 
        
12627
 
# check trigger-4 success:      1
12628
 
DROP TRIGGER trg_1;
12629
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12630
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12631
 
f_charbig = 'just inserted'
12632
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12633
 
DELETE FROM t0_aux
12634
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12635
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12636
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12637
 
'just inserted' FROM t0_template
12638
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12639
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12640
 
BEGIN
12641
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12642
 
f_charbig = 'updated by trigger'
12643
 
      WHERE f_int1 = new.f_int1;
12644
 
END|
12645
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12646
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12647
 
        
12648
 
# check trigger-5 success:      1
12649
 
DROP TRIGGER trg_1;
12650
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12651
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12652
 
f_charbig = 'just inserted'
12653
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12654
 
DELETE FROM t0_aux
12655
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12656
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12657
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12658
 
'just inserted' FROM t0_template
12659
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12660
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12661
 
BEGIN
12662
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12663
 
f_charbig = 'updated by trigger'
12664
 
      WHERE f_int1 = - old.f_int1;
12665
 
END|
12666
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12667
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12668
 
        
12669
 
# check trigger-6 success:      1
12670
 
DROP TRIGGER trg_1;
12671
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12672
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12673
 
f_charbig = 'just inserted'
12674
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12675
 
DELETE FROM t0_aux
12676
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12677
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12678
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12679
 
'just inserted' FROM t0_template
12680
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12681
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12682
 
BEGIN
12683
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12684
 
f_charbig = 'updated by trigger'
12685
 
      WHERE f_int1 = - old.f_int1;
12686
 
END|
12687
 
DELETE FROM t0_aux
12688
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12689
 
        
12690
 
# check trigger-7 success:      1
12691
 
DROP TRIGGER trg_1;
12692
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12693
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12694
 
f_charbig = 'just inserted'
12695
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12696
 
DELETE FROM t0_aux
12697
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12698
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12699
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12700
 
'just inserted' FROM t0_template
12701
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12702
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12703
 
BEGIN
12704
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12705
 
f_charbig = 'updated by trigger'
12706
 
      WHERE f_int1 = - old.f_int1;
12707
 
END|
12708
 
DELETE FROM t0_aux
12709
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12710
 
        
12711
 
# check trigger-8 success:      1
12712
 
DROP TRIGGER trg_1;
12713
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12714
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12715
 
f_charbig = 'just inserted'
12716
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12717
 
DELETE FROM t0_aux
12718
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12719
 
DELETE FROM t1
12720
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12721
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12722
 
BEGIN
12723
 
SET new.f_int1 = old.f_int1 + @max_row,
12724
 
new.f_int2 = old.f_int2 - @max_row,
12725
 
new.f_charbig = '####updated per update trigger####';
12726
 
END|
12727
 
UPDATE t1
12728
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12729
 
f_charbig = '####updated per update statement itself####';
12730
 
        
12731
 
# check trigger-9 success:      1
12732
 
DROP TRIGGER trg_2;
12733
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12734
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12735
 
f_charbig = CONCAT('===',f_char1,'===');
12736
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12737
 
BEGIN
12738
 
SET new.f_int1 = new.f_int1 + @max_row,
12739
 
new.f_int2 = new.f_int2 - @max_row,
12740
 
new.f_charbig = '####updated per update trigger####';
12741
 
END|
12742
 
UPDATE t1
12743
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12744
 
f_charbig = '####updated per update statement itself####';
12745
 
        
12746
 
# check trigger-10 success:     1
12747
 
DROP TRIGGER trg_2;
12748
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12749
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12750
 
f_charbig = CONCAT('===',f_char1,'===');
12751
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12752
 
BEGIN
12753
 
SET new.f_int1 = @my_max1 + @counter,
12754
 
new.f_int2 = @my_min2 - @counter,
12755
 
new.f_charbig = '####updated per insert trigger####';
12756
 
SET @counter = @counter + 1;
12757
 
END|
12758
 
SET @counter = 1;
12759
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12760
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12761
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12762
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12763
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12764
 
ORDER BY f_int1;
12765
 
DROP TRIGGER trg_3;
12766
 
        
12767
 
# check trigger-11 success:     1
12768
 
DELETE FROM t1
12769
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12770
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12771
 
AND f_charbig = '####updated per insert trigger####';
12772
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12773
 
BEGIN
12774
 
SET new.f_int1 = @my_max1 + @counter,
12775
 
new.f_int2 = @my_min2 - @counter,
12776
 
new.f_charbig = '####updated per insert trigger####';
12777
 
SET @counter = @counter + 1;
12778
 
END|
12779
 
SET @counter = 1;
12780
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12781
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
12782
 
SELECT CAST(f_int1 AS CHAR),
12783
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12784
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12785
 
ORDER BY f_int1;
12786
 
DROP TRIGGER trg_3;
12787
 
        
12788
 
# check trigger-12 success:     1
12789
 
DELETE FROM t1
12790
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12791
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12792
 
AND f_charbig = '####updated per insert trigger####';
12793
 
ANALYZE  TABLE t1;
12794
 
Table   Op      Msg_type        Msg_text
12795
 
test.t1 analyze status  OK
12796
 
CHECK    TABLE t1 EXTENDED;
12797
 
Table   Op      Msg_type        Msg_text
12798
 
test.t1 check   status  OK
12799
 
CHECKSUM TABLE t1 EXTENDED;
12800
 
Table   Checksum
12801
 
test.t1 <some_value>
12802
 
OPTIMIZE TABLE t1;
12803
 
Table   Op      Msg_type        Msg_text
12804
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
12805
 
test.t1 optimize        status  OK
12806
 
# check layout success:    1
12807
 
REPAIR   TABLE t1 EXTENDED;
12808
 
Table   Op      Msg_type        Msg_text
12809
 
test.t1 repair  note    The storage engine for the table doesn't support repair
12810
 
# check layout success:    1
12811
 
TRUNCATE t1;
12812
 
        
12813
 
# check TRUNCATE success:       1
12814
 
# check layout success:    1
12815
 
# End usability test (inc/partition_check.inc)
12816
 
DROP TABLE t1;
12817
 
CREATE TABLE t1 (
12818
 
f_int1 INTEGER,
12819
 
f_int2 INTEGER,
12820
 
f_char1 CHAR(20),
12821
 
f_char2 CHAR(20),
12822
 
f_charbig VARCHAR(1000)
12823
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
12824
 
)
12825
 
PARTITION BY RANGE(f_int1)
12826
 
(PARTITION parta VALUES LESS THAN (0),
12827
 
PARTITION partb VALUES LESS THAN (5),
12828
 
PARTITION partc VALUES LESS THAN (10),
12829
 
PARTITION partd VALUES LESS THAN (10 + 5),
12830
 
PARTITION parte VALUES LESS THAN (20),
12831
 
PARTITION partf VALUES LESS THAN (2147483646));
12832
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12833
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
12834
 
# Start usability test (inc/partition_check.inc)
12835
 
create_command
12836
 
SHOW CREATE TABLE t1;
12837
 
Table   Create Table
12838
 
t1      CREATE TABLE `t1` (
12839
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
12840
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
12841
 
  `f_char1` char(20) DEFAULT NULL,
12842
 
  `f_char2` char(20) DEFAULT NULL,
12843
 
  `f_charbig` varchar(1000) DEFAULT NULL,
12844
 
  PRIMARY KEY (`f_int1`,`f_int2`),
12845
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
12846
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
12847
 
 
12848
 
unified filelist
12849
 
t1.frm
12850
 
t1.par
12851
 
 
12852
 
# check prerequisites-1 success:    1
12853
 
# check COUNT(*) success:    1
12854
 
# check MIN/MAX(f_int1) success:    1
12855
 
# check MIN/MAX(f_int2) success:    1
12856
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12857
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12858
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12859
 
WHERE f_int1 IN (2,3);
12860
 
ERROR 23000: Can't write; duplicate key in table 't1'
12861
 
# check prerequisites-3 success:    1
12862
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12863
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12864
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12865
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12866
 
WHERE f_int1 IN (2,3);
12867
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
12868
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12869
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12870
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12871
 
WHERE f_int1 IN (2,3);
12872
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
12873
 
# check read via f_int1 success: 1
12874
 
# check read via f_int2 success: 1
12875
 
        
12876
 
# check multiple-1 success:     1
12877
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12878
 
        
12879
 
# check multiple-2 success:     1
12880
 
INSERT INTO t1 SELECT * FROM t0_template
12881
 
WHERE MOD(f_int1,3) = 0;
12882
 
        
12883
 
# check multiple-3 success:     1
12884
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
12885
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12886
 
AND @max_row_div2 + @max_row_div4;
12887
 
        
12888
 
# check multiple-4 success:     1
12889
 
DELETE FROM t1
12890
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12891
 
AND @max_row_div2 + @max_row_div4 + @max_row;
12892
 
        
12893
 
# check multiple-5 success:     1
12894
 
SELECT COUNT(*) INTO @try_count FROM t0_template
12895
 
WHERE MOD(f_int1,3) = 0
12896
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12897
 
SELECT COUNT(*) INTO @clash_count
12898
 
FROM t1 INNER JOIN t0_template USING(f_int1)
12899
 
WHERE MOD(f_int1,3) = 0
12900
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12901
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12902
 
INSERT INTO t1
12903
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
12904
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12905
 
f_charbig = '#SINGLE#';
12906
 
        
12907
 
# check single-1 success:       1
12908
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12909
 
INSERT INTO t1
12910
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
12911
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12912
 
f_charbig = '#SINGLE#';
12913
 
        
12914
 
# check single-2 success:       1
12915
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12916
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12917
 
UPDATE t1 SET f_int1 = @cur_value2
12918
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12919
 
        
12920
 
# check single-3 success:       1
12921
 
SET @cur_value1= -1;
12922
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12923
 
UPDATE t1 SET f_int1 = @cur_value1
12924
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12925
 
        
12926
 
# check single-4 success:       1
12927
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
12928
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12929
 
        
12930
 
# check single-5 success:       1
12931
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12932
 
        
12933
 
# check single-6 success:       1
12934
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12935
 
ERROR HY000: Table has no partition for value 2147483647
12936
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12937
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12938
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12939
 
f_charbig = '#NULL#';
12940
 
INSERT INTO t1
12941
 
SET f_int1 = NULL , f_int2 = -@max_row,
12942
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12943
 
f_charbig = '#NULL#';
12944
 
ERROR 23000: Column 'f_int1' cannot be null
12945
 
# check null success:    1
12946
 
DELETE FROM t1
12947
 
WHERE f_int1 = 0 AND f_int2 = 0
12948
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12949
 
AND f_charbig = '#NULL#';
12950
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12951
 
SELECT f_int1, f_int1, '', '', 'was inserted'
12952
 
   FROM t0_template source_tab
12953
 
WHERE MOD(f_int1,3) = 0
12954
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
12955
 
ON DUPLICATE KEY
12956
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12957
 
f_int2 = 2 * @max_row + source_tab.f_int1,
12958
 
f_charbig = 'was updated';
12959
 
        
12960
 
# check unique-1-a success:     1
12961
 
        
12962
 
# check unique-1-b success:     1
12963
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
12964
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12965
 
f_int2 = CAST(f_char1 AS SIGNED INT),
12966
 
f_charbig = CONCAT('===',f_char1,'===')
12967
 
WHERE f_charbig = 'was updated';
12968
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12969
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12970
 
   FROM t0_template source_tab
12971
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12972
 
        
12973
 
# check replace success:        1
12974
 
DELETE FROM t1
12975
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12976
 
DELETE FROM t1
12977
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12978
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12979
 
UPDATE t1 SET f_int2 = f_int1,
12980
 
f_char1 = CAST(f_int1 AS CHAR),
12981
 
f_char2 = CAST(f_int1 AS CHAR),
12982
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12983
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12984
 
SET AUTOCOMMIT= 0;
12985
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12986
 
SELECT f_int1, f_int1, '', '', 'was inserted'
12987
 
FROM t0_template source_tab
12988
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12989
 
        
12990
 
# check transactions-1 success:         1
12991
 
COMMIT WORK;
12992
 
        
12993
 
# check transactions-2 success:         1
12994
 
ROLLBACK WORK;
12995
 
        
12996
 
# check transactions-3 success:         1
12997
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
12998
 
COMMIT WORK;
12999
 
ROLLBACK WORK;
13000
 
        
13001
 
# check transactions-4 success:         1
13002
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13003
 
SELECT f_int1, f_int1, '', '', 'was inserted'
13004
 
FROM t0_template source_tab
13005
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13006
 
        
13007
 
# check transactions-5 success:         1
13008
 
ROLLBACK WORK;
13009
 
        
13010
 
# check transactions-6 success:         1
13011
 
# INFO: Storage engine used for t1 seems to be transactional.
13012
 
COMMIT;
13013
 
        
13014
 
# check transactions-7 success:         1
13015
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
13016
 
COMMIT WORK;
13017
 
SET @@session.sql_mode = 'traditional';
13018
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13019
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13020
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13021
 
'', '', 'was inserted' FROM t0_template
13022
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13023
 
ERROR 22012: Division by 0
13024
 
COMMIT;
13025
 
        
13026
 
# check transactions-8 success:         1
13027
 
# INFO: Storage engine used for t1 seems to be able to revert
13028
 
#       changes made by the failing statement.
13029
 
SET @@session.sql_mode = '';
13030
 
SET AUTOCOMMIT= 1;
13031
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
13032
 
COMMIT WORK;
13033
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13034
 
        
13035
 
# check special-1 success:      1
13036
 
UPDATE t1 SET f_charbig = '';
13037
 
        
13038
 
# check special-2 success:      1
13039
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13040
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13041
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13042
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13043
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13044
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13045
 
'just inserted' FROM t0_template
13046
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13047
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13048
 
BEGIN
13049
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13050
 
f_charbig = 'updated by trigger'
13051
 
      WHERE f_int1 = new.f_int1;
13052
 
END|
13053
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13054
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13055
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13056
 
        
13057
 
# check trigger-1 success:      1
13058
 
DROP TRIGGER trg_1;
13059
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13060
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13061
 
f_charbig = 'just inserted'
13062
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13063
 
DELETE FROM t0_aux
13064
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13065
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13066
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13067
 
'just inserted' FROM t0_template
13068
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13069
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13070
 
BEGIN
13071
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13072
 
f_charbig = 'updated by trigger'
13073
 
      WHERE f_int1 = new.f_int1;
13074
 
END|
13075
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13076
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13077
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13078
 
        
13079
 
# check trigger-2 success:      1
13080
 
DROP TRIGGER trg_1;
13081
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13082
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13083
 
f_charbig = 'just inserted'
13084
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13085
 
DELETE FROM t0_aux
13086
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13087
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13088
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13089
 
'just inserted' FROM t0_template
13090
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13091
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13092
 
BEGIN
13093
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13094
 
f_charbig = 'updated by trigger'
13095
 
      WHERE f_int1 = new.f_int1;
13096
 
END|
13097
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13098
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13099
 
        
13100
 
# check trigger-3 success:      1
13101
 
DROP TRIGGER trg_1;
13102
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13103
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13104
 
f_charbig = 'just inserted'
13105
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13106
 
DELETE FROM t0_aux
13107
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13108
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13109
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13110
 
'just inserted' FROM t0_template
13111
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13112
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13113
 
BEGIN
13114
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13115
 
f_charbig = 'updated by trigger'
13116
 
      WHERE f_int1 = - old.f_int1;
13117
 
END|
13118
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13119
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13120
 
        
13121
 
# check trigger-4 success:      1
13122
 
DROP TRIGGER trg_1;
13123
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13124
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13125
 
f_charbig = 'just inserted'
13126
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13127
 
DELETE FROM t0_aux
13128
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13129
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13130
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13131
 
'just inserted' FROM t0_template
13132
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13133
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13134
 
BEGIN
13135
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13136
 
f_charbig = 'updated by trigger'
13137
 
      WHERE f_int1 = new.f_int1;
13138
 
END|
13139
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13140
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13141
 
        
13142
 
# check trigger-5 success:      1
13143
 
DROP TRIGGER trg_1;
13144
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13145
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13146
 
f_charbig = 'just inserted'
13147
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13148
 
DELETE FROM t0_aux
13149
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13150
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13151
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13152
 
'just inserted' FROM t0_template
13153
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13154
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13155
 
BEGIN
13156
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13157
 
f_charbig = 'updated by trigger'
13158
 
      WHERE f_int1 = - old.f_int1;
13159
 
END|
13160
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13161
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13162
 
        
13163
 
# check trigger-6 success:      1
13164
 
DROP TRIGGER trg_1;
13165
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13166
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13167
 
f_charbig = 'just inserted'
13168
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13169
 
DELETE FROM t0_aux
13170
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13171
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13172
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13173
 
'just inserted' FROM t0_template
13174
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13175
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13176
 
BEGIN
13177
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13178
 
f_charbig = 'updated by trigger'
13179
 
      WHERE f_int1 = - old.f_int1;
13180
 
END|
13181
 
DELETE FROM t0_aux
13182
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13183
 
        
13184
 
# check trigger-7 success:      1
13185
 
DROP TRIGGER trg_1;
13186
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13187
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13188
 
f_charbig = 'just inserted'
13189
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13190
 
DELETE FROM t0_aux
13191
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13192
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13193
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13194
 
'just inserted' FROM t0_template
13195
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13196
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13197
 
BEGIN
13198
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13199
 
f_charbig = 'updated by trigger'
13200
 
      WHERE f_int1 = - old.f_int1;
13201
 
END|
13202
 
DELETE FROM t0_aux
13203
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13204
 
        
13205
 
# check trigger-8 success:      1
13206
 
DROP TRIGGER trg_1;
13207
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13208
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13209
 
f_charbig = 'just inserted'
13210
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13211
 
DELETE FROM t0_aux
13212
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13213
 
DELETE FROM t1
13214
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13215
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13216
 
BEGIN
13217
 
SET new.f_int1 = old.f_int1 + @max_row,
13218
 
new.f_int2 = old.f_int2 - @max_row,
13219
 
new.f_charbig = '####updated per update trigger####';
13220
 
END|
13221
 
UPDATE t1
13222
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13223
 
f_charbig = '####updated per update statement itself####';
13224
 
        
13225
 
# check trigger-9 success:      1
13226
 
DROP TRIGGER trg_2;
13227
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13228
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13229
 
f_charbig = CONCAT('===',f_char1,'===');
13230
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13231
 
BEGIN
13232
 
SET new.f_int1 = new.f_int1 + @max_row,
13233
 
new.f_int2 = new.f_int2 - @max_row,
13234
 
new.f_charbig = '####updated per update trigger####';
13235
 
END|
13236
 
UPDATE t1
13237
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13238
 
f_charbig = '####updated per update statement itself####';
13239
 
        
13240
 
# check trigger-10 success:     1
13241
 
DROP TRIGGER trg_2;
13242
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13243
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13244
 
f_charbig = CONCAT('===',f_char1,'===');
13245
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13246
 
BEGIN
13247
 
SET new.f_int1 = @my_max1 + @counter,
13248
 
new.f_int2 = @my_min2 - @counter,
13249
 
new.f_charbig = '####updated per insert trigger####';
13250
 
SET @counter = @counter + 1;
13251
 
END|
13252
 
SET @counter = 1;
13253
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13254
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13255
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13256
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13257
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13258
 
ORDER BY f_int1;
13259
 
DROP TRIGGER trg_3;
13260
 
        
13261
 
# check trigger-11 success:     1
13262
 
DELETE FROM t1
13263
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13264
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13265
 
AND f_charbig = '####updated per insert trigger####';
13266
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13267
 
BEGIN
13268
 
SET new.f_int1 = @my_max1 + @counter,
13269
 
new.f_int2 = @my_min2 - @counter,
13270
 
new.f_charbig = '####updated per insert trigger####';
13271
 
SET @counter = @counter + 1;
13272
 
END|
13273
 
SET @counter = 1;
13274
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13275
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
13276
 
SELECT CAST(f_int1 AS CHAR),
13277
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13278
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13279
 
ORDER BY f_int1;
13280
 
DROP TRIGGER trg_3;
13281
 
        
13282
 
# check trigger-12 success:     1
13283
 
DELETE FROM t1
13284
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13285
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13286
 
AND f_charbig = '####updated per insert trigger####';
13287
 
ANALYZE  TABLE t1;
13288
 
Table   Op      Msg_type        Msg_text
13289
 
test.t1 analyze status  OK
13290
 
CHECK    TABLE t1 EXTENDED;
13291
 
Table   Op      Msg_type        Msg_text
13292
 
test.t1 check   status  OK
13293
 
CHECKSUM TABLE t1 EXTENDED;
13294
 
Table   Checksum
13295
 
test.t1 <some_value>
13296
 
OPTIMIZE TABLE t1;
13297
 
Table   Op      Msg_type        Msg_text
13298
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
13299
 
test.t1 optimize        status  OK
13300
 
# check layout success:    1
13301
 
REPAIR   TABLE t1 EXTENDED;
13302
 
Table   Op      Msg_type        Msg_text
13303
 
test.t1 repair  note    The storage engine for the table doesn't support repair
13304
 
# check layout success:    1
13305
 
TRUNCATE t1;
13306
 
        
13307
 
# check TRUNCATE success:       1
13308
 
# check layout success:    1
13309
 
# End usability test (inc/partition_check.inc)
13310
 
DROP TABLE t1;
13311
 
CREATE TABLE t1 (
13312
 
f_int1 INTEGER,
13313
 
f_int2 INTEGER,
13314
 
f_char1 CHAR(20),
13315
 
f_char2 CHAR(20),
13316
 
f_charbig VARCHAR(1000)
13317
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
13318
 
)
13319
 
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
13320
 
(PARTITION parta VALUES LESS THAN (0),
13321
 
PARTITION partb VALUES LESS THAN (5),
13322
 
PARTITION partc VALUES LESS THAN (10),
13323
 
PARTITION partd VALUES LESS THAN (2147483646));
13324
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13325
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
13326
 
# Start usability test (inc/partition_check.inc)
13327
 
create_command
13328
 
SHOW CREATE TABLE t1;
13329
 
Table   Create Table
13330
 
t1      CREATE TABLE `t1` (
13331
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
13332
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
13333
 
  `f_char1` char(20) DEFAULT NULL,
13334
 
  `f_char2` char(20) DEFAULT NULL,
13335
 
  `f_charbig` varchar(1000) DEFAULT NULL,
13336
 
  PRIMARY KEY (`f_int1`,`f_int2`),
13337
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
13338
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
13339
 
 
13340
 
unified filelist
13341
 
t1.frm
13342
 
t1.par
13343
 
 
13344
 
# check prerequisites-1 success:    1
13345
 
# check COUNT(*) success:    1
13346
 
# check MIN/MAX(f_int1) success:    1
13347
 
# check MIN/MAX(f_int2) success:    1
13348
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13349
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13350
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13351
 
WHERE f_int1 IN (2,3);
13352
 
ERROR 23000: Can't write; duplicate key in table 't1'
13353
 
# check prerequisites-3 success:    1
13354
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13355
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13356
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13357
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13358
 
WHERE f_int1 IN (2,3);
13359
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
13360
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13361
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13362
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13363
 
WHERE f_int1 IN (2,3);
13364
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
13365
 
# check read via f_int1 success: 1
13366
 
# check read via f_int2 success: 1
13367
 
        
13368
 
# check multiple-1 success:     1
13369
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13370
 
        
13371
 
# check multiple-2 success:     1
13372
 
INSERT INTO t1 SELECT * FROM t0_template
13373
 
WHERE MOD(f_int1,3) = 0;
13374
 
        
13375
 
# check multiple-3 success:     1
13376
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
13377
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13378
 
AND @max_row_div2 + @max_row_div4;
13379
 
        
13380
 
# check multiple-4 success:     1
13381
 
DELETE FROM t1
13382
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13383
 
AND @max_row_div2 + @max_row_div4 + @max_row;
13384
 
        
13385
 
# check multiple-5 success:     1
13386
 
SELECT COUNT(*) INTO @try_count FROM t0_template
13387
 
WHERE MOD(f_int1,3) = 0
13388
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13389
 
SELECT COUNT(*) INTO @clash_count
13390
 
FROM t1 INNER JOIN t0_template USING(f_int1)
13391
 
WHERE MOD(f_int1,3) = 0
13392
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13393
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13394
 
INSERT INTO t1
13395
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
13396
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13397
 
f_charbig = '#SINGLE#';
13398
 
        
13399
 
# check single-1 success:       1
13400
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13401
 
INSERT INTO t1
13402
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
13403
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13404
 
f_charbig = '#SINGLE#';
13405
 
        
13406
 
# check single-2 success:       1
13407
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13408
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13409
 
UPDATE t1 SET f_int1 = @cur_value2
13410
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13411
 
        
13412
 
# check single-3 success:       1
13413
 
SET @cur_value1= -1;
13414
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13415
 
UPDATE t1 SET f_int1 = @cur_value1
13416
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13417
 
        
13418
 
# check single-4 success:       1
13419
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
13420
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13421
 
        
13422
 
# check single-5 success:       1
13423
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13424
 
        
13425
 
# check single-6 success:       1
13426
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13427
 
        
13428
 
# check single-7 success:       1
13429
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
13430
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13431
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13432
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13433
 
f_charbig = '#NULL#';
13434
 
INSERT INTO t1
13435
 
SET f_int1 = NULL , f_int2 = -@max_row,
13436
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13437
 
f_charbig = '#NULL#';
13438
 
ERROR 23000: Column 'f_int1' cannot be null
13439
 
# check null success:    1
13440
 
DELETE FROM t1
13441
 
WHERE f_int1 = 0 AND f_int2 = 0
13442
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13443
 
AND f_charbig = '#NULL#';
13444
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13445
 
SELECT f_int1, f_int1, '', '', 'was inserted'
13446
 
   FROM t0_template source_tab
13447
 
WHERE MOD(f_int1,3) = 0
13448
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
13449
 
ON DUPLICATE KEY
13450
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13451
 
f_int2 = 2 * @max_row + source_tab.f_int1,
13452
 
f_charbig = 'was updated';
13453
 
        
13454
 
# check unique-1-a success:     1
13455
 
        
13456
 
# check unique-1-b success:     1
13457
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
13458
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13459
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13460
 
f_charbig = CONCAT('===',f_char1,'===')
13461
 
WHERE f_charbig = 'was updated';
13462
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13463
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13464
 
   FROM t0_template source_tab
13465
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13466
 
        
13467
 
# check replace success:        1
13468
 
DELETE FROM t1
13469
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13470
 
DELETE FROM t1
13471
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13472
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13473
 
UPDATE t1 SET f_int2 = f_int1,
13474
 
f_char1 = CAST(f_int1 AS CHAR),
13475
 
f_char2 = CAST(f_int1 AS CHAR),
13476
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13477
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13478
 
SET AUTOCOMMIT= 0;
13479
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13480
 
SELECT f_int1, f_int1, '', '', 'was inserted'
13481
 
FROM t0_template source_tab
13482
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13483
 
        
13484
 
# check transactions-1 success:         1
13485
 
COMMIT WORK;
13486
 
        
13487
 
# check transactions-2 success:         1
13488
 
ROLLBACK WORK;
13489
 
        
13490
 
# check transactions-3 success:         1
13491
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
13492
 
COMMIT WORK;
13493
 
ROLLBACK WORK;
13494
 
        
13495
 
# check transactions-4 success:         1
13496
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13497
 
SELECT f_int1, f_int1, '', '', 'was inserted'
13498
 
FROM t0_template source_tab
13499
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13500
 
        
13501
 
# check transactions-5 success:         1
13502
 
ROLLBACK WORK;
13503
 
        
13504
 
# check transactions-6 success:         1
13505
 
# INFO: Storage engine used for t1 seems to be transactional.
13506
 
COMMIT;
13507
 
        
13508
 
# check transactions-7 success:         1
13509
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
13510
 
COMMIT WORK;
13511
 
SET @@session.sql_mode = 'traditional';
13512
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13513
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13514
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13515
 
'', '', 'was inserted' FROM t0_template
13516
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13517
 
ERROR 22012: Division by 0
13518
 
COMMIT;
13519
 
        
13520
 
# check transactions-8 success:         1
13521
 
# INFO: Storage engine used for t1 seems to be able to revert
13522
 
#       changes made by the failing statement.
13523
 
SET @@session.sql_mode = '';
13524
 
SET AUTOCOMMIT= 1;
13525
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
13526
 
COMMIT WORK;
13527
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13528
 
        
13529
 
# check special-1 success:      1
13530
 
UPDATE t1 SET f_charbig = '';
13531
 
        
13532
 
# check special-2 success:      1
13533
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13534
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13535
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13536
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13537
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13538
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13539
 
'just inserted' FROM t0_template
13540
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13541
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13542
 
BEGIN
13543
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13544
 
f_charbig = 'updated by trigger'
13545
 
      WHERE f_int1 = new.f_int1;
13546
 
END|
13547
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13548
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13549
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13550
 
        
13551
 
# check trigger-1 success:      1
13552
 
DROP TRIGGER trg_1;
13553
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13554
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13555
 
f_charbig = 'just inserted'
13556
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13557
 
DELETE FROM t0_aux
13558
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13559
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13560
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13561
 
'just inserted' FROM t0_template
13562
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13563
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13564
 
BEGIN
13565
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13566
 
f_charbig = 'updated by trigger'
13567
 
      WHERE f_int1 = new.f_int1;
13568
 
END|
13569
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13570
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13571
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13572
 
        
13573
 
# check trigger-2 success:      1
13574
 
DROP TRIGGER trg_1;
13575
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13576
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13577
 
f_charbig = 'just inserted'
13578
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13579
 
DELETE FROM t0_aux
13580
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13581
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13582
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13583
 
'just inserted' FROM t0_template
13584
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13585
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13586
 
BEGIN
13587
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13588
 
f_charbig = 'updated by trigger'
13589
 
      WHERE f_int1 = new.f_int1;
13590
 
END|
13591
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13592
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13593
 
        
13594
 
# check trigger-3 success:      1
13595
 
DROP TRIGGER trg_1;
13596
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13597
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13598
 
f_charbig = 'just inserted'
13599
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13600
 
DELETE FROM t0_aux
13601
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13602
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13603
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13604
 
'just inserted' FROM t0_template
13605
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13606
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13607
 
BEGIN
13608
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13609
 
f_charbig = 'updated by trigger'
13610
 
      WHERE f_int1 = - old.f_int1;
13611
 
END|
13612
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13613
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13614
 
        
13615
 
# check trigger-4 success:      1
13616
 
DROP TRIGGER trg_1;
13617
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13618
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13619
 
f_charbig = 'just inserted'
13620
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13621
 
DELETE FROM t0_aux
13622
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13623
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13624
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13625
 
'just inserted' FROM t0_template
13626
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13627
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13628
 
BEGIN
13629
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13630
 
f_charbig = 'updated by trigger'
13631
 
      WHERE f_int1 = new.f_int1;
13632
 
END|
13633
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13634
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13635
 
        
13636
 
# check trigger-5 success:      1
13637
 
DROP TRIGGER trg_1;
13638
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13639
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13640
 
f_charbig = 'just inserted'
13641
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13642
 
DELETE FROM t0_aux
13643
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13644
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13645
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13646
 
'just inserted' FROM t0_template
13647
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13648
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13649
 
BEGIN
13650
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13651
 
f_charbig = 'updated by trigger'
13652
 
      WHERE f_int1 = - old.f_int1;
13653
 
END|
13654
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13655
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13656
 
        
13657
 
# check trigger-6 success:      1
13658
 
DROP TRIGGER trg_1;
13659
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13660
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13661
 
f_charbig = 'just inserted'
13662
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13663
 
DELETE FROM t0_aux
13664
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13665
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13666
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13667
 
'just inserted' FROM t0_template
13668
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13669
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13670
 
BEGIN
13671
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13672
 
f_charbig = 'updated by trigger'
13673
 
      WHERE f_int1 = - old.f_int1;
13674
 
END|
13675
 
DELETE FROM t0_aux
13676
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13677
 
        
13678
 
# check trigger-7 success:      1
13679
 
DROP TRIGGER trg_1;
13680
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13681
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13682
 
f_charbig = 'just inserted'
13683
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13684
 
DELETE FROM t0_aux
13685
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13686
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13687
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13688
 
'just inserted' FROM t0_template
13689
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13690
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13691
 
BEGIN
13692
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13693
 
f_charbig = 'updated by trigger'
13694
 
      WHERE f_int1 = - old.f_int1;
13695
 
END|
13696
 
DELETE FROM t0_aux
13697
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13698
 
        
13699
 
# check trigger-8 success:      1
13700
 
DROP TRIGGER trg_1;
13701
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13702
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13703
 
f_charbig = 'just inserted'
13704
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13705
 
DELETE FROM t0_aux
13706
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13707
 
DELETE FROM t1
13708
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13709
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13710
 
BEGIN
13711
 
SET new.f_int1 = old.f_int1 + @max_row,
13712
 
new.f_int2 = old.f_int2 - @max_row,
13713
 
new.f_charbig = '####updated per update trigger####';
13714
 
END|
13715
 
UPDATE t1
13716
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13717
 
f_charbig = '####updated per update statement itself####';
13718
 
        
13719
 
# check trigger-9 success:      1
13720
 
DROP TRIGGER trg_2;
13721
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13722
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13723
 
f_charbig = CONCAT('===',f_char1,'===');
13724
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13725
 
BEGIN
13726
 
SET new.f_int1 = new.f_int1 + @max_row,
13727
 
new.f_int2 = new.f_int2 - @max_row,
13728
 
new.f_charbig = '####updated per update trigger####';
13729
 
END|
13730
 
UPDATE t1
13731
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13732
 
f_charbig = '####updated per update statement itself####';
13733
 
        
13734
 
# check trigger-10 success:     1
13735
 
DROP TRIGGER trg_2;
13736
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13737
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13738
 
f_charbig = CONCAT('===',f_char1,'===');
13739
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13740
 
BEGIN
13741
 
SET new.f_int1 = @my_max1 + @counter,
13742
 
new.f_int2 = @my_min2 - @counter,
13743
 
new.f_charbig = '####updated per insert trigger####';
13744
 
SET @counter = @counter + 1;
13745
 
END|
13746
 
SET @counter = 1;
13747
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13748
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13749
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13750
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13751
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13752
 
ORDER BY f_int1;
13753
 
DROP TRIGGER trg_3;
13754
 
        
13755
 
# check trigger-11 success:     1
13756
 
DELETE FROM t1
13757
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13758
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13759
 
AND f_charbig = '####updated per insert trigger####';
13760
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13761
 
BEGIN
13762
 
SET new.f_int1 = @my_max1 + @counter,
13763
 
new.f_int2 = @my_min2 - @counter,
13764
 
new.f_charbig = '####updated per insert trigger####';
13765
 
SET @counter = @counter + 1;
13766
 
END|
13767
 
SET @counter = 1;
13768
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13769
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
13770
 
SELECT CAST(f_int1 AS CHAR),
13771
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13772
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13773
 
ORDER BY f_int1;
13774
 
DROP TRIGGER trg_3;
13775
 
        
13776
 
# check trigger-12 success:     1
13777
 
DELETE FROM t1
13778
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13779
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13780
 
AND f_charbig = '####updated per insert trigger####';
13781
 
ANALYZE  TABLE t1;
13782
 
Table   Op      Msg_type        Msg_text
13783
 
test.t1 analyze status  OK
13784
 
CHECK    TABLE t1 EXTENDED;
13785
 
Table   Op      Msg_type        Msg_text
13786
 
test.t1 check   status  OK
13787
 
CHECKSUM TABLE t1 EXTENDED;
13788
 
Table   Checksum
13789
 
test.t1 <some_value>
13790
 
OPTIMIZE TABLE t1;
13791
 
Table   Op      Msg_type        Msg_text
13792
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
13793
 
test.t1 optimize        status  OK
13794
 
# check layout success:    1
13795
 
REPAIR   TABLE t1 EXTENDED;
13796
 
Table   Op      Msg_type        Msg_text
13797
 
test.t1 repair  note    The storage engine for the table doesn't support repair
13798
 
# check layout success:    1
13799
 
TRUNCATE t1;
13800
 
        
13801
 
# check TRUNCATE success:       1
13802
 
# check layout success:    1
13803
 
# End usability test (inc/partition_check.inc)
13804
 
DROP TABLE t1;
13805
 
CREATE TABLE t1 (
13806
 
f_int1 INTEGER,
13807
 
f_int2 INTEGER,
13808
 
f_char1 CHAR(20),
13809
 
f_char2 CHAR(20),
13810
 
f_charbig VARCHAR(1000)
13811
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
13812
 
)
13813
 
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
13814
 
(PARTITION part1 VALUES LESS THAN (0)
13815
 
(SUBPARTITION subpart11, SUBPARTITION subpart12),
13816
 
PARTITION part2 VALUES LESS THAN (5)
13817
 
(SUBPARTITION subpart21, SUBPARTITION subpart22),
13818
 
PARTITION part3 VALUES LESS THAN (10)
13819
 
(SUBPARTITION subpart31, SUBPARTITION subpart32),
13820
 
PARTITION part4 VALUES LESS THAN (2147483646)
13821
 
(SUBPARTITION subpart41, SUBPARTITION subpart42));
13822
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13823
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
13824
 
# Start usability test (inc/partition_check.inc)
13825
 
create_command
13826
 
SHOW CREATE TABLE t1;
13827
 
Table   Create Table
13828
 
t1      CREATE TABLE `t1` (
13829
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
13830
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
13831
 
  `f_char1` char(20) DEFAULT NULL,
13832
 
  `f_char2` char(20) DEFAULT NULL,
13833
 
  `f_charbig` varchar(1000) DEFAULT NULL,
13834
 
  PRIMARY KEY (`f_int1`,`f_int2`),
13835
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
13836
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
13837
 
 
13838
 
unified filelist
13839
 
t1.frm
13840
 
t1.par
13841
 
 
13842
 
# check prerequisites-1 success:    1
13843
 
# check COUNT(*) success:    1
13844
 
# check MIN/MAX(f_int1) success:    1
13845
 
# check MIN/MAX(f_int2) success:    1
13846
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13847
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13848
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13849
 
WHERE f_int1 IN (2,3);
13850
 
ERROR 23000: Can't write; duplicate key in table 't1'
13851
 
# check prerequisites-3 success:    1
13852
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13853
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13854
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13855
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13856
 
WHERE f_int1 IN (2,3);
13857
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
13858
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13859
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13860
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13861
 
WHERE f_int1 IN (2,3);
13862
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
13863
 
# check read via f_int1 success: 1
13864
 
# check read via f_int2 success: 1
13865
 
        
13866
 
# check multiple-1 success:     1
13867
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13868
 
        
13869
 
# check multiple-2 success:     1
13870
 
INSERT INTO t1 SELECT * FROM t0_template
13871
 
WHERE MOD(f_int1,3) = 0;
13872
 
        
13873
 
# check multiple-3 success:     1
13874
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
13875
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13876
 
AND @max_row_div2 + @max_row_div4;
13877
 
        
13878
 
# check multiple-4 success:     1
13879
 
DELETE FROM t1
13880
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13881
 
AND @max_row_div2 + @max_row_div4 + @max_row;
13882
 
        
13883
 
# check multiple-5 success:     1
13884
 
SELECT COUNT(*) INTO @try_count FROM t0_template
13885
 
WHERE MOD(f_int1,3) = 0
13886
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13887
 
SELECT COUNT(*) INTO @clash_count
13888
 
FROM t1 INNER JOIN t0_template USING(f_int1)
13889
 
WHERE MOD(f_int1,3) = 0
13890
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13891
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13892
 
INSERT INTO t1
13893
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
13894
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13895
 
f_charbig = '#SINGLE#';
13896
 
        
13897
 
# check single-1 success:       1
13898
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13899
 
INSERT INTO t1
13900
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
13901
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13902
 
f_charbig = '#SINGLE#';
13903
 
        
13904
 
# check single-2 success:       1
13905
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13906
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13907
 
UPDATE t1 SET f_int1 = @cur_value2
13908
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13909
 
        
13910
 
# check single-3 success:       1
13911
 
SET @cur_value1= -1;
13912
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13913
 
UPDATE t1 SET f_int1 = @cur_value1
13914
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13915
 
        
13916
 
# check single-4 success:       1
13917
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
13918
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13919
 
        
13920
 
# check single-5 success:       1
13921
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13922
 
        
13923
 
# check single-6 success:       1
13924
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13925
 
ERROR HY000: Table has no partition for value 2147483647
13926
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13927
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13928
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13929
 
f_charbig = '#NULL#';
13930
 
INSERT INTO t1
13931
 
SET f_int1 = NULL , f_int2 = -@max_row,
13932
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13933
 
f_charbig = '#NULL#';
13934
 
ERROR 23000: Column 'f_int1' cannot be null
13935
 
# check null success:    1
13936
 
DELETE FROM t1
13937
 
WHERE f_int1 = 0 AND f_int2 = 0
13938
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13939
 
AND f_charbig = '#NULL#';
13940
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13941
 
SELECT f_int1, f_int1, '', '', 'was inserted'
13942
 
   FROM t0_template source_tab
13943
 
WHERE MOD(f_int1,3) = 0
13944
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
13945
 
ON DUPLICATE KEY
13946
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13947
 
f_int2 = 2 * @max_row + source_tab.f_int1,
13948
 
f_charbig = 'was updated';
13949
 
        
13950
 
# check unique-1-a success:     1
13951
 
        
13952
 
# check unique-1-b success:     1
13953
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
13954
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13955
 
f_int2 = CAST(f_char1 AS SIGNED INT),
13956
 
f_charbig = CONCAT('===',f_char1,'===')
13957
 
WHERE f_charbig = 'was updated';
13958
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13959
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13960
 
   FROM t0_template source_tab
13961
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13962
 
        
13963
 
# check replace success:        1
13964
 
DELETE FROM t1
13965
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13966
 
DELETE FROM t1
13967
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13968
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13969
 
UPDATE t1 SET f_int2 = f_int1,
13970
 
f_char1 = CAST(f_int1 AS CHAR),
13971
 
f_char2 = CAST(f_int1 AS CHAR),
13972
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13973
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13974
 
SET AUTOCOMMIT= 0;
13975
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13976
 
SELECT f_int1, f_int1, '', '', 'was inserted'
13977
 
FROM t0_template source_tab
13978
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13979
 
        
13980
 
# check transactions-1 success:         1
13981
 
COMMIT WORK;
13982
 
        
13983
 
# check transactions-2 success:         1
13984
 
ROLLBACK WORK;
13985
 
        
13986
 
# check transactions-3 success:         1
13987
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
13988
 
COMMIT WORK;
13989
 
ROLLBACK WORK;
13990
 
        
13991
 
# check transactions-4 success:         1
13992
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13993
 
SELECT f_int1, f_int1, '', '', 'was inserted'
13994
 
FROM t0_template source_tab
13995
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13996
 
        
13997
 
# check transactions-5 success:         1
13998
 
ROLLBACK WORK;
13999
 
        
14000
 
# check transactions-6 success:         1
14001
 
# INFO: Storage engine used for t1 seems to be transactional.
14002
 
COMMIT;
14003
 
        
14004
 
# check transactions-7 success:         1
14005
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
14006
 
COMMIT WORK;
14007
 
SET @@session.sql_mode = 'traditional';
14008
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14009
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14010
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14011
 
'', '', 'was inserted' FROM t0_template
14012
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14013
 
ERROR 22012: Division by 0
14014
 
COMMIT;
14015
 
        
14016
 
# check transactions-8 success:         1
14017
 
# INFO: Storage engine used for t1 seems to be able to revert
14018
 
#       changes made by the failing statement.
14019
 
SET @@session.sql_mode = '';
14020
 
SET AUTOCOMMIT= 1;
14021
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
14022
 
COMMIT WORK;
14023
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14024
 
        
14025
 
# check special-1 success:      1
14026
 
UPDATE t1 SET f_charbig = '';
14027
 
        
14028
 
# check special-2 success:      1
14029
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14030
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14031
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14032
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14033
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14034
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14035
 
'just inserted' FROM t0_template
14036
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14037
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14038
 
BEGIN
14039
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14040
 
f_charbig = 'updated by trigger'
14041
 
      WHERE f_int1 = new.f_int1;
14042
 
END|
14043
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14044
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14045
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14046
 
        
14047
 
# check trigger-1 success:      1
14048
 
DROP TRIGGER trg_1;
14049
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14050
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14051
 
f_charbig = 'just inserted'
14052
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14053
 
DELETE FROM t0_aux
14054
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14055
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14056
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14057
 
'just inserted' FROM t0_template
14058
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14059
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14060
 
BEGIN
14061
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14062
 
f_charbig = 'updated by trigger'
14063
 
      WHERE f_int1 = new.f_int1;
14064
 
END|
14065
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14066
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14067
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14068
 
        
14069
 
# check trigger-2 success:      1
14070
 
DROP TRIGGER trg_1;
14071
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14072
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14073
 
f_charbig = 'just inserted'
14074
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14075
 
DELETE FROM t0_aux
14076
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14077
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14078
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14079
 
'just inserted' FROM t0_template
14080
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14081
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14082
 
BEGIN
14083
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14084
 
f_charbig = 'updated by trigger'
14085
 
      WHERE f_int1 = new.f_int1;
14086
 
END|
14087
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14088
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14089
 
        
14090
 
# check trigger-3 success:      1
14091
 
DROP TRIGGER trg_1;
14092
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14093
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14094
 
f_charbig = 'just inserted'
14095
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14096
 
DELETE FROM t0_aux
14097
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14098
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14099
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14100
 
'just inserted' FROM t0_template
14101
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14102
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14103
 
BEGIN
14104
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14105
 
f_charbig = 'updated by trigger'
14106
 
      WHERE f_int1 = - old.f_int1;
14107
 
END|
14108
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14109
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14110
 
        
14111
 
# check trigger-4 success:      1
14112
 
DROP TRIGGER trg_1;
14113
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14114
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14115
 
f_charbig = 'just inserted'
14116
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14117
 
DELETE FROM t0_aux
14118
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14119
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14120
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14121
 
'just inserted' FROM t0_template
14122
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14123
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14124
 
BEGIN
14125
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14126
 
f_charbig = 'updated by trigger'
14127
 
      WHERE f_int1 = new.f_int1;
14128
 
END|
14129
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14130
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14131
 
        
14132
 
# check trigger-5 success:      1
14133
 
DROP TRIGGER trg_1;
14134
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14135
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14136
 
f_charbig = 'just inserted'
14137
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14138
 
DELETE FROM t0_aux
14139
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14140
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14141
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14142
 
'just inserted' FROM t0_template
14143
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14144
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14145
 
BEGIN
14146
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14147
 
f_charbig = 'updated by trigger'
14148
 
      WHERE f_int1 = - old.f_int1;
14149
 
END|
14150
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14151
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14152
 
        
14153
 
# check trigger-6 success:      1
14154
 
DROP TRIGGER trg_1;
14155
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14156
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14157
 
f_charbig = 'just inserted'
14158
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14159
 
DELETE FROM t0_aux
14160
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14161
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14162
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14163
 
'just inserted' FROM t0_template
14164
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14165
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14166
 
BEGIN
14167
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14168
 
f_charbig = 'updated by trigger'
14169
 
      WHERE f_int1 = - old.f_int1;
14170
 
END|
14171
 
DELETE FROM t0_aux
14172
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14173
 
        
14174
 
# check trigger-7 success:      1
14175
 
DROP TRIGGER trg_1;
14176
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14177
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14178
 
f_charbig = 'just inserted'
14179
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14180
 
DELETE FROM t0_aux
14181
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14182
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14183
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14184
 
'just inserted' FROM t0_template
14185
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14186
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14187
 
BEGIN
14188
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14189
 
f_charbig = 'updated by trigger'
14190
 
      WHERE f_int1 = - old.f_int1;
14191
 
END|
14192
 
DELETE FROM t0_aux
14193
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14194
 
        
14195
 
# check trigger-8 success:      1
14196
 
DROP TRIGGER trg_1;
14197
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14198
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14199
 
f_charbig = 'just inserted'
14200
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14201
 
DELETE FROM t0_aux
14202
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14203
 
DELETE FROM t1
14204
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14205
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14206
 
BEGIN
14207
 
SET new.f_int1 = old.f_int1 + @max_row,
14208
 
new.f_int2 = old.f_int2 - @max_row,
14209
 
new.f_charbig = '####updated per update trigger####';
14210
 
END|
14211
 
UPDATE t1
14212
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14213
 
f_charbig = '####updated per update statement itself####';
14214
 
        
14215
 
# check trigger-9 success:      1
14216
 
DROP TRIGGER trg_2;
14217
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14218
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14219
 
f_charbig = CONCAT('===',f_char1,'===');
14220
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14221
 
BEGIN
14222
 
SET new.f_int1 = new.f_int1 + @max_row,
14223
 
new.f_int2 = new.f_int2 - @max_row,
14224
 
new.f_charbig = '####updated per update trigger####';
14225
 
END|
14226
 
UPDATE t1
14227
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14228
 
f_charbig = '####updated per update statement itself####';
14229
 
        
14230
 
# check trigger-10 success:     1
14231
 
DROP TRIGGER trg_2;
14232
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14233
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14234
 
f_charbig = CONCAT('===',f_char1,'===');
14235
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14236
 
BEGIN
14237
 
SET new.f_int1 = @my_max1 + @counter,
14238
 
new.f_int2 = @my_min2 - @counter,
14239
 
new.f_charbig = '####updated per insert trigger####';
14240
 
SET @counter = @counter + 1;
14241
 
END|
14242
 
SET @counter = 1;
14243
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14244
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14245
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14246
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14247
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14248
 
ORDER BY f_int1;
14249
 
DROP TRIGGER trg_3;
14250
 
        
14251
 
# check trigger-11 success:     1
14252
 
DELETE FROM t1
14253
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14254
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14255
 
AND f_charbig = '####updated per insert trigger####';
14256
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14257
 
BEGIN
14258
 
SET new.f_int1 = @my_max1 + @counter,
14259
 
new.f_int2 = @my_min2 - @counter,
14260
 
new.f_charbig = '####updated per insert trigger####';
14261
 
SET @counter = @counter + 1;
14262
 
END|
14263
 
SET @counter = 1;
14264
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14265
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
14266
 
SELECT CAST(f_int1 AS CHAR),
14267
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14268
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14269
 
ORDER BY f_int1;
14270
 
DROP TRIGGER trg_3;
14271
 
        
14272
 
# check trigger-12 success:     1
14273
 
DELETE FROM t1
14274
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14275
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14276
 
AND f_charbig = '####updated per insert trigger####';
14277
 
ANALYZE  TABLE t1;
14278
 
Table   Op      Msg_type        Msg_text
14279
 
test.t1 analyze status  OK
14280
 
CHECK    TABLE t1 EXTENDED;
14281
 
Table   Op      Msg_type        Msg_text
14282
 
test.t1 check   status  OK
14283
 
CHECKSUM TABLE t1 EXTENDED;
14284
 
Table   Checksum
14285
 
test.t1 <some_value>
14286
 
OPTIMIZE TABLE t1;
14287
 
Table   Op      Msg_type        Msg_text
14288
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
14289
 
test.t1 optimize        status  OK
14290
 
# check layout success:    1
14291
 
REPAIR   TABLE t1 EXTENDED;
14292
 
Table   Op      Msg_type        Msg_text
14293
 
test.t1 repair  note    The storage engine for the table doesn't support repair
14294
 
# check layout success:    1
14295
 
TRUNCATE t1;
14296
 
        
14297
 
# check TRUNCATE success:       1
14298
 
# check layout success:    1
14299
 
# End usability test (inc/partition_check.inc)
14300
 
DROP TABLE t1;
14301
 
CREATE TABLE t1 (
14302
 
f_int1 INTEGER,
14303
 
f_int2 INTEGER,
14304
 
f_char1 CHAR(20),
14305
 
f_char2 CHAR(20),
14306
 
f_charbig VARCHAR(1000)
14307
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
14308
 
)
14309
 
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
14310
 
(PARTITION part1 VALUES IN (0)
14311
 
(SUBPARTITION sp11,
14312
 
SUBPARTITION sp12),
14313
 
PARTITION part2 VALUES IN (1)
14314
 
(SUBPARTITION sp21,
14315
 
SUBPARTITION sp22),
14316
 
PARTITION part3 VALUES IN (2)
14317
 
(SUBPARTITION sp31, 
14318
 
SUBPARTITION sp32),
14319
 
PARTITION part4 VALUES IN (NULL)
14320
 
(SUBPARTITION sp41,
14321
 
SUBPARTITION sp42));
14322
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14323
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
14324
 
# Start usability test (inc/partition_check.inc)
14325
 
create_command
14326
 
SHOW CREATE TABLE t1;
14327
 
Table   Create Table
14328
 
t1      CREATE TABLE `t1` (
14329
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
14330
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
14331
 
  `f_char1` char(20) DEFAULT NULL,
14332
 
  `f_char2` char(20) DEFAULT NULL,
14333
 
  `f_charbig` varchar(1000) DEFAULT NULL,
14334
 
  PRIMARY KEY (`f_int1`,`f_int2`),
14335
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
14336
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
14337
 
 
14338
 
unified filelist
14339
 
t1.frm
14340
 
t1.par
14341
 
 
14342
 
# check prerequisites-1 success:    1
14343
 
# check COUNT(*) success:    1
14344
 
# check MIN/MAX(f_int1) success:    1
14345
 
# check MIN/MAX(f_int2) success:    1
14346
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14347
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14348
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14349
 
WHERE f_int1 IN (2,3);
14350
 
ERROR 23000: Can't write; duplicate key in table 't1'
14351
 
# check prerequisites-3 success:    1
14352
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14353
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14354
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14355
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14356
 
WHERE f_int1 IN (2,3);
14357
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
14358
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14359
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14360
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14361
 
WHERE f_int1 IN (2,3);
14362
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
14363
 
# check read via f_int1 success: 1
14364
 
# check read via f_int2 success: 1
14365
 
        
14366
 
# check multiple-1 success:     1
14367
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14368
 
        
14369
 
# check multiple-2 success:     1
14370
 
INSERT INTO t1 SELECT * FROM t0_template
14371
 
WHERE MOD(f_int1,3) = 0;
14372
 
        
14373
 
# check multiple-3 success:     1
14374
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
14375
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14376
 
AND @max_row_div2 + @max_row_div4;
14377
 
        
14378
 
# check multiple-4 success:     1
14379
 
DELETE FROM t1
14380
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14381
 
AND @max_row_div2 + @max_row_div4 + @max_row;
14382
 
        
14383
 
# check multiple-5 success:     1
14384
 
SELECT COUNT(*) INTO @try_count FROM t0_template
14385
 
WHERE MOD(f_int1,3) = 0
14386
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14387
 
SELECT COUNT(*) INTO @clash_count
14388
 
FROM t1 INNER JOIN t0_template USING(f_int1)
14389
 
WHERE MOD(f_int1,3) = 0
14390
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14391
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14392
 
INSERT INTO t1
14393
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
14394
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14395
 
f_charbig = '#SINGLE#';
14396
 
        
14397
 
# check single-1 success:       1
14398
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14399
 
INSERT INTO t1
14400
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
14401
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14402
 
f_charbig = '#SINGLE#';
14403
 
        
14404
 
# check single-2 success:       1
14405
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14406
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14407
 
UPDATE t1 SET f_int1 = @cur_value2
14408
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14409
 
        
14410
 
# check single-3 success:       1
14411
 
SET @cur_value1= -1;
14412
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14413
 
UPDATE t1 SET f_int1 = @cur_value1
14414
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14415
 
        
14416
 
# check single-4 success:       1
14417
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
14418
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14419
 
        
14420
 
# check single-5 success:       1
14421
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14422
 
        
14423
 
# check single-6 success:       1
14424
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14425
 
        
14426
 
# check single-7 success:       1
14427
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
14428
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14429
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14430
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14431
 
f_charbig = '#NULL#';
14432
 
INSERT INTO t1
14433
 
SET f_int1 = NULL , f_int2 = -@max_row,
14434
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14435
 
f_charbig = '#NULL#';
14436
 
ERROR 23000: Column 'f_int1' cannot be null
14437
 
# check null success:    1
14438
 
DELETE FROM t1
14439
 
WHERE f_int1 = 0 AND f_int2 = 0
14440
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14441
 
AND f_charbig = '#NULL#';
14442
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14443
 
SELECT f_int1, f_int1, '', '', 'was inserted'
14444
 
   FROM t0_template source_tab
14445
 
WHERE MOD(f_int1,3) = 0
14446
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
14447
 
ON DUPLICATE KEY
14448
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14449
 
f_int2 = 2 * @max_row + source_tab.f_int1,
14450
 
f_charbig = 'was updated';
14451
 
        
14452
 
# check unique-1-a success:     1
14453
 
        
14454
 
# check unique-1-b success:     1
14455
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
14456
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14457
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14458
 
f_charbig = CONCAT('===',f_char1,'===')
14459
 
WHERE f_charbig = 'was updated';
14460
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14461
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14462
 
   FROM t0_template source_tab
14463
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14464
 
        
14465
 
# check replace success:        1
14466
 
DELETE FROM t1
14467
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14468
 
DELETE FROM t1
14469
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14470
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14471
 
UPDATE t1 SET f_int2 = f_int1,
14472
 
f_char1 = CAST(f_int1 AS CHAR),
14473
 
f_char2 = CAST(f_int1 AS CHAR),
14474
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14475
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14476
 
SET AUTOCOMMIT= 0;
14477
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14478
 
SELECT f_int1, f_int1, '', '', 'was inserted'
14479
 
FROM t0_template source_tab
14480
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14481
 
        
14482
 
# check transactions-1 success:         1
14483
 
COMMIT WORK;
14484
 
        
14485
 
# check transactions-2 success:         1
14486
 
ROLLBACK WORK;
14487
 
        
14488
 
# check transactions-3 success:         1
14489
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
14490
 
COMMIT WORK;
14491
 
ROLLBACK WORK;
14492
 
        
14493
 
# check transactions-4 success:         1
14494
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14495
 
SELECT f_int1, f_int1, '', '', 'was inserted'
14496
 
FROM t0_template source_tab
14497
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14498
 
        
14499
 
# check transactions-5 success:         1
14500
 
ROLLBACK WORK;
14501
 
        
14502
 
# check transactions-6 success:         1
14503
 
# INFO: Storage engine used for t1 seems to be transactional.
14504
 
COMMIT;
14505
 
        
14506
 
# check transactions-7 success:         1
14507
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
14508
 
COMMIT WORK;
14509
 
SET @@session.sql_mode = 'traditional';
14510
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14511
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14512
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14513
 
'', '', 'was inserted' FROM t0_template
14514
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14515
 
ERROR 22012: Division by 0
14516
 
COMMIT;
14517
 
        
14518
 
# check transactions-8 success:         1
14519
 
# INFO: Storage engine used for t1 seems to be able to revert
14520
 
#       changes made by the failing statement.
14521
 
SET @@session.sql_mode = '';
14522
 
SET AUTOCOMMIT= 1;
14523
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
14524
 
COMMIT WORK;
14525
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14526
 
        
14527
 
# check special-1 success:      1
14528
 
UPDATE t1 SET f_charbig = '';
14529
 
        
14530
 
# check special-2 success:      1
14531
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14532
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14533
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14534
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14535
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14536
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14537
 
'just inserted' FROM t0_template
14538
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14539
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14540
 
BEGIN
14541
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14542
 
f_charbig = 'updated by trigger'
14543
 
      WHERE f_int1 = new.f_int1;
14544
 
END|
14545
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14546
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14547
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14548
 
        
14549
 
# check trigger-1 success:      1
14550
 
DROP TRIGGER trg_1;
14551
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14552
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14553
 
f_charbig = 'just inserted'
14554
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14555
 
DELETE FROM t0_aux
14556
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14557
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14558
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14559
 
'just inserted' FROM t0_template
14560
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14561
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14562
 
BEGIN
14563
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14564
 
f_charbig = 'updated by trigger'
14565
 
      WHERE f_int1 = new.f_int1;
14566
 
END|
14567
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14568
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14569
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14570
 
        
14571
 
# check trigger-2 success:      1
14572
 
DROP TRIGGER trg_1;
14573
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14574
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14575
 
f_charbig = 'just inserted'
14576
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14577
 
DELETE FROM t0_aux
14578
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14579
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14580
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14581
 
'just inserted' FROM t0_template
14582
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14583
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14584
 
BEGIN
14585
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14586
 
f_charbig = 'updated by trigger'
14587
 
      WHERE f_int1 = new.f_int1;
14588
 
END|
14589
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14590
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14591
 
        
14592
 
# check trigger-3 success:      1
14593
 
DROP TRIGGER trg_1;
14594
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14595
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14596
 
f_charbig = 'just inserted'
14597
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14598
 
DELETE FROM t0_aux
14599
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14600
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14601
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14602
 
'just inserted' FROM t0_template
14603
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14604
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14605
 
BEGIN
14606
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14607
 
f_charbig = 'updated by trigger'
14608
 
      WHERE f_int1 = - old.f_int1;
14609
 
END|
14610
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14611
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14612
 
        
14613
 
# check trigger-4 success:      1
14614
 
DROP TRIGGER trg_1;
14615
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14616
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14617
 
f_charbig = 'just inserted'
14618
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14619
 
DELETE FROM t0_aux
14620
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14621
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14622
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14623
 
'just inserted' FROM t0_template
14624
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14625
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14626
 
BEGIN
14627
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14628
 
f_charbig = 'updated by trigger'
14629
 
      WHERE f_int1 = new.f_int1;
14630
 
END|
14631
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14632
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14633
 
        
14634
 
# check trigger-5 success:      1
14635
 
DROP TRIGGER trg_1;
14636
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14637
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14638
 
f_charbig = 'just inserted'
14639
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14640
 
DELETE FROM t0_aux
14641
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14642
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14643
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14644
 
'just inserted' FROM t0_template
14645
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14646
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14647
 
BEGIN
14648
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14649
 
f_charbig = 'updated by trigger'
14650
 
      WHERE f_int1 = - old.f_int1;
14651
 
END|
14652
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14653
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14654
 
        
14655
 
# check trigger-6 success:      1
14656
 
DROP TRIGGER trg_1;
14657
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14658
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14659
 
f_charbig = 'just inserted'
14660
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14661
 
DELETE FROM t0_aux
14662
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14663
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14664
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14665
 
'just inserted' FROM t0_template
14666
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14667
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14668
 
BEGIN
14669
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14670
 
f_charbig = 'updated by trigger'
14671
 
      WHERE f_int1 = - old.f_int1;
14672
 
END|
14673
 
DELETE FROM t0_aux
14674
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14675
 
        
14676
 
# check trigger-7 success:      1
14677
 
DROP TRIGGER trg_1;
14678
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14679
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14680
 
f_charbig = 'just inserted'
14681
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14682
 
DELETE FROM t0_aux
14683
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14684
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14685
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14686
 
'just inserted' FROM t0_template
14687
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14688
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14689
 
BEGIN
14690
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14691
 
f_charbig = 'updated by trigger'
14692
 
      WHERE f_int1 = - old.f_int1;
14693
 
END|
14694
 
DELETE FROM t0_aux
14695
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14696
 
        
14697
 
# check trigger-8 success:      1
14698
 
DROP TRIGGER trg_1;
14699
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14700
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14701
 
f_charbig = 'just inserted'
14702
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14703
 
DELETE FROM t0_aux
14704
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14705
 
DELETE FROM t1
14706
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14707
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14708
 
BEGIN
14709
 
SET new.f_int1 = old.f_int1 + @max_row,
14710
 
new.f_int2 = old.f_int2 - @max_row,
14711
 
new.f_charbig = '####updated per update trigger####';
14712
 
END|
14713
 
UPDATE t1
14714
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14715
 
f_charbig = '####updated per update statement itself####';
14716
 
        
14717
 
# check trigger-9 success:      1
14718
 
DROP TRIGGER trg_2;
14719
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14720
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14721
 
f_charbig = CONCAT('===',f_char1,'===');
14722
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14723
 
BEGIN
14724
 
SET new.f_int1 = new.f_int1 + @max_row,
14725
 
new.f_int2 = new.f_int2 - @max_row,
14726
 
new.f_charbig = '####updated per update trigger####';
14727
 
END|
14728
 
UPDATE t1
14729
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14730
 
f_charbig = '####updated per update statement itself####';
14731
 
        
14732
 
# check trigger-10 success:     1
14733
 
DROP TRIGGER trg_2;
14734
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14735
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14736
 
f_charbig = CONCAT('===',f_char1,'===');
14737
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14738
 
BEGIN
14739
 
SET new.f_int1 = @my_max1 + @counter,
14740
 
new.f_int2 = @my_min2 - @counter,
14741
 
new.f_charbig = '####updated per insert trigger####';
14742
 
SET @counter = @counter + 1;
14743
 
END|
14744
 
SET @counter = 1;
14745
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14746
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14747
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14748
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14749
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14750
 
ORDER BY f_int1;
14751
 
DROP TRIGGER trg_3;
14752
 
        
14753
 
# check trigger-11 success:     1
14754
 
DELETE FROM t1
14755
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14756
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14757
 
AND f_charbig = '####updated per insert trigger####';
14758
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14759
 
BEGIN
14760
 
SET new.f_int1 = @my_max1 + @counter,
14761
 
new.f_int2 = @my_min2 - @counter,
14762
 
new.f_charbig = '####updated per insert trigger####';
14763
 
SET @counter = @counter + 1;
14764
 
END|
14765
 
SET @counter = 1;
14766
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14767
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
14768
 
SELECT CAST(f_int1 AS CHAR),
14769
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14770
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14771
 
ORDER BY f_int1;
14772
 
DROP TRIGGER trg_3;
14773
 
        
14774
 
# check trigger-12 success:     1
14775
 
DELETE FROM t1
14776
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14777
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14778
 
AND f_charbig = '####updated per insert trigger####';
14779
 
ANALYZE  TABLE t1;
14780
 
Table   Op      Msg_type        Msg_text
14781
 
test.t1 analyze status  OK
14782
 
CHECK    TABLE t1 EXTENDED;
14783
 
Table   Op      Msg_type        Msg_text
14784
 
test.t1 check   status  OK
14785
 
CHECKSUM TABLE t1 EXTENDED;
14786
 
Table   Checksum
14787
 
test.t1 <some_value>
14788
 
OPTIMIZE TABLE t1;
14789
 
Table   Op      Msg_type        Msg_text
14790
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
14791
 
test.t1 optimize        status  OK
14792
 
# check layout success:    1
14793
 
REPAIR   TABLE t1 EXTENDED;
14794
 
Table   Op      Msg_type        Msg_text
14795
 
test.t1 repair  note    The storage engine for the table doesn't support repair
14796
 
# check layout success:    1
14797
 
TRUNCATE t1;
14798
 
        
14799
 
# check TRUNCATE success:       1
14800
 
# check layout success:    1
14801
 
# End usability test (inc/partition_check.inc)
14802
 
DROP TABLE t1;
14803
 
CREATE TABLE t1 (
14804
 
f_int1 INTEGER,
14805
 
f_int2 INTEGER,
14806
 
f_char1 CHAR(20),
14807
 
f_char2 CHAR(20),
14808
 
f_charbig VARCHAR(1000)
14809
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
14810
 
)
14811
 
PARTITION BY LIST(ABS(MOD(f_int1,2)))
14812
 
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
14813
 
(PARTITION part1 VALUES IN (0),
14814
 
PARTITION part2 VALUES IN (1),
14815
 
PARTITION part3 VALUES IN (NULL));
14816
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14817
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
14818
 
# Start usability test (inc/partition_check.inc)
14819
 
create_command
14820
 
SHOW CREATE TABLE t1;
14821
 
Table   Create Table
14822
 
t1      CREATE TABLE `t1` (
14823
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
14824
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
14825
 
  `f_char1` char(20) DEFAULT NULL,
14826
 
  `f_char2` char(20) DEFAULT NULL,
14827
 
  `f_charbig` varchar(1000) DEFAULT NULL,
14828
 
  PRIMARY KEY (`f_int1`,`f_int2`),
14829
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
14830
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
14831
 
 
14832
 
unified filelist
14833
 
t1.frm
14834
 
t1.par
14835
 
 
14836
 
# check prerequisites-1 success:    1
14837
 
# check COUNT(*) success:    1
14838
 
# check MIN/MAX(f_int1) success:    1
14839
 
# check MIN/MAX(f_int2) success:    1
14840
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14841
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14842
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14843
 
WHERE f_int1 IN (2,3);
14844
 
ERROR 23000: Can't write; duplicate key in table 't1'
14845
 
# check prerequisites-3 success:    1
14846
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14847
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14848
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14849
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14850
 
WHERE f_int1 IN (2,3);
14851
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
14852
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14853
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14854
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14855
 
WHERE f_int1 IN (2,3);
14856
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
14857
 
# check read via f_int1 success: 1
14858
 
# check read via f_int2 success: 1
14859
 
        
14860
 
# check multiple-1 success:     1
14861
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14862
 
        
14863
 
# check multiple-2 success:     1
14864
 
INSERT INTO t1 SELECT * FROM t0_template
14865
 
WHERE MOD(f_int1,3) = 0;
14866
 
        
14867
 
# check multiple-3 success:     1
14868
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
14869
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14870
 
AND @max_row_div2 + @max_row_div4;
14871
 
        
14872
 
# check multiple-4 success:     1
14873
 
DELETE FROM t1
14874
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14875
 
AND @max_row_div2 + @max_row_div4 + @max_row;
14876
 
        
14877
 
# check multiple-5 success:     1
14878
 
SELECT COUNT(*) INTO @try_count FROM t0_template
14879
 
WHERE MOD(f_int1,3) = 0
14880
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14881
 
SELECT COUNT(*) INTO @clash_count
14882
 
FROM t1 INNER JOIN t0_template USING(f_int1)
14883
 
WHERE MOD(f_int1,3) = 0
14884
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14885
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14886
 
INSERT INTO t1
14887
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
14888
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14889
 
f_charbig = '#SINGLE#';
14890
 
        
14891
 
# check single-1 success:       1
14892
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14893
 
INSERT INTO t1
14894
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
14895
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14896
 
f_charbig = '#SINGLE#';
14897
 
        
14898
 
# check single-2 success:       1
14899
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14900
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14901
 
UPDATE t1 SET f_int1 = @cur_value2
14902
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14903
 
        
14904
 
# check single-3 success:       1
14905
 
SET @cur_value1= -1;
14906
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14907
 
UPDATE t1 SET f_int1 = @cur_value1
14908
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14909
 
        
14910
 
# check single-4 success:       1
14911
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
14912
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14913
 
        
14914
 
# check single-5 success:       1
14915
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14916
 
        
14917
 
# check single-6 success:       1
14918
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14919
 
        
14920
 
# check single-7 success:       1
14921
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
14922
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14923
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14924
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14925
 
f_charbig = '#NULL#';
14926
 
INSERT INTO t1
14927
 
SET f_int1 = NULL , f_int2 = -@max_row,
14928
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14929
 
f_charbig = '#NULL#';
14930
 
ERROR 23000: Column 'f_int1' cannot be null
14931
 
# check null success:    1
14932
 
DELETE FROM t1
14933
 
WHERE f_int1 = 0 AND f_int2 = 0
14934
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14935
 
AND f_charbig = '#NULL#';
14936
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14937
 
SELECT f_int1, f_int1, '', '', 'was inserted'
14938
 
   FROM t0_template source_tab
14939
 
WHERE MOD(f_int1,3) = 0
14940
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
14941
 
ON DUPLICATE KEY
14942
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14943
 
f_int2 = 2 * @max_row + source_tab.f_int1,
14944
 
f_charbig = 'was updated';
14945
 
        
14946
 
# check unique-1-a success:     1
14947
 
        
14948
 
# check unique-1-b success:     1
14949
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
14950
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14951
 
f_int2 = CAST(f_char1 AS SIGNED INT),
14952
 
f_charbig = CONCAT('===',f_char1,'===')
14953
 
WHERE f_charbig = 'was updated';
14954
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14955
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14956
 
   FROM t0_template source_tab
14957
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14958
 
        
14959
 
# check replace success:        1
14960
 
DELETE FROM t1
14961
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14962
 
DELETE FROM t1
14963
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14964
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14965
 
UPDATE t1 SET f_int2 = f_int1,
14966
 
f_char1 = CAST(f_int1 AS CHAR),
14967
 
f_char2 = CAST(f_int1 AS CHAR),
14968
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14969
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14970
 
SET AUTOCOMMIT= 0;
14971
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14972
 
SELECT f_int1, f_int1, '', '', 'was inserted'
14973
 
FROM t0_template source_tab
14974
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14975
 
        
14976
 
# check transactions-1 success:         1
14977
 
COMMIT WORK;
14978
 
        
14979
 
# check transactions-2 success:         1
14980
 
ROLLBACK WORK;
14981
 
        
14982
 
# check transactions-3 success:         1
14983
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
14984
 
COMMIT WORK;
14985
 
ROLLBACK WORK;
14986
 
        
14987
 
# check transactions-4 success:         1
14988
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14989
 
SELECT f_int1, f_int1, '', '', 'was inserted'
14990
 
FROM t0_template source_tab
14991
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14992
 
        
14993
 
# check transactions-5 success:         1
14994
 
ROLLBACK WORK;
14995
 
        
14996
 
# check transactions-6 success:         1
14997
 
# INFO: Storage engine used for t1 seems to be transactional.
14998
 
COMMIT;
14999
 
        
15000
 
# check transactions-7 success:         1
15001
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
15002
 
COMMIT WORK;
15003
 
SET @@session.sql_mode = 'traditional';
15004
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15005
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15006
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15007
 
'', '', 'was inserted' FROM t0_template
15008
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15009
 
ERROR 22012: Division by 0
15010
 
COMMIT;
15011
 
        
15012
 
# check transactions-8 success:         1
15013
 
# INFO: Storage engine used for t1 seems to be able to revert
15014
 
#       changes made by the failing statement.
15015
 
SET @@session.sql_mode = '';
15016
 
SET AUTOCOMMIT= 1;
15017
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
15018
 
COMMIT WORK;
15019
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15020
 
        
15021
 
# check special-1 success:      1
15022
 
UPDATE t1 SET f_charbig = '';
15023
 
        
15024
 
# check special-2 success:      1
15025
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15026
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15027
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15028
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15029
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15030
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15031
 
'just inserted' FROM t0_template
15032
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15033
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15034
 
BEGIN
15035
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15036
 
f_charbig = 'updated by trigger'
15037
 
      WHERE f_int1 = new.f_int1;
15038
 
END|
15039
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15040
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15041
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15042
 
        
15043
 
# check trigger-1 success:      1
15044
 
DROP TRIGGER trg_1;
15045
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15046
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15047
 
f_charbig = 'just inserted'
15048
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15049
 
DELETE FROM t0_aux
15050
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15051
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15052
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15053
 
'just inserted' FROM t0_template
15054
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15055
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15056
 
BEGIN
15057
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15058
 
f_charbig = 'updated by trigger'
15059
 
      WHERE f_int1 = new.f_int1;
15060
 
END|
15061
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15062
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15063
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15064
 
        
15065
 
# check trigger-2 success:      1
15066
 
DROP TRIGGER trg_1;
15067
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15068
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15069
 
f_charbig = 'just inserted'
15070
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15071
 
DELETE FROM t0_aux
15072
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15073
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15074
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15075
 
'just inserted' FROM t0_template
15076
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15077
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15078
 
BEGIN
15079
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15080
 
f_charbig = 'updated by trigger'
15081
 
      WHERE f_int1 = new.f_int1;
15082
 
END|
15083
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15084
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15085
 
        
15086
 
# check trigger-3 success:      1
15087
 
DROP TRIGGER trg_1;
15088
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15089
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15090
 
f_charbig = 'just inserted'
15091
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15092
 
DELETE FROM t0_aux
15093
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15094
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15095
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15096
 
'just inserted' FROM t0_template
15097
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15098
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15099
 
BEGIN
15100
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15101
 
f_charbig = 'updated by trigger'
15102
 
      WHERE f_int1 = - old.f_int1;
15103
 
END|
15104
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15105
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15106
 
        
15107
 
# check trigger-4 success:      1
15108
 
DROP TRIGGER trg_1;
15109
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15110
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15111
 
f_charbig = 'just inserted'
15112
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15113
 
DELETE FROM t0_aux
15114
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15115
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15116
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15117
 
'just inserted' FROM t0_template
15118
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15119
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15120
 
BEGIN
15121
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15122
 
f_charbig = 'updated by trigger'
15123
 
      WHERE f_int1 = new.f_int1;
15124
 
END|
15125
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15126
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15127
 
        
15128
 
# check trigger-5 success:      1
15129
 
DROP TRIGGER trg_1;
15130
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15131
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15132
 
f_charbig = 'just inserted'
15133
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15134
 
DELETE FROM t0_aux
15135
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15136
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15137
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15138
 
'just inserted' FROM t0_template
15139
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15140
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15141
 
BEGIN
15142
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15143
 
f_charbig = 'updated by trigger'
15144
 
      WHERE f_int1 = - old.f_int1;
15145
 
END|
15146
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15147
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15148
 
        
15149
 
# check trigger-6 success:      1
15150
 
DROP TRIGGER trg_1;
15151
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15152
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15153
 
f_charbig = 'just inserted'
15154
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15155
 
DELETE FROM t0_aux
15156
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15157
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15158
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15159
 
'just inserted' FROM t0_template
15160
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15161
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15162
 
BEGIN
15163
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15164
 
f_charbig = 'updated by trigger'
15165
 
      WHERE f_int1 = - old.f_int1;
15166
 
END|
15167
 
DELETE FROM t0_aux
15168
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15169
 
        
15170
 
# check trigger-7 success:      1
15171
 
DROP TRIGGER trg_1;
15172
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15173
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15174
 
f_charbig = 'just inserted'
15175
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15176
 
DELETE FROM t0_aux
15177
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15178
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15179
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15180
 
'just inserted' FROM t0_template
15181
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15182
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15183
 
BEGIN
15184
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15185
 
f_charbig = 'updated by trigger'
15186
 
      WHERE f_int1 = - old.f_int1;
15187
 
END|
15188
 
DELETE FROM t0_aux
15189
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15190
 
        
15191
 
# check trigger-8 success:      1
15192
 
DROP TRIGGER trg_1;
15193
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15194
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15195
 
f_charbig = 'just inserted'
15196
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15197
 
DELETE FROM t0_aux
15198
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15199
 
DELETE FROM t1
15200
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15201
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15202
 
BEGIN
15203
 
SET new.f_int1 = old.f_int1 + @max_row,
15204
 
new.f_int2 = old.f_int2 - @max_row,
15205
 
new.f_charbig = '####updated per update trigger####';
15206
 
END|
15207
 
UPDATE t1
15208
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15209
 
f_charbig = '####updated per update statement itself####';
15210
 
        
15211
 
# check trigger-9 success:      1
15212
 
DROP TRIGGER trg_2;
15213
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15214
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15215
 
f_charbig = CONCAT('===',f_char1,'===');
15216
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15217
 
BEGIN
15218
 
SET new.f_int1 = new.f_int1 + @max_row,
15219
 
new.f_int2 = new.f_int2 - @max_row,
15220
 
new.f_charbig = '####updated per update trigger####';
15221
 
END|
15222
 
UPDATE t1
15223
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15224
 
f_charbig = '####updated per update statement itself####';
15225
 
        
15226
 
# check trigger-10 success:     1
15227
 
DROP TRIGGER trg_2;
15228
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15229
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15230
 
f_charbig = CONCAT('===',f_char1,'===');
15231
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15232
 
BEGIN
15233
 
SET new.f_int1 = @my_max1 + @counter,
15234
 
new.f_int2 = @my_min2 - @counter,
15235
 
new.f_charbig = '####updated per insert trigger####';
15236
 
SET @counter = @counter + 1;
15237
 
END|
15238
 
SET @counter = 1;
15239
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15240
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15241
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15242
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15243
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15244
 
ORDER BY f_int1;
15245
 
DROP TRIGGER trg_3;
15246
 
        
15247
 
# check trigger-11 success:     1
15248
 
DELETE FROM t1
15249
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15250
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15251
 
AND f_charbig = '####updated per insert trigger####';
15252
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15253
 
BEGIN
15254
 
SET new.f_int1 = @my_max1 + @counter,
15255
 
new.f_int2 = @my_min2 - @counter,
15256
 
new.f_charbig = '####updated per insert trigger####';
15257
 
SET @counter = @counter + 1;
15258
 
END|
15259
 
SET @counter = 1;
15260
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15261
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
15262
 
SELECT CAST(f_int1 AS CHAR),
15263
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15264
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15265
 
ORDER BY f_int1;
15266
 
DROP TRIGGER trg_3;
15267
 
        
15268
 
# check trigger-12 success:     1
15269
 
DELETE FROM t1
15270
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15271
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15272
 
AND f_charbig = '####updated per insert trigger####';
15273
 
ANALYZE  TABLE t1;
15274
 
Table   Op      Msg_type        Msg_text
15275
 
test.t1 analyze status  OK
15276
 
CHECK    TABLE t1 EXTENDED;
15277
 
Table   Op      Msg_type        Msg_text
15278
 
test.t1 check   status  OK
15279
 
CHECKSUM TABLE t1 EXTENDED;
15280
 
Table   Checksum
15281
 
test.t1 <some_value>
15282
 
OPTIMIZE TABLE t1;
15283
 
Table   Op      Msg_type        Msg_text
15284
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
15285
 
test.t1 optimize        status  OK
15286
 
# check layout success:    1
15287
 
REPAIR   TABLE t1 EXTENDED;
15288
 
Table   Op      Msg_type        Msg_text
15289
 
test.t1 repair  note    The storage engine for the table doesn't support repair
15290
 
# check layout success:    1
15291
 
TRUNCATE t1;
15292
 
        
15293
 
# check TRUNCATE success:       1
15294
 
# check layout success:    1
15295
 
# End usability test (inc/partition_check.inc)
15296
 
DROP TABLE t1;
15297
 
DROP TABLE IF EXISTS t1;
15298
 
CREATE TABLE t1 (
15299
 
f_int1 INTEGER,
15300
 
f_int2 INTEGER,
15301
 
f_char1 CHAR(20),
15302
 
f_char2 CHAR(20),
15303
 
f_charbig VARCHAR(1000)
15304
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
15305
 
)
15306
 
PARTITION BY HASH(f_int1) PARTITIONS 2;
15307
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15308
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
15309
 
# Start usability test (inc/partition_check.inc)
15310
 
create_command
15311
 
SHOW CREATE TABLE t1;
15312
 
Table   Create Table
15313
 
t1      CREATE TABLE `t1` (
15314
 
  `f_int1` int(11) DEFAULT NULL,
15315
 
  `f_int2` int(11) DEFAULT NULL,
15316
 
  `f_char1` char(20) DEFAULT NULL,
15317
 
  `f_char2` char(20) DEFAULT NULL,
15318
 
  `f_charbig` varchar(1000) DEFAULT NULL,
15319
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
15320
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
15321
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) PARTITIONS 2  */
15322
 
 
15323
 
unified filelist
15324
 
t1.frm
15325
 
t1.par
15326
 
 
15327
 
# check prerequisites-1 success:    1
15328
 
# check COUNT(*) success:    1
15329
 
# check MIN/MAX(f_int1) success:    1
15330
 
# check MIN/MAX(f_int2) success:    1
15331
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15332
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15333
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15334
 
WHERE f_int1 IN (2,3);
15335
 
ERROR 23000: Can't write; duplicate key in table 't1'
15336
 
# check prerequisites-3 success:    1
15337
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15338
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15339
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15340
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15341
 
WHERE f_int1 IN (2,3);
15342
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
15343
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15344
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15345
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15346
 
WHERE f_int1 IN (2,3);
15347
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
15348
 
# check read via f_int1 success: 1
15349
 
# check read via f_int2 success: 1
15350
 
        
15351
 
# check multiple-1 success:     1
15352
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15353
 
        
15354
 
# check multiple-2 success:     1
15355
 
INSERT INTO t1 SELECT * FROM t0_template
15356
 
WHERE MOD(f_int1,3) = 0;
15357
 
        
15358
 
# check multiple-3 success:     1
15359
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
15360
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15361
 
AND @max_row_div2 + @max_row_div4;
15362
 
        
15363
 
# check multiple-4 success:     1
15364
 
DELETE FROM t1
15365
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15366
 
AND @max_row_div2 + @max_row_div4 + @max_row;
15367
 
        
15368
 
# check multiple-5 success:     1
15369
 
SELECT COUNT(*) INTO @try_count FROM t0_template
15370
 
WHERE MOD(f_int1,3) = 0
15371
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15372
 
SELECT COUNT(*) INTO @clash_count
15373
 
FROM t1 INNER JOIN t0_template USING(f_int1)
15374
 
WHERE MOD(f_int1,3) = 0
15375
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15376
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15377
 
INSERT INTO t1
15378
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
15379
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15380
 
f_charbig = '#SINGLE#';
15381
 
        
15382
 
# check single-1 success:       1
15383
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15384
 
INSERT INTO t1
15385
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
15386
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15387
 
f_charbig = '#SINGLE#';
15388
 
        
15389
 
# check single-2 success:       1
15390
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15391
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15392
 
UPDATE t1 SET f_int1 = @cur_value2
15393
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15394
 
        
15395
 
# check single-3 success:       1
15396
 
SET @cur_value1= -1;
15397
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15398
 
UPDATE t1 SET f_int1 = @cur_value1
15399
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15400
 
        
15401
 
# check single-4 success:       1
15402
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
15403
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15404
 
        
15405
 
# check single-5 success:       1
15406
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15407
 
        
15408
 
# check single-6 success:       1
15409
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15410
 
        
15411
 
# check single-7 success:       1
15412
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15413
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15414
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15415
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15416
 
f_charbig = '#NULL#';
15417
 
INSERT INTO t1
15418
 
SET f_int1 = NULL , f_int2 = -@max_row,
15419
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15420
 
f_charbig = '#NULL#';
15421
 
# check null success:    1
15422
 
        
15423
 
# check null-1 success:         1
15424
 
UPDATE t1 SET f_int1 = -@max_row
15425
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15426
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15427
 
        
15428
 
# check null-2 success:         1
15429
 
UPDATE t1 SET f_int1 = NULL
15430
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15431
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15432
 
        
15433
 
# check null-3 success:         1
15434
 
DELETE FROM t1
15435
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15436
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15437
 
        
15438
 
# check null-4 success:         1
15439
 
DELETE FROM t1
15440
 
WHERE f_int1 = 0 AND f_int2 = 0
15441
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15442
 
AND f_charbig = '#NULL#';
15443
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15444
 
SELECT f_int1, f_int1, '', '', 'was inserted'
15445
 
   FROM t0_template source_tab
15446
 
WHERE MOD(f_int1,3) = 0
15447
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
15448
 
ON DUPLICATE KEY
15449
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15450
 
f_int2 = 2 * @max_row + source_tab.f_int1,
15451
 
f_charbig = 'was updated';
15452
 
        
15453
 
# check unique-1-a success:     1
15454
 
        
15455
 
# check unique-1-b success:     1
15456
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
15457
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15458
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15459
 
f_charbig = CONCAT('===',f_char1,'===')
15460
 
WHERE f_charbig = 'was updated';
15461
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15462
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15463
 
   FROM t0_template source_tab
15464
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15465
 
        
15466
 
# check replace success:        1
15467
 
DELETE FROM t1
15468
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15469
 
DELETE FROM t1
15470
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15471
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15472
 
UPDATE t1 SET f_int2 = f_int1,
15473
 
f_char1 = CAST(f_int1 AS CHAR),
15474
 
f_char2 = CAST(f_int1 AS CHAR),
15475
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15476
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15477
 
SET AUTOCOMMIT= 0;
15478
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15479
 
SELECT f_int1, f_int1, '', '', 'was inserted'
15480
 
FROM t0_template source_tab
15481
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15482
 
        
15483
 
# check transactions-1 success:         1
15484
 
COMMIT WORK;
15485
 
        
15486
 
# check transactions-2 success:         1
15487
 
ROLLBACK WORK;
15488
 
        
15489
 
# check transactions-3 success:         1
15490
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
15491
 
COMMIT WORK;
15492
 
ROLLBACK WORK;
15493
 
        
15494
 
# check transactions-4 success:         1
15495
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15496
 
SELECT f_int1, f_int1, '', '', 'was inserted'
15497
 
FROM t0_template source_tab
15498
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15499
 
        
15500
 
# check transactions-5 success:         1
15501
 
ROLLBACK WORK;
15502
 
        
15503
 
# check transactions-6 success:         1
15504
 
# INFO: Storage engine used for t1 seems to be transactional.
15505
 
COMMIT;
15506
 
        
15507
 
# check transactions-7 success:         1
15508
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
15509
 
COMMIT WORK;
15510
 
SET @@session.sql_mode = 'traditional';
15511
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15512
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15513
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15514
 
'', '', 'was inserted' FROM t0_template
15515
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15516
 
ERROR 22012: Division by 0
15517
 
COMMIT;
15518
 
        
15519
 
# check transactions-8 success:         1
15520
 
# INFO: Storage engine used for t1 seems to be able to revert
15521
 
#       changes made by the failing statement.
15522
 
SET @@session.sql_mode = '';
15523
 
SET AUTOCOMMIT= 1;
15524
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
15525
 
COMMIT WORK;
15526
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15527
 
        
15528
 
# check special-1 success:      1
15529
 
UPDATE t1 SET f_charbig = '';
15530
 
        
15531
 
# check special-2 success:      1
15532
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15533
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15534
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15535
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15536
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15537
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15538
 
'just inserted' FROM t0_template
15539
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15540
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15541
 
BEGIN
15542
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15543
 
f_charbig = 'updated by trigger'
15544
 
      WHERE f_int1 = new.f_int1;
15545
 
END|
15546
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15547
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15548
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15549
 
        
15550
 
# check trigger-1 success:      1
15551
 
DROP TRIGGER trg_1;
15552
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15553
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15554
 
f_charbig = 'just inserted'
15555
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15556
 
DELETE FROM t0_aux
15557
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15558
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15559
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15560
 
'just inserted' FROM t0_template
15561
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15562
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15563
 
BEGIN
15564
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15565
 
f_charbig = 'updated by trigger'
15566
 
      WHERE f_int1 = new.f_int1;
15567
 
END|
15568
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15569
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15570
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15571
 
        
15572
 
# check trigger-2 success:      1
15573
 
DROP TRIGGER trg_1;
15574
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15575
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15576
 
f_charbig = 'just inserted'
15577
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15578
 
DELETE FROM t0_aux
15579
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15580
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15581
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15582
 
'just inserted' FROM t0_template
15583
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15584
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15585
 
BEGIN
15586
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15587
 
f_charbig = 'updated by trigger'
15588
 
      WHERE f_int1 = new.f_int1;
15589
 
END|
15590
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15591
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15592
 
        
15593
 
# check trigger-3 success:      1
15594
 
DROP TRIGGER trg_1;
15595
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15596
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15597
 
f_charbig = 'just inserted'
15598
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15599
 
DELETE FROM t0_aux
15600
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15601
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15602
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15603
 
'just inserted' FROM t0_template
15604
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15605
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15606
 
BEGIN
15607
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15608
 
f_charbig = 'updated by trigger'
15609
 
      WHERE f_int1 = - old.f_int1;
15610
 
END|
15611
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15612
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15613
 
        
15614
 
# check trigger-4 success:      1
15615
 
DROP TRIGGER trg_1;
15616
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15617
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15618
 
f_charbig = 'just inserted'
15619
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15620
 
DELETE FROM t0_aux
15621
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15622
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15623
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15624
 
'just inserted' FROM t0_template
15625
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15626
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15627
 
BEGIN
15628
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15629
 
f_charbig = 'updated by trigger'
15630
 
      WHERE f_int1 = new.f_int1;
15631
 
END|
15632
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15633
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15634
 
        
15635
 
# check trigger-5 success:      1
15636
 
DROP TRIGGER trg_1;
15637
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15638
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15639
 
f_charbig = 'just inserted'
15640
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15641
 
DELETE FROM t0_aux
15642
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15643
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15644
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15645
 
'just inserted' FROM t0_template
15646
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15647
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15648
 
BEGIN
15649
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15650
 
f_charbig = 'updated by trigger'
15651
 
      WHERE f_int1 = - old.f_int1;
15652
 
END|
15653
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15654
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15655
 
        
15656
 
# check trigger-6 success:      1
15657
 
DROP TRIGGER trg_1;
15658
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15659
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15660
 
f_charbig = 'just inserted'
15661
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15662
 
DELETE FROM t0_aux
15663
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15664
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15665
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15666
 
'just inserted' FROM t0_template
15667
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15668
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15669
 
BEGIN
15670
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15671
 
f_charbig = 'updated by trigger'
15672
 
      WHERE f_int1 = - old.f_int1;
15673
 
END|
15674
 
DELETE FROM t0_aux
15675
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15676
 
        
15677
 
# check trigger-7 success:      1
15678
 
DROP TRIGGER trg_1;
15679
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15680
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15681
 
f_charbig = 'just inserted'
15682
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15683
 
DELETE FROM t0_aux
15684
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15685
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15686
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15687
 
'just inserted' FROM t0_template
15688
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15689
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15690
 
BEGIN
15691
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15692
 
f_charbig = 'updated by trigger'
15693
 
      WHERE f_int1 = - old.f_int1;
15694
 
END|
15695
 
DELETE FROM t0_aux
15696
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15697
 
        
15698
 
# check trigger-8 success:      1
15699
 
DROP TRIGGER trg_1;
15700
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15701
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15702
 
f_charbig = 'just inserted'
15703
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15704
 
DELETE FROM t0_aux
15705
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15706
 
DELETE FROM t1
15707
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15708
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15709
 
BEGIN
15710
 
SET new.f_int1 = old.f_int1 + @max_row,
15711
 
new.f_int2 = old.f_int2 - @max_row,
15712
 
new.f_charbig = '####updated per update trigger####';
15713
 
END|
15714
 
UPDATE t1
15715
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15716
 
f_charbig = '####updated per update statement itself####';
15717
 
        
15718
 
# check trigger-9 success:      1
15719
 
DROP TRIGGER trg_2;
15720
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15721
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15722
 
f_charbig = CONCAT('===',f_char1,'===');
15723
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15724
 
BEGIN
15725
 
SET new.f_int1 = new.f_int1 + @max_row,
15726
 
new.f_int2 = new.f_int2 - @max_row,
15727
 
new.f_charbig = '####updated per update trigger####';
15728
 
END|
15729
 
UPDATE t1
15730
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15731
 
f_charbig = '####updated per update statement itself####';
15732
 
        
15733
 
# check trigger-10 success:     1
15734
 
DROP TRIGGER trg_2;
15735
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15736
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15737
 
f_charbig = CONCAT('===',f_char1,'===');
15738
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15739
 
BEGIN
15740
 
SET new.f_int1 = @my_max1 + @counter,
15741
 
new.f_int2 = @my_min2 - @counter,
15742
 
new.f_charbig = '####updated per insert trigger####';
15743
 
SET @counter = @counter + 1;
15744
 
END|
15745
 
SET @counter = 1;
15746
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15747
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15748
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15749
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15750
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15751
 
ORDER BY f_int1;
15752
 
DROP TRIGGER trg_3;
15753
 
        
15754
 
# check trigger-11 success:     1
15755
 
DELETE FROM t1
15756
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15757
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15758
 
AND f_charbig = '####updated per insert trigger####';
15759
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15760
 
BEGIN
15761
 
SET new.f_int1 = @my_max1 + @counter,
15762
 
new.f_int2 = @my_min2 - @counter,
15763
 
new.f_charbig = '####updated per insert trigger####';
15764
 
SET @counter = @counter + 1;
15765
 
END|
15766
 
SET @counter = 1;
15767
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15768
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
15769
 
SELECT CAST(f_int1 AS CHAR),
15770
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15771
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15772
 
ORDER BY f_int1;
15773
 
DROP TRIGGER trg_3;
15774
 
        
15775
 
# check trigger-12 success:     1
15776
 
DELETE FROM t1
15777
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15778
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15779
 
AND f_charbig = '####updated per insert trigger####';
15780
 
ANALYZE  TABLE t1;
15781
 
Table   Op      Msg_type        Msg_text
15782
 
test.t1 analyze status  OK
15783
 
CHECK    TABLE t1 EXTENDED;
15784
 
Table   Op      Msg_type        Msg_text
15785
 
test.t1 check   status  OK
15786
 
CHECKSUM TABLE t1 EXTENDED;
15787
 
Table   Checksum
15788
 
test.t1 <some_value>
15789
 
OPTIMIZE TABLE t1;
15790
 
Table   Op      Msg_type        Msg_text
15791
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
15792
 
test.t1 optimize        status  OK
15793
 
# check layout success:    1
15794
 
REPAIR   TABLE t1 EXTENDED;
15795
 
Table   Op      Msg_type        Msg_text
15796
 
test.t1 repair  note    The storage engine for the table doesn't support repair
15797
 
# check layout success:    1
15798
 
TRUNCATE t1;
15799
 
        
15800
 
# check TRUNCATE success:       1
15801
 
# check layout success:    1
15802
 
# End usability test (inc/partition_check.inc)
15803
 
DROP TABLE t1;
15804
 
CREATE TABLE t1 (
15805
 
f_int1 INTEGER,
15806
 
f_int2 INTEGER,
15807
 
f_char1 CHAR(20),
15808
 
f_char2 CHAR(20),
15809
 
f_charbig VARCHAR(1000)
15810
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
15811
 
)
15812
 
PARTITION BY KEY(f_int1) PARTITIONS 5;
15813
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15814
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
15815
 
# Start usability test (inc/partition_check.inc)
15816
 
create_command
15817
 
SHOW CREATE TABLE t1;
15818
 
Table   Create Table
15819
 
t1      CREATE TABLE `t1` (
15820
 
  `f_int1` int(11) DEFAULT NULL,
15821
 
  `f_int2` int(11) DEFAULT NULL,
15822
 
  `f_char1` char(20) DEFAULT NULL,
15823
 
  `f_char2` char(20) DEFAULT NULL,
15824
 
  `f_charbig` varchar(1000) DEFAULT NULL,
15825
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
15826
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
15827
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) PARTITIONS 5  */
15828
 
 
15829
 
unified filelist
15830
 
t1.frm
15831
 
t1.par
15832
 
 
15833
 
# check prerequisites-1 success:    1
15834
 
# check COUNT(*) success:    1
15835
 
# check MIN/MAX(f_int1) success:    1
15836
 
# check MIN/MAX(f_int2) success:    1
15837
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15838
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15839
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15840
 
WHERE f_int1 IN (2,3);
15841
 
ERROR 23000: Can't write; duplicate key in table 't1'
15842
 
# check prerequisites-3 success:    1
15843
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15844
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15845
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15846
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15847
 
WHERE f_int1 IN (2,3);
15848
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
15849
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15850
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15851
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15852
 
WHERE f_int1 IN (2,3);
15853
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
15854
 
# check read via f_int1 success: 1
15855
 
# check read via f_int2 success: 1
15856
 
        
15857
 
# check multiple-1 success:     1
15858
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15859
 
        
15860
 
# check multiple-2 success:     1
15861
 
INSERT INTO t1 SELECT * FROM t0_template
15862
 
WHERE MOD(f_int1,3) = 0;
15863
 
        
15864
 
# check multiple-3 success:     1
15865
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
15866
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15867
 
AND @max_row_div2 + @max_row_div4;
15868
 
        
15869
 
# check multiple-4 success:     1
15870
 
DELETE FROM t1
15871
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15872
 
AND @max_row_div2 + @max_row_div4 + @max_row;
15873
 
        
15874
 
# check multiple-5 success:     1
15875
 
SELECT COUNT(*) INTO @try_count FROM t0_template
15876
 
WHERE MOD(f_int1,3) = 0
15877
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15878
 
SELECT COUNT(*) INTO @clash_count
15879
 
FROM t1 INNER JOIN t0_template USING(f_int1)
15880
 
WHERE MOD(f_int1,3) = 0
15881
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15882
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15883
 
INSERT INTO t1
15884
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
15885
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15886
 
f_charbig = '#SINGLE#';
15887
 
        
15888
 
# check single-1 success:       1
15889
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15890
 
INSERT INTO t1
15891
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
15892
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15893
 
f_charbig = '#SINGLE#';
15894
 
        
15895
 
# check single-2 success:       1
15896
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15897
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15898
 
UPDATE t1 SET f_int1 = @cur_value2
15899
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15900
 
        
15901
 
# check single-3 success:       1
15902
 
SET @cur_value1= -1;
15903
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15904
 
UPDATE t1 SET f_int1 = @cur_value1
15905
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15906
 
        
15907
 
# check single-4 success:       1
15908
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
15909
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15910
 
        
15911
 
# check single-5 success:       1
15912
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15913
 
        
15914
 
# check single-6 success:       1
15915
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15916
 
        
15917
 
# check single-7 success:       1
15918
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15919
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15920
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15921
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15922
 
f_charbig = '#NULL#';
15923
 
INSERT INTO t1
15924
 
SET f_int1 = NULL , f_int2 = -@max_row,
15925
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15926
 
f_charbig = '#NULL#';
15927
 
# check null success:    1
15928
 
        
15929
 
# check null-1 success:         1
15930
 
UPDATE t1 SET f_int1 = -@max_row
15931
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15932
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15933
 
        
15934
 
# check null-2 success:         1
15935
 
UPDATE t1 SET f_int1 = NULL
15936
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15937
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15938
 
        
15939
 
# check null-3 success:         1
15940
 
DELETE FROM t1
15941
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15942
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15943
 
        
15944
 
# check null-4 success:         1
15945
 
DELETE FROM t1
15946
 
WHERE f_int1 = 0 AND f_int2 = 0
15947
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15948
 
AND f_charbig = '#NULL#';
15949
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15950
 
SELECT f_int1, f_int1, '', '', 'was inserted'
15951
 
   FROM t0_template source_tab
15952
 
WHERE MOD(f_int1,3) = 0
15953
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
15954
 
ON DUPLICATE KEY
15955
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15956
 
f_int2 = 2 * @max_row + source_tab.f_int1,
15957
 
f_charbig = 'was updated';
15958
 
        
15959
 
# check unique-1-a success:     1
15960
 
        
15961
 
# check unique-1-b success:     1
15962
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
15963
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15964
 
f_int2 = CAST(f_char1 AS SIGNED INT),
15965
 
f_charbig = CONCAT('===',f_char1,'===')
15966
 
WHERE f_charbig = 'was updated';
15967
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15968
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15969
 
   FROM t0_template source_tab
15970
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15971
 
        
15972
 
# check replace success:        1
15973
 
DELETE FROM t1
15974
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15975
 
DELETE FROM t1
15976
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15977
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15978
 
UPDATE t1 SET f_int2 = f_int1,
15979
 
f_char1 = CAST(f_int1 AS CHAR),
15980
 
f_char2 = CAST(f_int1 AS CHAR),
15981
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15982
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15983
 
SET AUTOCOMMIT= 0;
15984
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15985
 
SELECT f_int1, f_int1, '', '', 'was inserted'
15986
 
FROM t0_template source_tab
15987
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15988
 
        
15989
 
# check transactions-1 success:         1
15990
 
COMMIT WORK;
15991
 
        
15992
 
# check transactions-2 success:         1
15993
 
ROLLBACK WORK;
15994
 
        
15995
 
# check transactions-3 success:         1
15996
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
15997
 
COMMIT WORK;
15998
 
ROLLBACK WORK;
15999
 
        
16000
 
# check transactions-4 success:         1
16001
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16002
 
SELECT f_int1, f_int1, '', '', 'was inserted'
16003
 
FROM t0_template source_tab
16004
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16005
 
        
16006
 
# check transactions-5 success:         1
16007
 
ROLLBACK WORK;
16008
 
        
16009
 
# check transactions-6 success:         1
16010
 
# INFO: Storage engine used for t1 seems to be transactional.
16011
 
COMMIT;
16012
 
        
16013
 
# check transactions-7 success:         1
16014
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
16015
 
COMMIT WORK;
16016
 
SET @@session.sql_mode = 'traditional';
16017
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16018
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16019
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16020
 
'', '', 'was inserted' FROM t0_template
16021
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16022
 
ERROR 22012: Division by 0
16023
 
COMMIT;
16024
 
        
16025
 
# check transactions-8 success:         1
16026
 
# INFO: Storage engine used for t1 seems to be able to revert
16027
 
#       changes made by the failing statement.
16028
 
SET @@session.sql_mode = '';
16029
 
SET AUTOCOMMIT= 1;
16030
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
16031
 
COMMIT WORK;
16032
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16033
 
        
16034
 
# check special-1 success:      1
16035
 
UPDATE t1 SET f_charbig = '';
16036
 
        
16037
 
# check special-2 success:      1
16038
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16039
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16040
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16041
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16042
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16043
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16044
 
'just inserted' FROM t0_template
16045
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16046
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16047
 
BEGIN
16048
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16049
 
f_charbig = 'updated by trigger'
16050
 
      WHERE f_int1 = new.f_int1;
16051
 
END|
16052
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16053
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16054
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16055
 
        
16056
 
# check trigger-1 success:      1
16057
 
DROP TRIGGER trg_1;
16058
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16059
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16060
 
f_charbig = 'just inserted'
16061
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16062
 
DELETE FROM t0_aux
16063
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16064
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16065
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16066
 
'just inserted' FROM t0_template
16067
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16068
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16069
 
BEGIN
16070
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16071
 
f_charbig = 'updated by trigger'
16072
 
      WHERE f_int1 = new.f_int1;
16073
 
END|
16074
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16075
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16076
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16077
 
        
16078
 
# check trigger-2 success:      1
16079
 
DROP TRIGGER trg_1;
16080
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16081
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16082
 
f_charbig = 'just inserted'
16083
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16084
 
DELETE FROM t0_aux
16085
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16086
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16087
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16088
 
'just inserted' FROM t0_template
16089
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16090
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16091
 
BEGIN
16092
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16093
 
f_charbig = 'updated by trigger'
16094
 
      WHERE f_int1 = new.f_int1;
16095
 
END|
16096
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16097
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16098
 
        
16099
 
# check trigger-3 success:      1
16100
 
DROP TRIGGER trg_1;
16101
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16102
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16103
 
f_charbig = 'just inserted'
16104
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16105
 
DELETE FROM t0_aux
16106
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16107
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16108
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16109
 
'just inserted' FROM t0_template
16110
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16111
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16112
 
BEGIN
16113
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16114
 
f_charbig = 'updated by trigger'
16115
 
      WHERE f_int1 = - old.f_int1;
16116
 
END|
16117
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16118
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16119
 
        
16120
 
# check trigger-4 success:      1
16121
 
DROP TRIGGER trg_1;
16122
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16123
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16124
 
f_charbig = 'just inserted'
16125
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16126
 
DELETE FROM t0_aux
16127
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16128
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16129
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16130
 
'just inserted' FROM t0_template
16131
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16132
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16133
 
BEGIN
16134
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16135
 
f_charbig = 'updated by trigger'
16136
 
      WHERE f_int1 = new.f_int1;
16137
 
END|
16138
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16139
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16140
 
        
16141
 
# check trigger-5 success:      1
16142
 
DROP TRIGGER trg_1;
16143
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16144
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16145
 
f_charbig = 'just inserted'
16146
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16147
 
DELETE FROM t0_aux
16148
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16149
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16150
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16151
 
'just inserted' FROM t0_template
16152
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16153
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16154
 
BEGIN
16155
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16156
 
f_charbig = 'updated by trigger'
16157
 
      WHERE f_int1 = - old.f_int1;
16158
 
END|
16159
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16160
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16161
 
        
16162
 
# check trigger-6 success:      1
16163
 
DROP TRIGGER trg_1;
16164
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16165
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16166
 
f_charbig = 'just inserted'
16167
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16168
 
DELETE FROM t0_aux
16169
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16170
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16171
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16172
 
'just inserted' FROM t0_template
16173
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16174
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16175
 
BEGIN
16176
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16177
 
f_charbig = 'updated by trigger'
16178
 
      WHERE f_int1 = - old.f_int1;
16179
 
END|
16180
 
DELETE FROM t0_aux
16181
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16182
 
        
16183
 
# check trigger-7 success:      1
16184
 
DROP TRIGGER trg_1;
16185
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16186
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16187
 
f_charbig = 'just inserted'
16188
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16189
 
DELETE FROM t0_aux
16190
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16191
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16192
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16193
 
'just inserted' FROM t0_template
16194
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16195
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16196
 
BEGIN
16197
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16198
 
f_charbig = 'updated by trigger'
16199
 
      WHERE f_int1 = - old.f_int1;
16200
 
END|
16201
 
DELETE FROM t0_aux
16202
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16203
 
        
16204
 
# check trigger-8 success:      1
16205
 
DROP TRIGGER trg_1;
16206
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16207
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16208
 
f_charbig = 'just inserted'
16209
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16210
 
DELETE FROM t0_aux
16211
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16212
 
DELETE FROM t1
16213
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16214
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16215
 
BEGIN
16216
 
SET new.f_int1 = old.f_int1 + @max_row,
16217
 
new.f_int2 = old.f_int2 - @max_row,
16218
 
new.f_charbig = '####updated per update trigger####';
16219
 
END|
16220
 
UPDATE t1
16221
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16222
 
f_charbig = '####updated per update statement itself####';
16223
 
        
16224
 
# check trigger-9 success:      1
16225
 
DROP TRIGGER trg_2;
16226
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16227
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16228
 
f_charbig = CONCAT('===',f_char1,'===');
16229
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16230
 
BEGIN
16231
 
SET new.f_int1 = new.f_int1 + @max_row,
16232
 
new.f_int2 = new.f_int2 - @max_row,
16233
 
new.f_charbig = '####updated per update trigger####';
16234
 
END|
16235
 
UPDATE t1
16236
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16237
 
f_charbig = '####updated per update statement itself####';
16238
 
        
16239
 
# check trigger-10 success:     1
16240
 
DROP TRIGGER trg_2;
16241
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16242
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16243
 
f_charbig = CONCAT('===',f_char1,'===');
16244
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16245
 
BEGIN
16246
 
SET new.f_int1 = @my_max1 + @counter,
16247
 
new.f_int2 = @my_min2 - @counter,
16248
 
new.f_charbig = '####updated per insert trigger####';
16249
 
SET @counter = @counter + 1;
16250
 
END|
16251
 
SET @counter = 1;
16252
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16253
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16254
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16255
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16256
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16257
 
ORDER BY f_int1;
16258
 
DROP TRIGGER trg_3;
16259
 
        
16260
 
# check trigger-11 success:     1
16261
 
DELETE FROM t1
16262
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16263
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16264
 
AND f_charbig = '####updated per insert trigger####';
16265
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16266
 
BEGIN
16267
 
SET new.f_int1 = @my_max1 + @counter,
16268
 
new.f_int2 = @my_min2 - @counter,
16269
 
new.f_charbig = '####updated per insert trigger####';
16270
 
SET @counter = @counter + 1;
16271
 
END|
16272
 
SET @counter = 1;
16273
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16274
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
16275
 
SELECT CAST(f_int1 AS CHAR),
16276
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16277
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16278
 
ORDER BY f_int1;
16279
 
DROP TRIGGER trg_3;
16280
 
        
16281
 
# check trigger-12 success:     1
16282
 
DELETE FROM t1
16283
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16284
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16285
 
AND f_charbig = '####updated per insert trigger####';
16286
 
ANALYZE  TABLE t1;
16287
 
Table   Op      Msg_type        Msg_text
16288
 
test.t1 analyze status  OK
16289
 
CHECK    TABLE t1 EXTENDED;
16290
 
Table   Op      Msg_type        Msg_text
16291
 
test.t1 check   status  OK
16292
 
CHECKSUM TABLE t1 EXTENDED;
16293
 
Table   Checksum
16294
 
test.t1 <some_value>
16295
 
OPTIMIZE TABLE t1;
16296
 
Table   Op      Msg_type        Msg_text
16297
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
16298
 
test.t1 optimize        status  OK
16299
 
# check layout success:    1
16300
 
REPAIR   TABLE t1 EXTENDED;
16301
 
Table   Op      Msg_type        Msg_text
16302
 
test.t1 repair  note    The storage engine for the table doesn't support repair
16303
 
# check layout success:    1
16304
 
TRUNCATE t1;
16305
 
        
16306
 
# check TRUNCATE success:       1
16307
 
# check layout success:    1
16308
 
# End usability test (inc/partition_check.inc)
16309
 
DROP TABLE t1;
16310
 
CREATE TABLE t1 (
16311
 
f_int1 INTEGER,
16312
 
f_int2 INTEGER,
16313
 
f_char1 CHAR(20),
16314
 
f_char2 CHAR(20),
16315
 
f_charbig VARCHAR(1000)
16316
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
16317
 
)
16318
 
PARTITION BY LIST(MOD(f_int1,4))
16319
 
(PARTITION part_3 VALUES IN (-3),
16320
 
PARTITION part_2 VALUES IN (-2),
16321
 
PARTITION part_1 VALUES IN (-1),
16322
 
PARTITION part_N VALUES IN (NULL),
16323
 
PARTITION part0 VALUES IN (0),
16324
 
PARTITION part1 VALUES IN (1),
16325
 
PARTITION part2 VALUES IN (2),
16326
 
PARTITION part3 VALUES IN (3));
16327
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16328
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
16329
 
# Start usability test (inc/partition_check.inc)
16330
 
create_command
16331
 
SHOW CREATE TABLE t1;
16332
 
Table   Create Table
16333
 
t1      CREATE TABLE `t1` (
16334
 
  `f_int1` int(11) DEFAULT NULL,
16335
 
  `f_int2` int(11) DEFAULT NULL,
16336
 
  `f_char1` char(20) DEFAULT NULL,
16337
 
  `f_char2` char(20) DEFAULT NULL,
16338
 
  `f_charbig` varchar(1000) DEFAULT NULL,
16339
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
16340
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
16341
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
16342
 
 
16343
 
unified filelist
16344
 
t1.frm
16345
 
t1.par
16346
 
 
16347
 
# check prerequisites-1 success:    1
16348
 
# check COUNT(*) success:    1
16349
 
# check MIN/MAX(f_int1) success:    1
16350
 
# check MIN/MAX(f_int2) success:    1
16351
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16352
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16353
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16354
 
WHERE f_int1 IN (2,3);
16355
 
ERROR 23000: Can't write; duplicate key in table 't1'
16356
 
# check prerequisites-3 success:    1
16357
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16358
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16359
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16360
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16361
 
WHERE f_int1 IN (2,3);
16362
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
16363
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16364
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16365
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16366
 
WHERE f_int1 IN (2,3);
16367
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
16368
 
# check read via f_int1 success: 1
16369
 
# check read via f_int2 success: 1
16370
 
        
16371
 
# check multiple-1 success:     1
16372
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16373
 
        
16374
 
# check multiple-2 success:     1
16375
 
INSERT INTO t1 SELECT * FROM t0_template
16376
 
WHERE MOD(f_int1,3) = 0;
16377
 
        
16378
 
# check multiple-3 success:     1
16379
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
16380
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16381
 
AND @max_row_div2 + @max_row_div4;
16382
 
        
16383
 
# check multiple-4 success:     1
16384
 
DELETE FROM t1
16385
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16386
 
AND @max_row_div2 + @max_row_div4 + @max_row;
16387
 
        
16388
 
# check multiple-5 success:     1
16389
 
SELECT COUNT(*) INTO @try_count FROM t0_template
16390
 
WHERE MOD(f_int1,3) = 0
16391
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16392
 
SELECT COUNT(*) INTO @clash_count
16393
 
FROM t1 INNER JOIN t0_template USING(f_int1)
16394
 
WHERE MOD(f_int1,3) = 0
16395
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16396
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16397
 
INSERT INTO t1
16398
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
16399
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16400
 
f_charbig = '#SINGLE#';
16401
 
        
16402
 
# check single-1 success:       1
16403
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16404
 
INSERT INTO t1
16405
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
16406
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16407
 
f_charbig = '#SINGLE#';
16408
 
        
16409
 
# check single-2 success:       1
16410
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16411
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16412
 
UPDATE t1 SET f_int1 = @cur_value2
16413
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16414
 
        
16415
 
# check single-3 success:       1
16416
 
SET @cur_value1= -1;
16417
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16418
 
UPDATE t1 SET f_int1 = @cur_value1
16419
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16420
 
        
16421
 
# check single-4 success:       1
16422
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
16423
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16424
 
        
16425
 
# check single-5 success:       1
16426
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16427
 
        
16428
 
# check single-6 success:       1
16429
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16430
 
        
16431
 
# check single-7 success:       1
16432
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
16433
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16434
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16435
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16436
 
f_charbig = '#NULL#';
16437
 
INSERT INTO t1
16438
 
SET f_int1 = NULL , f_int2 = -@max_row,
16439
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16440
 
f_charbig = '#NULL#';
16441
 
# check null success:    1
16442
 
        
16443
 
# check null-1 success:         1
16444
 
UPDATE t1 SET f_int1 = -@max_row
16445
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16446
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16447
 
        
16448
 
# check null-2 success:         1
16449
 
UPDATE t1 SET f_int1 = NULL
16450
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16451
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16452
 
        
16453
 
# check null-3 success:         1
16454
 
DELETE FROM t1
16455
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16456
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16457
 
        
16458
 
# check null-4 success:         1
16459
 
DELETE FROM t1
16460
 
WHERE f_int1 = 0 AND f_int2 = 0
16461
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16462
 
AND f_charbig = '#NULL#';
16463
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16464
 
SELECT f_int1, f_int1, '', '', 'was inserted'
16465
 
   FROM t0_template source_tab
16466
 
WHERE MOD(f_int1,3) = 0
16467
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
16468
 
ON DUPLICATE KEY
16469
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16470
 
f_int2 = 2 * @max_row + source_tab.f_int1,
16471
 
f_charbig = 'was updated';
16472
 
        
16473
 
# check unique-1-a success:     1
16474
 
        
16475
 
# check unique-1-b success:     1
16476
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
16477
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16478
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16479
 
f_charbig = CONCAT('===',f_char1,'===')
16480
 
WHERE f_charbig = 'was updated';
16481
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16482
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16483
 
   FROM t0_template source_tab
16484
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16485
 
        
16486
 
# check replace success:        1
16487
 
DELETE FROM t1
16488
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16489
 
DELETE FROM t1
16490
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16491
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16492
 
UPDATE t1 SET f_int2 = f_int1,
16493
 
f_char1 = CAST(f_int1 AS CHAR),
16494
 
f_char2 = CAST(f_int1 AS CHAR),
16495
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16496
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16497
 
SET AUTOCOMMIT= 0;
16498
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16499
 
SELECT f_int1, f_int1, '', '', 'was inserted'
16500
 
FROM t0_template source_tab
16501
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16502
 
        
16503
 
# check transactions-1 success:         1
16504
 
COMMIT WORK;
16505
 
        
16506
 
# check transactions-2 success:         1
16507
 
ROLLBACK WORK;
16508
 
        
16509
 
# check transactions-3 success:         1
16510
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
16511
 
COMMIT WORK;
16512
 
ROLLBACK WORK;
16513
 
        
16514
 
# check transactions-4 success:         1
16515
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16516
 
SELECT f_int1, f_int1, '', '', 'was inserted'
16517
 
FROM t0_template source_tab
16518
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16519
 
        
16520
 
# check transactions-5 success:         1
16521
 
ROLLBACK WORK;
16522
 
        
16523
 
# check transactions-6 success:         1
16524
 
# INFO: Storage engine used for t1 seems to be transactional.
16525
 
COMMIT;
16526
 
        
16527
 
# check transactions-7 success:         1
16528
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
16529
 
COMMIT WORK;
16530
 
SET @@session.sql_mode = 'traditional';
16531
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16532
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16533
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16534
 
'', '', 'was inserted' FROM t0_template
16535
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16536
 
ERROR 22012: Division by 0
16537
 
COMMIT;
16538
 
        
16539
 
# check transactions-8 success:         1
16540
 
# INFO: Storage engine used for t1 seems to be able to revert
16541
 
#       changes made by the failing statement.
16542
 
SET @@session.sql_mode = '';
16543
 
SET AUTOCOMMIT= 1;
16544
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
16545
 
COMMIT WORK;
16546
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16547
 
        
16548
 
# check special-1 success:      1
16549
 
UPDATE t1 SET f_charbig = '';
16550
 
        
16551
 
# check special-2 success:      1
16552
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16553
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16554
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16555
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16556
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16557
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16558
 
'just inserted' FROM t0_template
16559
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16560
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16561
 
BEGIN
16562
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16563
 
f_charbig = 'updated by trigger'
16564
 
      WHERE f_int1 = new.f_int1;
16565
 
END|
16566
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16567
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16568
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16569
 
        
16570
 
# check trigger-1 success:      1
16571
 
DROP TRIGGER trg_1;
16572
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16573
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16574
 
f_charbig = 'just inserted'
16575
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16576
 
DELETE FROM t0_aux
16577
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16578
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16579
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16580
 
'just inserted' FROM t0_template
16581
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16582
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16583
 
BEGIN
16584
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16585
 
f_charbig = 'updated by trigger'
16586
 
      WHERE f_int1 = new.f_int1;
16587
 
END|
16588
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16589
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16590
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16591
 
        
16592
 
# check trigger-2 success:      1
16593
 
DROP TRIGGER trg_1;
16594
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16595
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16596
 
f_charbig = 'just inserted'
16597
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16598
 
DELETE FROM t0_aux
16599
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16600
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16601
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16602
 
'just inserted' FROM t0_template
16603
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16604
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16605
 
BEGIN
16606
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16607
 
f_charbig = 'updated by trigger'
16608
 
      WHERE f_int1 = new.f_int1;
16609
 
END|
16610
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16611
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16612
 
        
16613
 
# check trigger-3 success:      1
16614
 
DROP TRIGGER trg_1;
16615
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16616
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16617
 
f_charbig = 'just inserted'
16618
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16619
 
DELETE FROM t0_aux
16620
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16621
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16622
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16623
 
'just inserted' FROM t0_template
16624
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16625
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16626
 
BEGIN
16627
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16628
 
f_charbig = 'updated by trigger'
16629
 
      WHERE f_int1 = - old.f_int1;
16630
 
END|
16631
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16632
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16633
 
        
16634
 
# check trigger-4 success:      1
16635
 
DROP TRIGGER trg_1;
16636
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16637
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16638
 
f_charbig = 'just inserted'
16639
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16640
 
DELETE FROM t0_aux
16641
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16642
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16643
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16644
 
'just inserted' FROM t0_template
16645
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16646
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16647
 
BEGIN
16648
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16649
 
f_charbig = 'updated by trigger'
16650
 
      WHERE f_int1 = new.f_int1;
16651
 
END|
16652
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16653
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16654
 
        
16655
 
# check trigger-5 success:      1
16656
 
DROP TRIGGER trg_1;
16657
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16658
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16659
 
f_charbig = 'just inserted'
16660
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16661
 
DELETE FROM t0_aux
16662
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16663
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16664
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16665
 
'just inserted' FROM t0_template
16666
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16667
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16668
 
BEGIN
16669
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16670
 
f_charbig = 'updated by trigger'
16671
 
      WHERE f_int1 = - old.f_int1;
16672
 
END|
16673
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16674
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16675
 
        
16676
 
# check trigger-6 success:      1
16677
 
DROP TRIGGER trg_1;
16678
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16679
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16680
 
f_charbig = 'just inserted'
16681
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16682
 
DELETE FROM t0_aux
16683
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16684
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16685
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16686
 
'just inserted' FROM t0_template
16687
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16688
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16689
 
BEGIN
16690
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16691
 
f_charbig = 'updated by trigger'
16692
 
      WHERE f_int1 = - old.f_int1;
16693
 
END|
16694
 
DELETE FROM t0_aux
16695
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16696
 
        
16697
 
# check trigger-7 success:      1
16698
 
DROP TRIGGER trg_1;
16699
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16700
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16701
 
f_charbig = 'just inserted'
16702
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16703
 
DELETE FROM t0_aux
16704
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16705
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16706
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16707
 
'just inserted' FROM t0_template
16708
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16709
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16710
 
BEGIN
16711
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16712
 
f_charbig = 'updated by trigger'
16713
 
      WHERE f_int1 = - old.f_int1;
16714
 
END|
16715
 
DELETE FROM t0_aux
16716
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16717
 
        
16718
 
# check trigger-8 success:      1
16719
 
DROP TRIGGER trg_1;
16720
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16721
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16722
 
f_charbig = 'just inserted'
16723
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16724
 
DELETE FROM t0_aux
16725
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16726
 
DELETE FROM t1
16727
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16728
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16729
 
BEGIN
16730
 
SET new.f_int1 = old.f_int1 + @max_row,
16731
 
new.f_int2 = old.f_int2 - @max_row,
16732
 
new.f_charbig = '####updated per update trigger####';
16733
 
END|
16734
 
UPDATE t1
16735
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16736
 
f_charbig = '####updated per update statement itself####';
16737
 
        
16738
 
# check trigger-9 success:      1
16739
 
DROP TRIGGER trg_2;
16740
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16741
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16742
 
f_charbig = CONCAT('===',f_char1,'===');
16743
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16744
 
BEGIN
16745
 
SET new.f_int1 = new.f_int1 + @max_row,
16746
 
new.f_int2 = new.f_int2 - @max_row,
16747
 
new.f_charbig = '####updated per update trigger####';
16748
 
END|
16749
 
UPDATE t1
16750
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16751
 
f_charbig = '####updated per update statement itself####';
16752
 
        
16753
 
# check trigger-10 success:     1
16754
 
DROP TRIGGER trg_2;
16755
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16756
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16757
 
f_charbig = CONCAT('===',f_char1,'===');
16758
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16759
 
BEGIN
16760
 
SET new.f_int1 = @my_max1 + @counter,
16761
 
new.f_int2 = @my_min2 - @counter,
16762
 
new.f_charbig = '####updated per insert trigger####';
16763
 
SET @counter = @counter + 1;
16764
 
END|
16765
 
SET @counter = 1;
16766
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16767
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16768
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16769
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16770
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16771
 
ORDER BY f_int1;
16772
 
DROP TRIGGER trg_3;
16773
 
        
16774
 
# check trigger-11 success:     1
16775
 
DELETE FROM t1
16776
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16777
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16778
 
AND f_charbig = '####updated per insert trigger####';
16779
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16780
 
BEGIN
16781
 
SET new.f_int1 = @my_max1 + @counter,
16782
 
new.f_int2 = @my_min2 - @counter,
16783
 
new.f_charbig = '####updated per insert trigger####';
16784
 
SET @counter = @counter + 1;
16785
 
END|
16786
 
SET @counter = 1;
16787
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16788
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
16789
 
SELECT CAST(f_int1 AS CHAR),
16790
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16791
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16792
 
ORDER BY f_int1;
16793
 
DROP TRIGGER trg_3;
16794
 
        
16795
 
# check trigger-12 success:     1
16796
 
DELETE FROM t1
16797
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16798
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16799
 
AND f_charbig = '####updated per insert trigger####';
16800
 
ANALYZE  TABLE t1;
16801
 
Table   Op      Msg_type        Msg_text
16802
 
test.t1 analyze status  OK
16803
 
CHECK    TABLE t1 EXTENDED;
16804
 
Table   Op      Msg_type        Msg_text
16805
 
test.t1 check   status  OK
16806
 
CHECKSUM TABLE t1 EXTENDED;
16807
 
Table   Checksum
16808
 
test.t1 <some_value>
16809
 
OPTIMIZE TABLE t1;
16810
 
Table   Op      Msg_type        Msg_text
16811
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
16812
 
test.t1 optimize        status  OK
16813
 
# check layout success:    1
16814
 
REPAIR   TABLE t1 EXTENDED;
16815
 
Table   Op      Msg_type        Msg_text
16816
 
test.t1 repair  note    The storage engine for the table doesn't support repair
16817
 
# check layout success:    1
16818
 
TRUNCATE t1;
16819
 
        
16820
 
# check TRUNCATE success:       1
16821
 
# check layout success:    1
16822
 
# End usability test (inc/partition_check.inc)
16823
 
DROP TABLE t1;
16824
 
CREATE TABLE t1 (
16825
 
f_int1 INTEGER,
16826
 
f_int2 INTEGER,
16827
 
f_char1 CHAR(20),
16828
 
f_char2 CHAR(20),
16829
 
f_charbig VARCHAR(1000)
16830
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
16831
 
)
16832
 
PARTITION BY RANGE(f_int1)
16833
 
(PARTITION parta VALUES LESS THAN (0),
16834
 
PARTITION partb VALUES LESS THAN (5),
16835
 
PARTITION partc VALUES LESS THAN (10),
16836
 
PARTITION partd VALUES LESS THAN (10 + 5),
16837
 
PARTITION parte VALUES LESS THAN (20),
16838
 
PARTITION partf VALUES LESS THAN (2147483646));
16839
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16840
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
16841
 
# Start usability test (inc/partition_check.inc)
16842
 
create_command
16843
 
SHOW CREATE TABLE t1;
16844
 
Table   Create Table
16845
 
t1      CREATE TABLE `t1` (
16846
 
  `f_int1` int(11) DEFAULT NULL,
16847
 
  `f_int2` int(11) DEFAULT NULL,
16848
 
  `f_char1` char(20) DEFAULT NULL,
16849
 
  `f_char2` char(20) DEFAULT NULL,
16850
 
  `f_charbig` varchar(1000) DEFAULT NULL,
16851
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
16852
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
16853
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
16854
 
 
16855
 
unified filelist
16856
 
t1.frm
16857
 
t1.par
16858
 
 
16859
 
# check prerequisites-1 success:    1
16860
 
# check COUNT(*) success:    1
16861
 
# check MIN/MAX(f_int1) success:    1
16862
 
# check MIN/MAX(f_int2) success:    1
16863
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16864
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16865
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16866
 
WHERE f_int1 IN (2,3);
16867
 
ERROR 23000: Can't write; duplicate key in table 't1'
16868
 
# check prerequisites-3 success:    1
16869
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16870
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16871
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16872
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16873
 
WHERE f_int1 IN (2,3);
16874
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
16875
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16876
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16877
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16878
 
WHERE f_int1 IN (2,3);
16879
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
16880
 
# check read via f_int1 success: 1
16881
 
# check read via f_int2 success: 1
16882
 
        
16883
 
# check multiple-1 success:     1
16884
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16885
 
        
16886
 
# check multiple-2 success:     1
16887
 
INSERT INTO t1 SELECT * FROM t0_template
16888
 
WHERE MOD(f_int1,3) = 0;
16889
 
        
16890
 
# check multiple-3 success:     1
16891
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
16892
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16893
 
AND @max_row_div2 + @max_row_div4;
16894
 
        
16895
 
# check multiple-4 success:     1
16896
 
DELETE FROM t1
16897
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16898
 
AND @max_row_div2 + @max_row_div4 + @max_row;
16899
 
        
16900
 
# check multiple-5 success:     1
16901
 
SELECT COUNT(*) INTO @try_count FROM t0_template
16902
 
WHERE MOD(f_int1,3) = 0
16903
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16904
 
SELECT COUNT(*) INTO @clash_count
16905
 
FROM t1 INNER JOIN t0_template USING(f_int1)
16906
 
WHERE MOD(f_int1,3) = 0
16907
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16908
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16909
 
INSERT INTO t1
16910
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
16911
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16912
 
f_charbig = '#SINGLE#';
16913
 
        
16914
 
# check single-1 success:       1
16915
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16916
 
INSERT INTO t1
16917
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
16918
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16919
 
f_charbig = '#SINGLE#';
16920
 
        
16921
 
# check single-2 success:       1
16922
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16923
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16924
 
UPDATE t1 SET f_int1 = @cur_value2
16925
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16926
 
        
16927
 
# check single-3 success:       1
16928
 
SET @cur_value1= -1;
16929
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16930
 
UPDATE t1 SET f_int1 = @cur_value1
16931
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16932
 
        
16933
 
# check single-4 success:       1
16934
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
16935
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16936
 
        
16937
 
# check single-5 success:       1
16938
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16939
 
        
16940
 
# check single-6 success:       1
16941
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16942
 
ERROR HY000: Table has no partition for value 2147483647
16943
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16944
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16945
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16946
 
f_charbig = '#NULL#';
16947
 
INSERT INTO t1
16948
 
SET f_int1 = NULL , f_int2 = -@max_row,
16949
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16950
 
f_charbig = '#NULL#';
16951
 
# check null success:    1
16952
 
        
16953
 
# check null-1 success:         1
16954
 
UPDATE t1 SET f_int1 = -@max_row
16955
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16956
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16957
 
        
16958
 
# check null-2 success:         1
16959
 
UPDATE t1 SET f_int1 = NULL
16960
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16961
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16962
 
        
16963
 
# check null-3 success:         1
16964
 
DELETE FROM t1
16965
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16966
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16967
 
        
16968
 
# check null-4 success:         1
16969
 
DELETE FROM t1
16970
 
WHERE f_int1 = 0 AND f_int2 = 0
16971
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16972
 
AND f_charbig = '#NULL#';
16973
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16974
 
SELECT f_int1, f_int1, '', '', 'was inserted'
16975
 
   FROM t0_template source_tab
16976
 
WHERE MOD(f_int1,3) = 0
16977
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
16978
 
ON DUPLICATE KEY
16979
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16980
 
f_int2 = 2 * @max_row + source_tab.f_int1,
16981
 
f_charbig = 'was updated';
16982
 
        
16983
 
# check unique-1-a success:     1
16984
 
        
16985
 
# check unique-1-b success:     1
16986
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
16987
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16988
 
f_int2 = CAST(f_char1 AS SIGNED INT),
16989
 
f_charbig = CONCAT('===',f_char1,'===')
16990
 
WHERE f_charbig = 'was updated';
16991
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16992
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16993
 
   FROM t0_template source_tab
16994
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16995
 
        
16996
 
# check replace success:        1
16997
 
DELETE FROM t1
16998
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16999
 
DELETE FROM t1
17000
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
17001
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
17002
 
UPDATE t1 SET f_int2 = f_int1,
17003
 
f_char1 = CAST(f_int1 AS CHAR),
17004
 
f_char2 = CAST(f_int1 AS CHAR),
17005
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
17006
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
17007
 
SET AUTOCOMMIT= 0;
17008
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17009
 
SELECT f_int1, f_int1, '', '', 'was inserted'
17010
 
FROM t0_template source_tab
17011
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17012
 
        
17013
 
# check transactions-1 success:         1
17014
 
COMMIT WORK;
17015
 
        
17016
 
# check transactions-2 success:         1
17017
 
ROLLBACK WORK;
17018
 
        
17019
 
# check transactions-3 success:         1
17020
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
17021
 
COMMIT WORK;
17022
 
ROLLBACK WORK;
17023
 
        
17024
 
# check transactions-4 success:         1
17025
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17026
 
SELECT f_int1, f_int1, '', '', 'was inserted'
17027
 
FROM t0_template source_tab
17028
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17029
 
        
17030
 
# check transactions-5 success:         1
17031
 
ROLLBACK WORK;
17032
 
        
17033
 
# check transactions-6 success:         1
17034
 
# INFO: Storage engine used for t1 seems to be transactional.
17035
 
COMMIT;
17036
 
        
17037
 
# check transactions-7 success:         1
17038
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
17039
 
COMMIT WORK;
17040
 
SET @@session.sql_mode = 'traditional';
17041
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
17042
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17043
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
17044
 
'', '', 'was inserted' FROM t0_template
17045
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17046
 
ERROR 22012: Division by 0
17047
 
COMMIT;
17048
 
        
17049
 
# check transactions-8 success:         1
17050
 
# INFO: Storage engine used for t1 seems to be able to revert
17051
 
#       changes made by the failing statement.
17052
 
SET @@session.sql_mode = '';
17053
 
SET AUTOCOMMIT= 1;
17054
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
17055
 
COMMIT WORK;
17056
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
17057
 
        
17058
 
# check special-1 success:      1
17059
 
UPDATE t1 SET f_charbig = '';
17060
 
        
17061
 
# check special-2 success:      1
17062
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
17063
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17064
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
17065
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17066
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17067
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17068
 
'just inserted' FROM t0_template
17069
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17070
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
17071
 
BEGIN
17072
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17073
 
f_charbig = 'updated by trigger'
17074
 
      WHERE f_int1 = new.f_int1;
17075
 
END|
17076
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17077
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17078
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17079
 
        
17080
 
# check trigger-1 success:      1
17081
 
DROP TRIGGER trg_1;
17082
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17083
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17084
 
f_charbig = 'just inserted'
17085
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17086
 
DELETE FROM t0_aux
17087
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17088
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17089
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17090
 
'just inserted' FROM t0_template
17091
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17092
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
17093
 
BEGIN
17094
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17095
 
f_charbig = 'updated by trigger'
17096
 
      WHERE f_int1 = new.f_int1;
17097
 
END|
17098
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17099
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17100
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17101
 
        
17102
 
# check trigger-2 success:      1
17103
 
DROP TRIGGER trg_1;
17104
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17105
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17106
 
f_charbig = 'just inserted'
17107
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17108
 
DELETE FROM t0_aux
17109
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17110
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17111
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17112
 
'just inserted' FROM t0_template
17113
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17114
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17115
 
BEGIN
17116
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17117
 
f_charbig = 'updated by trigger'
17118
 
      WHERE f_int1 = new.f_int1;
17119
 
END|
17120
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17121
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17122
 
        
17123
 
# check trigger-3 success:      1
17124
 
DROP TRIGGER trg_1;
17125
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17126
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17127
 
f_charbig = 'just inserted'
17128
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17129
 
DELETE FROM t0_aux
17130
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17131
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17132
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17133
 
'just inserted' FROM t0_template
17134
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17135
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17136
 
BEGIN
17137
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17138
 
f_charbig = 'updated by trigger'
17139
 
      WHERE f_int1 = - old.f_int1;
17140
 
END|
17141
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17142
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17143
 
        
17144
 
# check trigger-4 success:      1
17145
 
DROP TRIGGER trg_1;
17146
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17147
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17148
 
f_charbig = 'just inserted'
17149
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17150
 
DELETE FROM t0_aux
17151
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17152
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17153
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17154
 
'just inserted' FROM t0_template
17155
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17156
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17157
 
BEGIN
17158
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17159
 
f_charbig = 'updated by trigger'
17160
 
      WHERE f_int1 = new.f_int1;
17161
 
END|
17162
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17163
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17164
 
        
17165
 
# check trigger-5 success:      1
17166
 
DROP TRIGGER trg_1;
17167
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17168
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17169
 
f_charbig = 'just inserted'
17170
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17171
 
DELETE FROM t0_aux
17172
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17173
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17174
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17175
 
'just inserted' FROM t0_template
17176
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17177
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17178
 
BEGIN
17179
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17180
 
f_charbig = 'updated by trigger'
17181
 
      WHERE f_int1 = - old.f_int1;
17182
 
END|
17183
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17184
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17185
 
        
17186
 
# check trigger-6 success:      1
17187
 
DROP TRIGGER trg_1;
17188
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17189
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17190
 
f_charbig = 'just inserted'
17191
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17192
 
DELETE FROM t0_aux
17193
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17194
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17195
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17196
 
'just inserted' FROM t0_template
17197
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17198
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
17199
 
BEGIN
17200
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17201
 
f_charbig = 'updated by trigger'
17202
 
      WHERE f_int1 = - old.f_int1;
17203
 
END|
17204
 
DELETE FROM t0_aux
17205
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17206
 
        
17207
 
# check trigger-7 success:      1
17208
 
DROP TRIGGER trg_1;
17209
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17210
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17211
 
f_charbig = 'just inserted'
17212
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17213
 
DELETE FROM t0_aux
17214
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17215
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17216
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17217
 
'just inserted' FROM t0_template
17218
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17219
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
17220
 
BEGIN
17221
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17222
 
f_charbig = 'updated by trigger'
17223
 
      WHERE f_int1 = - old.f_int1;
17224
 
END|
17225
 
DELETE FROM t0_aux
17226
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17227
 
        
17228
 
# check trigger-8 success:      1
17229
 
DROP TRIGGER trg_1;
17230
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17231
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17232
 
f_charbig = 'just inserted'
17233
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17234
 
DELETE FROM t0_aux
17235
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17236
 
DELETE FROM t1
17237
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17238
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17239
 
BEGIN
17240
 
SET new.f_int1 = old.f_int1 + @max_row,
17241
 
new.f_int2 = old.f_int2 - @max_row,
17242
 
new.f_charbig = '####updated per update trigger####';
17243
 
END|
17244
 
UPDATE t1
17245
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17246
 
f_charbig = '####updated per update statement itself####';
17247
 
        
17248
 
# check trigger-9 success:      1
17249
 
DROP TRIGGER trg_2;
17250
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17251
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17252
 
f_charbig = CONCAT('===',f_char1,'===');
17253
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17254
 
BEGIN
17255
 
SET new.f_int1 = new.f_int1 + @max_row,
17256
 
new.f_int2 = new.f_int2 - @max_row,
17257
 
new.f_charbig = '####updated per update trigger####';
17258
 
END|
17259
 
UPDATE t1
17260
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17261
 
f_charbig = '####updated per update statement itself####';
17262
 
        
17263
 
# check trigger-10 success:     1
17264
 
DROP TRIGGER trg_2;
17265
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17266
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17267
 
f_charbig = CONCAT('===',f_char1,'===');
17268
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17269
 
BEGIN
17270
 
SET new.f_int1 = @my_max1 + @counter,
17271
 
new.f_int2 = @my_min2 - @counter,
17272
 
new.f_charbig = '####updated per insert trigger####';
17273
 
SET @counter = @counter + 1;
17274
 
END|
17275
 
SET @counter = 1;
17276
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17277
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17278
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17279
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17280
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17281
 
ORDER BY f_int1;
17282
 
DROP TRIGGER trg_3;
17283
 
        
17284
 
# check trigger-11 success:     1
17285
 
DELETE FROM t1
17286
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17287
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17288
 
AND f_charbig = '####updated per insert trigger####';
17289
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17290
 
BEGIN
17291
 
SET new.f_int1 = @my_max1 + @counter,
17292
 
new.f_int2 = @my_min2 - @counter,
17293
 
new.f_charbig = '####updated per insert trigger####';
17294
 
SET @counter = @counter + 1;
17295
 
END|
17296
 
SET @counter = 1;
17297
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17298
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
17299
 
SELECT CAST(f_int1 AS CHAR),
17300
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17301
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17302
 
ORDER BY f_int1;
17303
 
DROP TRIGGER trg_3;
17304
 
        
17305
 
# check trigger-12 success:     1
17306
 
DELETE FROM t1
17307
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17308
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17309
 
AND f_charbig = '####updated per insert trigger####';
17310
 
ANALYZE  TABLE t1;
17311
 
Table   Op      Msg_type        Msg_text
17312
 
test.t1 analyze status  OK
17313
 
CHECK    TABLE t1 EXTENDED;
17314
 
Table   Op      Msg_type        Msg_text
17315
 
test.t1 check   status  OK
17316
 
CHECKSUM TABLE t1 EXTENDED;
17317
 
Table   Checksum
17318
 
test.t1 <some_value>
17319
 
OPTIMIZE TABLE t1;
17320
 
Table   Op      Msg_type        Msg_text
17321
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
17322
 
test.t1 optimize        status  OK
17323
 
# check layout success:    1
17324
 
REPAIR   TABLE t1 EXTENDED;
17325
 
Table   Op      Msg_type        Msg_text
17326
 
test.t1 repair  note    The storage engine for the table doesn't support repair
17327
 
# check layout success:    1
17328
 
TRUNCATE t1;
17329
 
        
17330
 
# check TRUNCATE success:       1
17331
 
# check layout success:    1
17332
 
# End usability test (inc/partition_check.inc)
17333
 
DROP TABLE t1;
17334
 
CREATE TABLE t1 (
17335
 
f_int1 INTEGER,
17336
 
f_int2 INTEGER,
17337
 
f_char1 CHAR(20),
17338
 
f_char2 CHAR(20),
17339
 
f_charbig VARCHAR(1000)
17340
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
17341
 
)
17342
 
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
17343
 
(PARTITION parta VALUES LESS THAN (0),
17344
 
PARTITION partb VALUES LESS THAN (5),
17345
 
PARTITION partc VALUES LESS THAN (10),
17346
 
PARTITION partd VALUES LESS THAN (2147483646));
17347
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17348
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
17349
 
# Start usability test (inc/partition_check.inc)
17350
 
create_command
17351
 
SHOW CREATE TABLE t1;
17352
 
Table   Create Table
17353
 
t1      CREATE TABLE `t1` (
17354
 
  `f_int1` int(11) DEFAULT NULL,
17355
 
  `f_int2` int(11) DEFAULT NULL,
17356
 
  `f_char1` char(20) DEFAULT NULL,
17357
 
  `f_char2` char(20) DEFAULT NULL,
17358
 
  `f_charbig` varchar(1000) DEFAULT NULL,
17359
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
17360
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
17361
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
17362
 
 
17363
 
unified filelist
17364
 
t1.frm
17365
 
t1.par
17366
 
 
17367
 
# check prerequisites-1 success:    1
17368
 
# check COUNT(*) success:    1
17369
 
# check MIN/MAX(f_int1) success:    1
17370
 
# check MIN/MAX(f_int2) success:    1
17371
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17372
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17373
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
17374
 
WHERE f_int1 IN (2,3);
17375
 
ERROR 23000: Can't write; duplicate key in table 't1'
17376
 
# check prerequisites-3 success:    1
17377
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
17378
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17379
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17380
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17381
 
WHERE f_int1 IN (2,3);
17382
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
17383
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17384
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17385
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17386
 
WHERE f_int1 IN (2,3);
17387
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
17388
 
# check read via f_int1 success: 1
17389
 
# check read via f_int2 success: 1
17390
 
        
17391
 
# check multiple-1 success:     1
17392
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
17393
 
        
17394
 
# check multiple-2 success:     1
17395
 
INSERT INTO t1 SELECT * FROM t0_template
17396
 
WHERE MOD(f_int1,3) = 0;
17397
 
        
17398
 
# check multiple-3 success:     1
17399
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
17400
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
17401
 
AND @max_row_div2 + @max_row_div4;
17402
 
        
17403
 
# check multiple-4 success:     1
17404
 
DELETE FROM t1
17405
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
17406
 
AND @max_row_div2 + @max_row_div4 + @max_row;
17407
 
        
17408
 
# check multiple-5 success:     1
17409
 
SELECT COUNT(*) INTO @try_count FROM t0_template
17410
 
WHERE MOD(f_int1,3) = 0
17411
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17412
 
SELECT COUNT(*) INTO @clash_count
17413
 
FROM t1 INNER JOIN t0_template USING(f_int1)
17414
 
WHERE MOD(f_int1,3) = 0
17415
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17416
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
17417
 
INSERT INTO t1
17418
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
17419
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17420
 
f_charbig = '#SINGLE#';
17421
 
        
17422
 
# check single-1 success:       1
17423
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
17424
 
INSERT INTO t1
17425
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
17426
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17427
 
f_charbig = '#SINGLE#';
17428
 
        
17429
 
# check single-2 success:       1
17430
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
17431
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
17432
 
UPDATE t1 SET f_int1 = @cur_value2
17433
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
17434
 
        
17435
 
# check single-3 success:       1
17436
 
SET @cur_value1= -1;
17437
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
17438
 
UPDATE t1 SET f_int1 = @cur_value1
17439
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
17440
 
        
17441
 
# check single-4 success:       1
17442
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
17443
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
17444
 
        
17445
 
# check single-5 success:       1
17446
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
17447
 
        
17448
 
# check single-6 success:       1
17449
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
17450
 
        
17451
 
# check single-7 success:       1
17452
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
17453
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
17454
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
17455
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
17456
 
f_charbig = '#NULL#';
17457
 
INSERT INTO t1
17458
 
SET f_int1 = NULL , f_int2 = -@max_row,
17459
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
17460
 
f_charbig = '#NULL#';
17461
 
# check null success:    1
17462
 
        
17463
 
# check null-1 success:         1
17464
 
UPDATE t1 SET f_int1 = -@max_row
17465
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17466
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17467
 
        
17468
 
# check null-2 success:         1
17469
 
UPDATE t1 SET f_int1 = NULL
17470
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17471
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17472
 
        
17473
 
# check null-3 success:         1
17474
 
DELETE FROM t1
17475
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17476
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17477
 
        
17478
 
# check null-4 success:         1
17479
 
DELETE FROM t1
17480
 
WHERE f_int1 = 0 AND f_int2 = 0
17481
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
17482
 
AND f_charbig = '#NULL#';
17483
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17484
 
SELECT f_int1, f_int1, '', '', 'was inserted'
17485
 
   FROM t0_template source_tab
17486
 
WHERE MOD(f_int1,3) = 0
17487
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
17488
 
ON DUPLICATE KEY
17489
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
17490
 
f_int2 = 2 * @max_row + source_tab.f_int1,
17491
 
f_charbig = 'was updated';
17492
 
        
17493
 
# check unique-1-a success:     1
17494
 
        
17495
 
# check unique-1-b success:     1
17496
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
17497
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17498
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17499
 
f_charbig = CONCAT('===',f_char1,'===')
17500
 
WHERE f_charbig = 'was updated';
17501
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17502
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
17503
 
   FROM t0_template source_tab
17504
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17505
 
        
17506
 
# check replace success:        1
17507
 
DELETE FROM t1
17508
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
17509
 
DELETE FROM t1
17510
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
17511
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
17512
 
UPDATE t1 SET f_int2 = f_int1,
17513
 
f_char1 = CAST(f_int1 AS CHAR),
17514
 
f_char2 = CAST(f_int1 AS CHAR),
17515
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
17516
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
17517
 
SET AUTOCOMMIT= 0;
17518
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17519
 
SELECT f_int1, f_int1, '', '', 'was inserted'
17520
 
FROM t0_template source_tab
17521
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17522
 
        
17523
 
# check transactions-1 success:         1
17524
 
COMMIT WORK;
17525
 
        
17526
 
# check transactions-2 success:         1
17527
 
ROLLBACK WORK;
17528
 
        
17529
 
# check transactions-3 success:         1
17530
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
17531
 
COMMIT WORK;
17532
 
ROLLBACK WORK;
17533
 
        
17534
 
# check transactions-4 success:         1
17535
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17536
 
SELECT f_int1, f_int1, '', '', 'was inserted'
17537
 
FROM t0_template source_tab
17538
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17539
 
        
17540
 
# check transactions-5 success:         1
17541
 
ROLLBACK WORK;
17542
 
        
17543
 
# check transactions-6 success:         1
17544
 
# INFO: Storage engine used for t1 seems to be transactional.
17545
 
COMMIT;
17546
 
        
17547
 
# check transactions-7 success:         1
17548
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
17549
 
COMMIT WORK;
17550
 
SET @@session.sql_mode = 'traditional';
17551
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
17552
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17553
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
17554
 
'', '', 'was inserted' FROM t0_template
17555
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17556
 
ERROR 22012: Division by 0
17557
 
COMMIT;
17558
 
        
17559
 
# check transactions-8 success:         1
17560
 
# INFO: Storage engine used for t1 seems to be able to revert
17561
 
#       changes made by the failing statement.
17562
 
SET @@session.sql_mode = '';
17563
 
SET AUTOCOMMIT= 1;
17564
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
17565
 
COMMIT WORK;
17566
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
17567
 
        
17568
 
# check special-1 success:      1
17569
 
UPDATE t1 SET f_charbig = '';
17570
 
        
17571
 
# check special-2 success:      1
17572
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
17573
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17574
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
17575
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17576
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17577
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17578
 
'just inserted' FROM t0_template
17579
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17580
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
17581
 
BEGIN
17582
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17583
 
f_charbig = 'updated by trigger'
17584
 
      WHERE f_int1 = new.f_int1;
17585
 
END|
17586
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17587
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17588
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17589
 
        
17590
 
# check trigger-1 success:      1
17591
 
DROP TRIGGER trg_1;
17592
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17593
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17594
 
f_charbig = 'just inserted'
17595
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17596
 
DELETE FROM t0_aux
17597
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17598
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17599
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17600
 
'just inserted' FROM t0_template
17601
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17602
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
17603
 
BEGIN
17604
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17605
 
f_charbig = 'updated by trigger'
17606
 
      WHERE f_int1 = new.f_int1;
17607
 
END|
17608
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17609
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17610
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17611
 
        
17612
 
# check trigger-2 success:      1
17613
 
DROP TRIGGER trg_1;
17614
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17615
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17616
 
f_charbig = 'just inserted'
17617
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17618
 
DELETE FROM t0_aux
17619
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17620
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17621
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17622
 
'just inserted' FROM t0_template
17623
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17624
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17625
 
BEGIN
17626
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17627
 
f_charbig = 'updated by trigger'
17628
 
      WHERE f_int1 = new.f_int1;
17629
 
END|
17630
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17631
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17632
 
        
17633
 
# check trigger-3 success:      1
17634
 
DROP TRIGGER trg_1;
17635
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17636
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17637
 
f_charbig = 'just inserted'
17638
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17639
 
DELETE FROM t0_aux
17640
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17641
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17642
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17643
 
'just inserted' FROM t0_template
17644
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17645
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17646
 
BEGIN
17647
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17648
 
f_charbig = 'updated by trigger'
17649
 
      WHERE f_int1 = - old.f_int1;
17650
 
END|
17651
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17652
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17653
 
        
17654
 
# check trigger-4 success:      1
17655
 
DROP TRIGGER trg_1;
17656
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17657
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17658
 
f_charbig = 'just inserted'
17659
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17660
 
DELETE FROM t0_aux
17661
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17662
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17663
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17664
 
'just inserted' FROM t0_template
17665
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17666
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17667
 
BEGIN
17668
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17669
 
f_charbig = 'updated by trigger'
17670
 
      WHERE f_int1 = new.f_int1;
17671
 
END|
17672
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17673
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17674
 
        
17675
 
# check trigger-5 success:      1
17676
 
DROP TRIGGER trg_1;
17677
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17678
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17679
 
f_charbig = 'just inserted'
17680
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17681
 
DELETE FROM t0_aux
17682
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17683
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17684
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17685
 
'just inserted' FROM t0_template
17686
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17687
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17688
 
BEGIN
17689
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17690
 
f_charbig = 'updated by trigger'
17691
 
      WHERE f_int1 = - old.f_int1;
17692
 
END|
17693
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17694
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17695
 
        
17696
 
# check trigger-6 success:      1
17697
 
DROP TRIGGER trg_1;
17698
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17699
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17700
 
f_charbig = 'just inserted'
17701
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17702
 
DELETE FROM t0_aux
17703
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17704
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17705
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17706
 
'just inserted' FROM t0_template
17707
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17708
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
17709
 
BEGIN
17710
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17711
 
f_charbig = 'updated by trigger'
17712
 
      WHERE f_int1 = - old.f_int1;
17713
 
END|
17714
 
DELETE FROM t0_aux
17715
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17716
 
        
17717
 
# check trigger-7 success:      1
17718
 
DROP TRIGGER trg_1;
17719
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17720
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17721
 
f_charbig = 'just inserted'
17722
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17723
 
DELETE FROM t0_aux
17724
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17725
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17726
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17727
 
'just inserted' FROM t0_template
17728
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17729
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
17730
 
BEGIN
17731
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17732
 
f_charbig = 'updated by trigger'
17733
 
      WHERE f_int1 = - old.f_int1;
17734
 
END|
17735
 
DELETE FROM t0_aux
17736
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17737
 
        
17738
 
# check trigger-8 success:      1
17739
 
DROP TRIGGER trg_1;
17740
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17741
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17742
 
f_charbig = 'just inserted'
17743
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17744
 
DELETE FROM t0_aux
17745
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17746
 
DELETE FROM t1
17747
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17748
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17749
 
BEGIN
17750
 
SET new.f_int1 = old.f_int1 + @max_row,
17751
 
new.f_int2 = old.f_int2 - @max_row,
17752
 
new.f_charbig = '####updated per update trigger####';
17753
 
END|
17754
 
UPDATE t1
17755
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17756
 
f_charbig = '####updated per update statement itself####';
17757
 
        
17758
 
# check trigger-9 success:      1
17759
 
DROP TRIGGER trg_2;
17760
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17761
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17762
 
f_charbig = CONCAT('===',f_char1,'===');
17763
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17764
 
BEGIN
17765
 
SET new.f_int1 = new.f_int1 + @max_row,
17766
 
new.f_int2 = new.f_int2 - @max_row,
17767
 
new.f_charbig = '####updated per update trigger####';
17768
 
END|
17769
 
UPDATE t1
17770
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17771
 
f_charbig = '####updated per update statement itself####';
17772
 
        
17773
 
# check trigger-10 success:     1
17774
 
DROP TRIGGER trg_2;
17775
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17776
 
f_int2 = CAST(f_char1 AS SIGNED INT),
17777
 
f_charbig = CONCAT('===',f_char1,'===');
17778
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17779
 
BEGIN
17780
 
SET new.f_int1 = @my_max1 + @counter,
17781
 
new.f_int2 = @my_min2 - @counter,
17782
 
new.f_charbig = '####updated per insert trigger####';
17783
 
SET @counter = @counter + 1;
17784
 
END|
17785
 
SET @counter = 1;
17786
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17787
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17788
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17789
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17790
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17791
 
ORDER BY f_int1;
17792
 
DROP TRIGGER trg_3;
17793
 
        
17794
 
# check trigger-11 success:     1
17795
 
DELETE FROM t1
17796
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17797
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17798
 
AND f_charbig = '####updated per insert trigger####';
17799
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17800
 
BEGIN
17801
 
SET new.f_int1 = @my_max1 + @counter,
17802
 
new.f_int2 = @my_min2 - @counter,
17803
 
new.f_charbig = '####updated per insert trigger####';
17804
 
SET @counter = @counter + 1;
17805
 
END|
17806
 
SET @counter = 1;
17807
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17808
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
17809
 
SELECT CAST(f_int1 AS CHAR),
17810
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17811
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17812
 
ORDER BY f_int1;
17813
 
DROP TRIGGER trg_3;
17814
 
        
17815
 
# check trigger-12 success:     1
17816
 
DELETE FROM t1
17817
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17818
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17819
 
AND f_charbig = '####updated per insert trigger####';
17820
 
ANALYZE  TABLE t1;
17821
 
Table   Op      Msg_type        Msg_text
17822
 
test.t1 analyze status  OK
17823
 
CHECK    TABLE t1 EXTENDED;
17824
 
Table   Op      Msg_type        Msg_text
17825
 
test.t1 check   status  OK
17826
 
CHECKSUM TABLE t1 EXTENDED;
17827
 
Table   Checksum
17828
 
test.t1 <some_value>
17829
 
OPTIMIZE TABLE t1;
17830
 
Table   Op      Msg_type        Msg_text
17831
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
17832
 
test.t1 optimize        status  OK
17833
 
# check layout success:    1
17834
 
REPAIR   TABLE t1 EXTENDED;
17835
 
Table   Op      Msg_type        Msg_text
17836
 
test.t1 repair  note    The storage engine for the table doesn't support repair
17837
 
# check layout success:    1
17838
 
TRUNCATE t1;
17839
 
        
17840
 
# check TRUNCATE success:       1
17841
 
# check layout success:    1
17842
 
# End usability test (inc/partition_check.inc)
17843
 
DROP TABLE t1;
17844
 
CREATE TABLE t1 (
17845
 
f_int1 INTEGER,
17846
 
f_int2 INTEGER,
17847
 
f_char1 CHAR(20),
17848
 
f_char2 CHAR(20),
17849
 
f_charbig VARCHAR(1000)
17850
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
17851
 
)
17852
 
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
17853
 
(PARTITION part1 VALUES LESS THAN (0)
17854
 
(SUBPARTITION subpart11, SUBPARTITION subpart12),
17855
 
PARTITION part2 VALUES LESS THAN (5)
17856
 
(SUBPARTITION subpart21, SUBPARTITION subpart22),
17857
 
PARTITION part3 VALUES LESS THAN (10)
17858
 
(SUBPARTITION subpart31, SUBPARTITION subpart32),
17859
 
PARTITION part4 VALUES LESS THAN (2147483646)
17860
 
(SUBPARTITION subpart41, SUBPARTITION subpart42));
17861
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17862
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
17863
 
# Start usability test (inc/partition_check.inc)
17864
 
create_command
17865
 
SHOW CREATE TABLE t1;
17866
 
Table   Create Table
17867
 
t1      CREATE TABLE `t1` (
17868
 
  `f_int1` int(11) DEFAULT NULL,
17869
 
  `f_int2` int(11) DEFAULT NULL,
17870
 
  `f_char1` char(20) DEFAULT NULL,
17871
 
  `f_char2` char(20) DEFAULT NULL,
17872
 
  `f_charbig` varchar(1000) DEFAULT NULL,
17873
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
17874
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
17875
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
17876
 
 
17877
 
unified filelist
17878
 
t1.frm
17879
 
t1.par
17880
 
 
17881
 
# check prerequisites-1 success:    1
17882
 
# check COUNT(*) success:    1
17883
 
# check MIN/MAX(f_int1) success:    1
17884
 
# check MIN/MAX(f_int2) success:    1
17885
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17886
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17887
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
17888
 
WHERE f_int1 IN (2,3);
17889
 
ERROR 23000: Can't write; duplicate key in table 't1'
17890
 
# check prerequisites-3 success:    1
17891
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
17892
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17893
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17894
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17895
 
WHERE f_int1 IN (2,3);
17896
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
17897
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17898
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17899
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17900
 
WHERE f_int1 IN (2,3);
17901
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
17902
 
# check read via f_int1 success: 1
17903
 
# check read via f_int2 success: 1
17904
 
        
17905
 
# check multiple-1 success:     1
17906
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
17907
 
        
17908
 
# check multiple-2 success:     1
17909
 
INSERT INTO t1 SELECT * FROM t0_template
17910
 
WHERE MOD(f_int1,3) = 0;
17911
 
        
17912
 
# check multiple-3 success:     1
17913
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
17914
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
17915
 
AND @max_row_div2 + @max_row_div4;
17916
 
        
17917
 
# check multiple-4 success:     1
17918
 
DELETE FROM t1
17919
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
17920
 
AND @max_row_div2 + @max_row_div4 + @max_row;
17921
 
        
17922
 
# check multiple-5 success:     1
17923
 
SELECT COUNT(*) INTO @try_count FROM t0_template
17924
 
WHERE MOD(f_int1,3) = 0
17925
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17926
 
SELECT COUNT(*) INTO @clash_count
17927
 
FROM t1 INNER JOIN t0_template USING(f_int1)
17928
 
WHERE MOD(f_int1,3) = 0
17929
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17930
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
17931
 
INSERT INTO t1
17932
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
17933
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17934
 
f_charbig = '#SINGLE#';
17935
 
        
17936
 
# check single-1 success:       1
17937
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
17938
 
INSERT INTO t1
17939
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
17940
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17941
 
f_charbig = '#SINGLE#';
17942
 
        
17943
 
# check single-2 success:       1
17944
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
17945
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
17946
 
UPDATE t1 SET f_int1 = @cur_value2
17947
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
17948
 
        
17949
 
# check single-3 success:       1
17950
 
SET @cur_value1= -1;
17951
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
17952
 
UPDATE t1 SET f_int1 = @cur_value1
17953
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
17954
 
        
17955
 
# check single-4 success:       1
17956
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
17957
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
17958
 
        
17959
 
# check single-5 success:       1
17960
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
17961
 
        
17962
 
# check single-6 success:       1
17963
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
17964
 
ERROR HY000: Table has no partition for value 2147483647
17965
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
17966
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
17967
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
17968
 
f_charbig = '#NULL#';
17969
 
INSERT INTO t1
17970
 
SET f_int1 = NULL , f_int2 = -@max_row,
17971
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
17972
 
f_charbig = '#NULL#';
17973
 
# check null success:    1
17974
 
        
17975
 
# check null-1 success:         1
17976
 
UPDATE t1 SET f_int1 = -@max_row
17977
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17978
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17979
 
        
17980
 
# check null-2 success:         1
17981
 
UPDATE t1 SET f_int1 = NULL
17982
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17983
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17984
 
        
17985
 
# check null-3 success:         1
17986
 
DELETE FROM t1
17987
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17988
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17989
 
        
17990
 
# check null-4 success:         1
17991
 
DELETE FROM t1
17992
 
WHERE f_int1 = 0 AND f_int2 = 0
17993
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
17994
 
AND f_charbig = '#NULL#';
17995
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17996
 
SELECT f_int1, f_int1, '', '', 'was inserted'
17997
 
   FROM t0_template source_tab
17998
 
WHERE MOD(f_int1,3) = 0
17999
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
18000
 
ON DUPLICATE KEY
18001
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
18002
 
f_int2 = 2 * @max_row + source_tab.f_int1,
18003
 
f_charbig = 'was updated';
18004
 
        
18005
 
# check unique-1-a success:     1
18006
 
        
18007
 
# check unique-1-b success:     1
18008
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
18009
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18010
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18011
 
f_charbig = CONCAT('===',f_char1,'===')
18012
 
WHERE f_charbig = 'was updated';
18013
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18014
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
18015
 
   FROM t0_template source_tab
18016
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18017
 
        
18018
 
# check replace success:        1
18019
 
DELETE FROM t1
18020
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
18021
 
DELETE FROM t1
18022
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
18023
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
18024
 
UPDATE t1 SET f_int2 = f_int1,
18025
 
f_char1 = CAST(f_int1 AS CHAR),
18026
 
f_char2 = CAST(f_int1 AS CHAR),
18027
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
18028
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
18029
 
SET AUTOCOMMIT= 0;
18030
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18031
 
SELECT f_int1, f_int1, '', '', 'was inserted'
18032
 
FROM t0_template source_tab
18033
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18034
 
        
18035
 
# check transactions-1 success:         1
18036
 
COMMIT WORK;
18037
 
        
18038
 
# check transactions-2 success:         1
18039
 
ROLLBACK WORK;
18040
 
        
18041
 
# check transactions-3 success:         1
18042
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
18043
 
COMMIT WORK;
18044
 
ROLLBACK WORK;
18045
 
        
18046
 
# check transactions-4 success:         1
18047
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18048
 
SELECT f_int1, f_int1, '', '', 'was inserted'
18049
 
FROM t0_template source_tab
18050
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18051
 
        
18052
 
# check transactions-5 success:         1
18053
 
ROLLBACK WORK;
18054
 
        
18055
 
# check transactions-6 success:         1
18056
 
# INFO: Storage engine used for t1 seems to be transactional.
18057
 
COMMIT;
18058
 
        
18059
 
# check transactions-7 success:         1
18060
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
18061
 
COMMIT WORK;
18062
 
SET @@session.sql_mode = 'traditional';
18063
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
18064
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18065
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
18066
 
'', '', 'was inserted' FROM t0_template
18067
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18068
 
ERROR 22012: Division by 0
18069
 
COMMIT;
18070
 
        
18071
 
# check transactions-8 success:         1
18072
 
# INFO: Storage engine used for t1 seems to be able to revert
18073
 
#       changes made by the failing statement.
18074
 
SET @@session.sql_mode = '';
18075
 
SET AUTOCOMMIT= 1;
18076
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
18077
 
COMMIT WORK;
18078
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
18079
 
        
18080
 
# check special-1 success:      1
18081
 
UPDATE t1 SET f_charbig = '';
18082
 
        
18083
 
# check special-2 success:      1
18084
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
18085
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18086
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
18087
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18088
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18089
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18090
 
'just inserted' FROM t0_template
18091
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18092
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
18093
 
BEGIN
18094
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18095
 
f_charbig = 'updated by trigger'
18096
 
      WHERE f_int1 = new.f_int1;
18097
 
END|
18098
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18099
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18100
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18101
 
        
18102
 
# check trigger-1 success:      1
18103
 
DROP TRIGGER trg_1;
18104
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18105
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18106
 
f_charbig = 'just inserted'
18107
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18108
 
DELETE FROM t0_aux
18109
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18110
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18111
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18112
 
'just inserted' FROM t0_template
18113
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18114
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
18115
 
BEGIN
18116
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18117
 
f_charbig = 'updated by trigger'
18118
 
      WHERE f_int1 = new.f_int1;
18119
 
END|
18120
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18121
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18122
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18123
 
        
18124
 
# check trigger-2 success:      1
18125
 
DROP TRIGGER trg_1;
18126
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18127
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18128
 
f_charbig = 'just inserted'
18129
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18130
 
DELETE FROM t0_aux
18131
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18132
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18133
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18134
 
'just inserted' FROM t0_template
18135
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18136
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18137
 
BEGIN
18138
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18139
 
f_charbig = 'updated by trigger'
18140
 
      WHERE f_int1 = new.f_int1;
18141
 
END|
18142
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18143
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18144
 
        
18145
 
# check trigger-3 success:      1
18146
 
DROP TRIGGER trg_1;
18147
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18148
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18149
 
f_charbig = 'just inserted'
18150
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18151
 
DELETE FROM t0_aux
18152
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18153
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18154
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18155
 
'just inserted' FROM t0_template
18156
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18157
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18158
 
BEGIN
18159
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18160
 
f_charbig = 'updated by trigger'
18161
 
      WHERE f_int1 = - old.f_int1;
18162
 
END|
18163
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18164
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18165
 
        
18166
 
# check trigger-4 success:      1
18167
 
DROP TRIGGER trg_1;
18168
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18169
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18170
 
f_charbig = 'just inserted'
18171
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18172
 
DELETE FROM t0_aux
18173
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18174
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18175
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18176
 
'just inserted' FROM t0_template
18177
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18178
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18179
 
BEGIN
18180
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18181
 
f_charbig = 'updated by trigger'
18182
 
      WHERE f_int1 = new.f_int1;
18183
 
END|
18184
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18185
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18186
 
        
18187
 
# check trigger-5 success:      1
18188
 
DROP TRIGGER trg_1;
18189
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18190
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18191
 
f_charbig = 'just inserted'
18192
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18193
 
DELETE FROM t0_aux
18194
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18195
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18196
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18197
 
'just inserted' FROM t0_template
18198
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18199
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18200
 
BEGIN
18201
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18202
 
f_charbig = 'updated by trigger'
18203
 
      WHERE f_int1 = - old.f_int1;
18204
 
END|
18205
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18206
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18207
 
        
18208
 
# check trigger-6 success:      1
18209
 
DROP TRIGGER trg_1;
18210
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18211
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18212
 
f_charbig = 'just inserted'
18213
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18214
 
DELETE FROM t0_aux
18215
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18216
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18217
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18218
 
'just inserted' FROM t0_template
18219
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18220
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
18221
 
BEGIN
18222
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18223
 
f_charbig = 'updated by trigger'
18224
 
      WHERE f_int1 = - old.f_int1;
18225
 
END|
18226
 
DELETE FROM t0_aux
18227
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18228
 
        
18229
 
# check trigger-7 success:      1
18230
 
DROP TRIGGER trg_1;
18231
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18232
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18233
 
f_charbig = 'just inserted'
18234
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18235
 
DELETE FROM t0_aux
18236
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18237
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18238
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18239
 
'just inserted' FROM t0_template
18240
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18241
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
18242
 
BEGIN
18243
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18244
 
f_charbig = 'updated by trigger'
18245
 
      WHERE f_int1 = - old.f_int1;
18246
 
END|
18247
 
DELETE FROM t0_aux
18248
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18249
 
        
18250
 
# check trigger-8 success:      1
18251
 
DROP TRIGGER trg_1;
18252
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18253
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18254
 
f_charbig = 'just inserted'
18255
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18256
 
DELETE FROM t0_aux
18257
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18258
 
DELETE FROM t1
18259
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18260
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18261
 
BEGIN
18262
 
SET new.f_int1 = old.f_int1 + @max_row,
18263
 
new.f_int2 = old.f_int2 - @max_row,
18264
 
new.f_charbig = '####updated per update trigger####';
18265
 
END|
18266
 
UPDATE t1
18267
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18268
 
f_charbig = '####updated per update statement itself####';
18269
 
        
18270
 
# check trigger-9 success:      1
18271
 
DROP TRIGGER trg_2;
18272
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18273
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18274
 
f_charbig = CONCAT('===',f_char1,'===');
18275
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18276
 
BEGIN
18277
 
SET new.f_int1 = new.f_int1 + @max_row,
18278
 
new.f_int2 = new.f_int2 - @max_row,
18279
 
new.f_charbig = '####updated per update trigger####';
18280
 
END|
18281
 
UPDATE t1
18282
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18283
 
f_charbig = '####updated per update statement itself####';
18284
 
        
18285
 
# check trigger-10 success:     1
18286
 
DROP TRIGGER trg_2;
18287
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18288
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18289
 
f_charbig = CONCAT('===',f_char1,'===');
18290
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18291
 
BEGIN
18292
 
SET new.f_int1 = @my_max1 + @counter,
18293
 
new.f_int2 = @my_min2 - @counter,
18294
 
new.f_charbig = '####updated per insert trigger####';
18295
 
SET @counter = @counter + 1;
18296
 
END|
18297
 
SET @counter = 1;
18298
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18299
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18300
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18301
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18302
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18303
 
ORDER BY f_int1;
18304
 
DROP TRIGGER trg_3;
18305
 
        
18306
 
# check trigger-11 success:     1
18307
 
DELETE FROM t1
18308
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18309
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18310
 
AND f_charbig = '####updated per insert trigger####';
18311
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18312
 
BEGIN
18313
 
SET new.f_int1 = @my_max1 + @counter,
18314
 
new.f_int2 = @my_min2 - @counter,
18315
 
new.f_charbig = '####updated per insert trigger####';
18316
 
SET @counter = @counter + 1;
18317
 
END|
18318
 
SET @counter = 1;
18319
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18320
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
18321
 
SELECT CAST(f_int1 AS CHAR),
18322
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18323
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18324
 
ORDER BY f_int1;
18325
 
DROP TRIGGER trg_3;
18326
 
        
18327
 
# check trigger-12 success:     1
18328
 
DELETE FROM t1
18329
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18330
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18331
 
AND f_charbig = '####updated per insert trigger####';
18332
 
ANALYZE  TABLE t1;
18333
 
Table   Op      Msg_type        Msg_text
18334
 
test.t1 analyze status  OK
18335
 
CHECK    TABLE t1 EXTENDED;
18336
 
Table   Op      Msg_type        Msg_text
18337
 
test.t1 check   status  OK
18338
 
CHECKSUM TABLE t1 EXTENDED;
18339
 
Table   Checksum
18340
 
test.t1 <some_value>
18341
 
OPTIMIZE TABLE t1;
18342
 
Table   Op      Msg_type        Msg_text
18343
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
18344
 
test.t1 optimize        status  OK
18345
 
# check layout success:    1
18346
 
REPAIR   TABLE t1 EXTENDED;
18347
 
Table   Op      Msg_type        Msg_text
18348
 
test.t1 repair  note    The storage engine for the table doesn't support repair
18349
 
# check layout success:    1
18350
 
TRUNCATE t1;
18351
 
        
18352
 
# check TRUNCATE success:       1
18353
 
# check layout success:    1
18354
 
# End usability test (inc/partition_check.inc)
18355
 
DROP TABLE t1;
18356
 
CREATE TABLE t1 (
18357
 
f_int1 INTEGER,
18358
 
f_int2 INTEGER,
18359
 
f_char1 CHAR(20),
18360
 
f_char2 CHAR(20),
18361
 
f_charbig VARCHAR(1000)
18362
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
18363
 
)
18364
 
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
18365
 
(PARTITION part1 VALUES IN (0)
18366
 
(SUBPARTITION sp11,
18367
 
SUBPARTITION sp12),
18368
 
PARTITION part2 VALUES IN (1)
18369
 
(SUBPARTITION sp21,
18370
 
SUBPARTITION sp22),
18371
 
PARTITION part3 VALUES IN (2)
18372
 
(SUBPARTITION sp31, 
18373
 
SUBPARTITION sp32),
18374
 
PARTITION part4 VALUES IN (NULL)
18375
 
(SUBPARTITION sp41,
18376
 
SUBPARTITION sp42));
18377
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18378
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
18379
 
# Start usability test (inc/partition_check.inc)
18380
 
create_command
18381
 
SHOW CREATE TABLE t1;
18382
 
Table   Create Table
18383
 
t1      CREATE TABLE `t1` (
18384
 
  `f_int1` int(11) DEFAULT NULL,
18385
 
  `f_int2` int(11) DEFAULT NULL,
18386
 
  `f_char1` char(20) DEFAULT NULL,
18387
 
  `f_char2` char(20) DEFAULT NULL,
18388
 
  `f_charbig` varchar(1000) DEFAULT NULL,
18389
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
18390
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
18391
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
18392
 
 
18393
 
unified filelist
18394
 
t1.frm
18395
 
t1.par
18396
 
 
18397
 
# check prerequisites-1 success:    1
18398
 
# check COUNT(*) success:    1
18399
 
# check MIN/MAX(f_int1) success:    1
18400
 
# check MIN/MAX(f_int2) success:    1
18401
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18402
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18403
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
18404
 
WHERE f_int1 IN (2,3);
18405
 
ERROR 23000: Can't write; duplicate key in table 't1'
18406
 
# check prerequisites-3 success:    1
18407
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
18408
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18409
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18410
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18411
 
WHERE f_int1 IN (2,3);
18412
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
18413
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18414
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18415
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18416
 
WHERE f_int1 IN (2,3);
18417
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
18418
 
# check read via f_int1 success: 1
18419
 
# check read via f_int2 success: 1
18420
 
        
18421
 
# check multiple-1 success:     1
18422
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
18423
 
        
18424
 
# check multiple-2 success:     1
18425
 
INSERT INTO t1 SELECT * FROM t0_template
18426
 
WHERE MOD(f_int1,3) = 0;
18427
 
        
18428
 
# check multiple-3 success:     1
18429
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
18430
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
18431
 
AND @max_row_div2 + @max_row_div4;
18432
 
        
18433
 
# check multiple-4 success:     1
18434
 
DELETE FROM t1
18435
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
18436
 
AND @max_row_div2 + @max_row_div4 + @max_row;
18437
 
        
18438
 
# check multiple-5 success:     1
18439
 
SELECT COUNT(*) INTO @try_count FROM t0_template
18440
 
WHERE MOD(f_int1,3) = 0
18441
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18442
 
SELECT COUNT(*) INTO @clash_count
18443
 
FROM t1 INNER JOIN t0_template USING(f_int1)
18444
 
WHERE MOD(f_int1,3) = 0
18445
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18446
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
18447
 
INSERT INTO t1
18448
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
18449
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18450
 
f_charbig = '#SINGLE#';
18451
 
        
18452
 
# check single-1 success:       1
18453
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
18454
 
INSERT INTO t1
18455
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
18456
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18457
 
f_charbig = '#SINGLE#';
18458
 
        
18459
 
# check single-2 success:       1
18460
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
18461
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
18462
 
UPDATE t1 SET f_int1 = @cur_value2
18463
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
18464
 
        
18465
 
# check single-3 success:       1
18466
 
SET @cur_value1= -1;
18467
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
18468
 
UPDATE t1 SET f_int1 = @cur_value1
18469
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
18470
 
        
18471
 
# check single-4 success:       1
18472
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
18473
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
18474
 
        
18475
 
# check single-5 success:       1
18476
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
18477
 
        
18478
 
# check single-6 success:       1
18479
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
18480
 
        
18481
 
# check single-7 success:       1
18482
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
18483
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
18484
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
18485
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
18486
 
f_charbig = '#NULL#';
18487
 
INSERT INTO t1
18488
 
SET f_int1 = NULL , f_int2 = -@max_row,
18489
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
18490
 
f_charbig = '#NULL#';
18491
 
# check null success:    1
18492
 
        
18493
 
# check null-1 success:         1
18494
 
UPDATE t1 SET f_int1 = -@max_row
18495
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18496
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18497
 
        
18498
 
# check null-2 success:         1
18499
 
UPDATE t1 SET f_int1 = NULL
18500
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18501
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18502
 
        
18503
 
# check null-3 success:         1
18504
 
DELETE FROM t1
18505
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18506
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18507
 
        
18508
 
# check null-4 success:         1
18509
 
DELETE FROM t1
18510
 
WHERE f_int1 = 0 AND f_int2 = 0
18511
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
18512
 
AND f_charbig = '#NULL#';
18513
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18514
 
SELECT f_int1, f_int1, '', '', 'was inserted'
18515
 
   FROM t0_template source_tab
18516
 
WHERE MOD(f_int1,3) = 0
18517
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
18518
 
ON DUPLICATE KEY
18519
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
18520
 
f_int2 = 2 * @max_row + source_tab.f_int1,
18521
 
f_charbig = 'was updated';
18522
 
        
18523
 
# check unique-1-a success:     1
18524
 
        
18525
 
# check unique-1-b success:     1
18526
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
18527
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18528
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18529
 
f_charbig = CONCAT('===',f_char1,'===')
18530
 
WHERE f_charbig = 'was updated';
18531
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18532
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
18533
 
   FROM t0_template source_tab
18534
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18535
 
        
18536
 
# check replace success:        1
18537
 
DELETE FROM t1
18538
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
18539
 
DELETE FROM t1
18540
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
18541
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
18542
 
UPDATE t1 SET f_int2 = f_int1,
18543
 
f_char1 = CAST(f_int1 AS CHAR),
18544
 
f_char2 = CAST(f_int1 AS CHAR),
18545
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
18546
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
18547
 
SET AUTOCOMMIT= 0;
18548
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18549
 
SELECT f_int1, f_int1, '', '', 'was inserted'
18550
 
FROM t0_template source_tab
18551
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18552
 
        
18553
 
# check transactions-1 success:         1
18554
 
COMMIT WORK;
18555
 
        
18556
 
# check transactions-2 success:         1
18557
 
ROLLBACK WORK;
18558
 
        
18559
 
# check transactions-3 success:         1
18560
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
18561
 
COMMIT WORK;
18562
 
ROLLBACK WORK;
18563
 
        
18564
 
# check transactions-4 success:         1
18565
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18566
 
SELECT f_int1, f_int1, '', '', 'was inserted'
18567
 
FROM t0_template source_tab
18568
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18569
 
        
18570
 
# check transactions-5 success:         1
18571
 
ROLLBACK WORK;
18572
 
        
18573
 
# check transactions-6 success:         1
18574
 
# INFO: Storage engine used for t1 seems to be transactional.
18575
 
COMMIT;
18576
 
        
18577
 
# check transactions-7 success:         1
18578
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
18579
 
COMMIT WORK;
18580
 
SET @@session.sql_mode = 'traditional';
18581
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
18582
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18583
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
18584
 
'', '', 'was inserted' FROM t0_template
18585
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18586
 
ERROR 22012: Division by 0
18587
 
COMMIT;
18588
 
        
18589
 
# check transactions-8 success:         1
18590
 
# INFO: Storage engine used for t1 seems to be able to revert
18591
 
#       changes made by the failing statement.
18592
 
SET @@session.sql_mode = '';
18593
 
SET AUTOCOMMIT= 1;
18594
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
18595
 
COMMIT WORK;
18596
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
18597
 
        
18598
 
# check special-1 success:      1
18599
 
UPDATE t1 SET f_charbig = '';
18600
 
        
18601
 
# check special-2 success:      1
18602
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
18603
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18604
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
18605
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18606
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18607
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18608
 
'just inserted' FROM t0_template
18609
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18610
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
18611
 
BEGIN
18612
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18613
 
f_charbig = 'updated by trigger'
18614
 
      WHERE f_int1 = new.f_int1;
18615
 
END|
18616
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18617
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18618
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18619
 
        
18620
 
# check trigger-1 success:      1
18621
 
DROP TRIGGER trg_1;
18622
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18623
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18624
 
f_charbig = 'just inserted'
18625
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18626
 
DELETE FROM t0_aux
18627
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18628
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18629
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18630
 
'just inserted' FROM t0_template
18631
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18632
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
18633
 
BEGIN
18634
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18635
 
f_charbig = 'updated by trigger'
18636
 
      WHERE f_int1 = new.f_int1;
18637
 
END|
18638
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18639
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18640
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18641
 
        
18642
 
# check trigger-2 success:      1
18643
 
DROP TRIGGER trg_1;
18644
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18645
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18646
 
f_charbig = 'just inserted'
18647
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18648
 
DELETE FROM t0_aux
18649
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18650
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18651
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18652
 
'just inserted' FROM t0_template
18653
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18654
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18655
 
BEGIN
18656
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18657
 
f_charbig = 'updated by trigger'
18658
 
      WHERE f_int1 = new.f_int1;
18659
 
END|
18660
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18661
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18662
 
        
18663
 
# check trigger-3 success:      1
18664
 
DROP TRIGGER trg_1;
18665
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18666
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18667
 
f_charbig = 'just inserted'
18668
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18669
 
DELETE FROM t0_aux
18670
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18671
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18672
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18673
 
'just inserted' FROM t0_template
18674
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18675
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18676
 
BEGIN
18677
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18678
 
f_charbig = 'updated by trigger'
18679
 
      WHERE f_int1 = - old.f_int1;
18680
 
END|
18681
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18682
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18683
 
        
18684
 
# check trigger-4 success:      1
18685
 
DROP TRIGGER trg_1;
18686
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18687
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18688
 
f_charbig = 'just inserted'
18689
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18690
 
DELETE FROM t0_aux
18691
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18692
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18693
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18694
 
'just inserted' FROM t0_template
18695
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18696
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18697
 
BEGIN
18698
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18699
 
f_charbig = 'updated by trigger'
18700
 
      WHERE f_int1 = new.f_int1;
18701
 
END|
18702
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18703
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18704
 
        
18705
 
# check trigger-5 success:      1
18706
 
DROP TRIGGER trg_1;
18707
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18708
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18709
 
f_charbig = 'just inserted'
18710
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18711
 
DELETE FROM t0_aux
18712
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18713
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18714
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18715
 
'just inserted' FROM t0_template
18716
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18717
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18718
 
BEGIN
18719
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18720
 
f_charbig = 'updated by trigger'
18721
 
      WHERE f_int1 = - old.f_int1;
18722
 
END|
18723
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18724
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18725
 
        
18726
 
# check trigger-6 success:      1
18727
 
DROP TRIGGER trg_1;
18728
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18729
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18730
 
f_charbig = 'just inserted'
18731
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18732
 
DELETE FROM t0_aux
18733
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18734
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18735
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18736
 
'just inserted' FROM t0_template
18737
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18738
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
18739
 
BEGIN
18740
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18741
 
f_charbig = 'updated by trigger'
18742
 
      WHERE f_int1 = - old.f_int1;
18743
 
END|
18744
 
DELETE FROM t0_aux
18745
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18746
 
        
18747
 
# check trigger-7 success:      1
18748
 
DROP TRIGGER trg_1;
18749
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18750
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18751
 
f_charbig = 'just inserted'
18752
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18753
 
DELETE FROM t0_aux
18754
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18755
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18756
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18757
 
'just inserted' FROM t0_template
18758
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18759
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
18760
 
BEGIN
18761
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18762
 
f_charbig = 'updated by trigger'
18763
 
      WHERE f_int1 = - old.f_int1;
18764
 
END|
18765
 
DELETE FROM t0_aux
18766
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18767
 
        
18768
 
# check trigger-8 success:      1
18769
 
DROP TRIGGER trg_1;
18770
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18771
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18772
 
f_charbig = 'just inserted'
18773
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18774
 
DELETE FROM t0_aux
18775
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18776
 
DELETE FROM t1
18777
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18778
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18779
 
BEGIN
18780
 
SET new.f_int1 = old.f_int1 + @max_row,
18781
 
new.f_int2 = old.f_int2 - @max_row,
18782
 
new.f_charbig = '####updated per update trigger####';
18783
 
END|
18784
 
UPDATE t1
18785
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18786
 
f_charbig = '####updated per update statement itself####';
18787
 
        
18788
 
# check trigger-9 success:      1
18789
 
DROP TRIGGER trg_2;
18790
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18791
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18792
 
f_charbig = CONCAT('===',f_char1,'===');
18793
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18794
 
BEGIN
18795
 
SET new.f_int1 = new.f_int1 + @max_row,
18796
 
new.f_int2 = new.f_int2 - @max_row,
18797
 
new.f_charbig = '####updated per update trigger####';
18798
 
END|
18799
 
UPDATE t1
18800
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18801
 
f_charbig = '####updated per update statement itself####';
18802
 
        
18803
 
# check trigger-10 success:     1
18804
 
DROP TRIGGER trg_2;
18805
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18806
 
f_int2 = CAST(f_char1 AS SIGNED INT),
18807
 
f_charbig = CONCAT('===',f_char1,'===');
18808
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18809
 
BEGIN
18810
 
SET new.f_int1 = @my_max1 + @counter,
18811
 
new.f_int2 = @my_min2 - @counter,
18812
 
new.f_charbig = '####updated per insert trigger####';
18813
 
SET @counter = @counter + 1;
18814
 
END|
18815
 
SET @counter = 1;
18816
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18817
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18818
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18819
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18820
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18821
 
ORDER BY f_int1;
18822
 
DROP TRIGGER trg_3;
18823
 
        
18824
 
# check trigger-11 success:     1
18825
 
DELETE FROM t1
18826
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18827
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18828
 
AND f_charbig = '####updated per insert trigger####';
18829
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18830
 
BEGIN
18831
 
SET new.f_int1 = @my_max1 + @counter,
18832
 
new.f_int2 = @my_min2 - @counter,
18833
 
new.f_charbig = '####updated per insert trigger####';
18834
 
SET @counter = @counter + 1;
18835
 
END|
18836
 
SET @counter = 1;
18837
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18838
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
18839
 
SELECT CAST(f_int1 AS CHAR),
18840
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18841
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18842
 
ORDER BY f_int1;
18843
 
DROP TRIGGER trg_3;
18844
 
        
18845
 
# check trigger-12 success:     1
18846
 
DELETE FROM t1
18847
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18848
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18849
 
AND f_charbig = '####updated per insert trigger####';
18850
 
ANALYZE  TABLE t1;
18851
 
Table   Op      Msg_type        Msg_text
18852
 
test.t1 analyze status  OK
18853
 
CHECK    TABLE t1 EXTENDED;
18854
 
Table   Op      Msg_type        Msg_text
18855
 
test.t1 check   status  OK
18856
 
CHECKSUM TABLE t1 EXTENDED;
18857
 
Table   Checksum
18858
 
test.t1 <some_value>
18859
 
OPTIMIZE TABLE t1;
18860
 
Table   Op      Msg_type        Msg_text
18861
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
18862
 
test.t1 optimize        status  OK
18863
 
# check layout success:    1
18864
 
REPAIR   TABLE t1 EXTENDED;
18865
 
Table   Op      Msg_type        Msg_text
18866
 
test.t1 repair  note    The storage engine for the table doesn't support repair
18867
 
# check layout success:    1
18868
 
TRUNCATE t1;
18869
 
        
18870
 
# check TRUNCATE success:       1
18871
 
# check layout success:    1
18872
 
# End usability test (inc/partition_check.inc)
18873
 
DROP TABLE t1;
18874
 
CREATE TABLE t1 (
18875
 
f_int1 INTEGER,
18876
 
f_int2 INTEGER,
18877
 
f_char1 CHAR(20),
18878
 
f_char2 CHAR(20),
18879
 
f_charbig VARCHAR(1000)
18880
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
18881
 
)
18882
 
PARTITION BY LIST(ABS(MOD(f_int1,2)))
18883
 
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
18884
 
(PARTITION part1 VALUES IN (0),
18885
 
PARTITION part2 VALUES IN (1),
18886
 
PARTITION part3 VALUES IN (NULL));
18887
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18888
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
18889
 
# Start usability test (inc/partition_check.inc)
18890
 
create_command
18891
 
SHOW CREATE TABLE t1;
18892
 
Table   Create Table
18893
 
t1      CREATE TABLE `t1` (
18894
 
  `f_int1` int(11) DEFAULT NULL,
18895
 
  `f_int2` int(11) DEFAULT NULL,
18896
 
  `f_char1` char(20) DEFAULT NULL,
18897
 
  `f_char2` char(20) DEFAULT NULL,
18898
 
  `f_charbig` varchar(1000) DEFAULT NULL,
18899
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
18900
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
18901
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
7525
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
7526
/*!50100 PARTITION BY HASH (f_int1)
 
7527
PARTITIONS 2 */
 
7528
 
 
7529
unified filelist
 
7530
t1.frm
 
7531
t1.par
 
7532
 
 
7533
# check prerequisites-1 success:    1
 
7534
# check COUNT(*) success:    1
 
7535
# check MIN/MAX(f_int1) success:    1
 
7536
# check MIN/MAX(f_int2) success:    1
 
7537
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7538
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7539
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7540
WHERE f_int1 IN (2,3);
 
7541
ERROR 23000: Can't write; duplicate key in table 't1'
 
7542
# check prerequisites-3 success:    1
 
7543
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
7544
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7545
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7546
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7547
WHERE f_int1 IN (2,3);
 
7548
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7549
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7550
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
7551
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
7552
WHERE f_int1 IN (2,3);
 
7553
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7554
# check read via f_int1 success: 1
 
7555
# check read via f_int2 success: 1
 
7556
        
 
7557
# check multiple-1 success:     1
 
7558
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7559
        
 
7560
# check multiple-2 success:     1
 
7561
INSERT INTO t1 SELECT * FROM t0_template
 
7562
WHERE MOD(f_int1,3) = 0;
 
7563
        
 
7564
# check multiple-3 success:     1
 
7565
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7566
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7567
AND @max_row_div2 + @max_row_div4;
 
7568
        
 
7569
# check multiple-4 success:     1
 
7570
DELETE FROM t1
 
7571
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7572
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7573
        
 
7574
# check multiple-5 success:     1
 
7575
SELECT COUNT(*) INTO @try_count FROM t0_template
 
7576
WHERE MOD(f_int1,3) = 0
 
7577
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7578
SELECT COUNT(*) INTO @clash_count
 
7579
FROM t1 INNER JOIN t0_template USING(f_int1)
 
7580
WHERE MOD(f_int1,3) = 0
 
7581
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7582
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7583
INSERT INTO t1
 
7584
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7585
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7586
f_charbig = '#SINGLE#';
 
7587
        
 
7588
# check single-1 success:       1
 
7589
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7590
INSERT INTO t1
 
7591
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7592
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7593
f_charbig = '#SINGLE#';
 
7594
        
 
7595
# check single-2 success:       1
 
7596
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7597
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7598
UPDATE t1 SET f_int1 = @cur_value2
 
7599
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7600
        
 
7601
# check single-3 success:       1
 
7602
SET @cur_value1= -1;
 
7603
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7604
UPDATE t1 SET f_int1 = @cur_value1
 
7605
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7606
        
 
7607
# check single-4 success:       1
 
7608
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7609
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7610
        
 
7611
# check single-5 success:       1
 
7612
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7613
        
 
7614
# check single-6 success:       1
 
7615
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7616
        
 
7617
# check single-7 success:       1
 
7618
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7619
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7620
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7621
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7622
f_charbig = '#NULL#';
 
7623
INSERT INTO t1
 
7624
SET f_int1 = NULL , f_int2 = -@max_row,
 
7625
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7626
f_charbig = '#NULL#';
 
7627
ERROR 23000: Column 'f_int1' cannot be null
 
7628
# check null success:    1
 
7629
DELETE FROM t1
 
7630
WHERE f_int1 = 0 AND f_int2 = 0
 
7631
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7632
AND f_charbig = '#NULL#';
 
7633
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7634
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7635
   FROM t0_template source_tab
 
7636
WHERE MOD(f_int1,3) = 0
 
7637
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
7638
ON DUPLICATE KEY
 
7639
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
7640
f_int2 = 2 * @max_row + source_tab.f_int1,
 
7641
f_charbig = 'was updated';
 
7642
        
 
7643
# check unique-1-a success:     1
 
7644
        
 
7645
# check unique-1-b success:     1
 
7646
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7647
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7648
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7649
f_charbig = CONCAT('===',f_char1,'===')
 
7650
WHERE f_charbig = 'was updated';
 
7651
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7652
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
7653
   FROM t0_template source_tab
 
7654
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7655
        
 
7656
# check replace success:        1
 
7657
DELETE FROM t1
 
7658
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
7659
DELETE FROM t1
 
7660
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
7661
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
7662
UPDATE t1 SET f_int2 = f_int1,
 
7663
f_char1 = CAST(f_int1 AS CHAR),
 
7664
f_char2 = CAST(f_int1 AS CHAR),
 
7665
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
7666
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
7667
SET AUTOCOMMIT= 0;
 
7668
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7669
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7670
FROM t0_template source_tab
 
7671
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7672
        
 
7673
# check transactions-1 success:         1
 
7674
COMMIT WORK;
 
7675
        
 
7676
# check transactions-2 success:         1
 
7677
ROLLBACK WORK;
 
7678
        
 
7679
# check transactions-3 success:         1
 
7680
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7681
COMMIT WORK;
 
7682
ROLLBACK WORK;
 
7683
        
 
7684
# check transactions-4 success:         1
 
7685
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7686
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7687
FROM t0_template source_tab
 
7688
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7689
        
 
7690
# check transactions-5 success:         1
 
7691
ROLLBACK WORK;
 
7692
        
 
7693
# check transactions-6 success:         1
 
7694
# INFO: Storage engine used for t1 seems to be transactional.
 
7695
COMMIT;
 
7696
        
 
7697
# check transactions-7 success:         1
 
7698
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7699
COMMIT WORK;
 
7700
SET @@session.sql_mode = 'traditional';
 
7701
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7702
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7703
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7704
'', '', 'was inserted' FROM t0_template
 
7705
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7706
ERROR 22012: Division by 0
 
7707
COMMIT;
 
7708
        
 
7709
# check transactions-8 success:         1
 
7710
# INFO: Storage engine used for t1 seems to be able to revert
 
7711
#       changes made by the failing statement.
 
7712
SET @@session.sql_mode = '';
 
7713
SET AUTOCOMMIT= 1;
 
7714
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7715
COMMIT WORK;
 
7716
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7717
        
 
7718
# check special-1 success:      1
 
7719
UPDATE t1 SET f_charbig = '';
 
7720
        
 
7721
# check special-2 success:      1
 
7722
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7723
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7724
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7726
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7727
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7728
'just inserted' FROM t0_template
 
7729
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7730
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7731
BEGIN
 
7732
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7733
f_charbig = 'updated by trigger'
 
7734
      WHERE f_int1 = new.f_int1;
 
7735
END|
 
7736
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7737
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7738
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7739
        
 
7740
# check trigger-1 success:      1
 
7741
DROP TRIGGER trg_1;
 
7742
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7743
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7744
f_charbig = 'just inserted'
 
7745
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7746
DELETE FROM t0_aux
 
7747
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7748
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7749
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7750
'just inserted' FROM t0_template
 
7751
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7752
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7753
BEGIN
 
7754
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7755
f_charbig = 'updated by trigger'
 
7756
      WHERE f_int1 = new.f_int1;
 
7757
END|
 
7758
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7759
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7760
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7761
        
 
7762
# check trigger-2 success:      1
 
7763
DROP TRIGGER trg_1;
 
7764
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7765
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7766
f_charbig = 'just inserted'
 
7767
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7768
DELETE FROM t0_aux
 
7769
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7770
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7771
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7772
'just inserted' FROM t0_template
 
7773
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7774
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7775
BEGIN
 
7776
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7777
f_charbig = 'updated by trigger'
 
7778
      WHERE f_int1 = new.f_int1;
 
7779
END|
 
7780
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7781
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7782
        
 
7783
# check trigger-3 success:      1
 
7784
DROP TRIGGER trg_1;
 
7785
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7786
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7787
f_charbig = 'just inserted'
 
7788
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7789
DELETE FROM t0_aux
 
7790
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7791
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7792
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7793
'just inserted' FROM t0_template
 
7794
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7795
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7796
BEGIN
 
7797
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7798
f_charbig = 'updated by trigger'
 
7799
      WHERE f_int1 = - old.f_int1;
 
7800
END|
 
7801
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7802
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7803
        
 
7804
# check trigger-4 success:      1
 
7805
DROP TRIGGER trg_1;
 
7806
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7807
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7808
f_charbig = 'just inserted'
 
7809
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7810
DELETE FROM t0_aux
 
7811
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7812
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7813
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7814
'just inserted' FROM t0_template
 
7815
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7816
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7817
BEGIN
 
7818
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7819
f_charbig = 'updated by trigger'
 
7820
      WHERE f_int1 = new.f_int1;
 
7821
END|
 
7822
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7823
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7824
        
 
7825
# check trigger-5 success:      1
 
7826
DROP TRIGGER trg_1;
 
7827
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7828
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7829
f_charbig = 'just inserted'
 
7830
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7831
DELETE FROM t0_aux
 
7832
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7833
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7834
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7835
'just inserted' FROM t0_template
 
7836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7837
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7838
BEGIN
 
7839
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7840
f_charbig = 'updated by trigger'
 
7841
      WHERE f_int1 = - old.f_int1;
 
7842
END|
 
7843
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7844
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7845
        
 
7846
# check trigger-6 success:      1
 
7847
DROP TRIGGER trg_1;
 
7848
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7849
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7850
f_charbig = 'just inserted'
 
7851
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7852
DELETE FROM t0_aux
 
7853
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7854
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7855
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7856
'just inserted' FROM t0_template
 
7857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7858
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7859
BEGIN
 
7860
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7861
f_charbig = 'updated by trigger'
 
7862
      WHERE f_int1 = - old.f_int1;
 
7863
END|
 
7864
DELETE FROM t0_aux
 
7865
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7866
        
 
7867
# check trigger-7 success:      1
 
7868
DROP TRIGGER trg_1;
 
7869
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7870
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7871
f_charbig = 'just inserted'
 
7872
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7873
DELETE FROM t0_aux
 
7874
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7875
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7876
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7877
'just inserted' FROM t0_template
 
7878
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7879
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7880
BEGIN
 
7881
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7882
f_charbig = 'updated by trigger'
 
7883
      WHERE f_int1 = - old.f_int1;
 
7884
END|
 
7885
DELETE FROM t0_aux
 
7886
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7887
        
 
7888
# check trigger-8 success:      1
 
7889
DROP TRIGGER trg_1;
 
7890
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7891
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7892
f_charbig = 'just inserted'
 
7893
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7894
DELETE FROM t0_aux
 
7895
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7896
DELETE FROM t1
 
7897
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7898
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7899
BEGIN
 
7900
SET new.f_int1 = old.f_int1 + @max_row,
 
7901
new.f_int2 = old.f_int2 - @max_row,
 
7902
new.f_charbig = '####updated per update trigger####';
 
7903
END|
 
7904
UPDATE t1
 
7905
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7906
f_charbig = '####updated per update statement itself####';
 
7907
        
 
7908
# check trigger-9 success:      1
 
7909
DROP TRIGGER trg_2;
 
7910
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7911
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7912
f_charbig = CONCAT('===',f_char1,'===');
 
7913
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7914
BEGIN
 
7915
SET new.f_int1 = new.f_int1 + @max_row,
 
7916
new.f_int2 = new.f_int2 - @max_row,
 
7917
new.f_charbig = '####updated per update trigger####';
 
7918
END|
 
7919
UPDATE t1
 
7920
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7921
f_charbig = '####updated per update statement itself####';
 
7922
        
 
7923
# check trigger-10 success:     1
 
7924
DROP TRIGGER trg_2;
 
7925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7927
f_charbig = CONCAT('===',f_char1,'===');
 
7928
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7929
BEGIN
 
7930
SET new.f_int1 = @my_max1 + @counter,
 
7931
new.f_int2 = @my_min2 - @counter,
 
7932
new.f_charbig = '####updated per insert trigger####';
 
7933
SET @counter = @counter + 1;
 
7934
END|
 
7935
SET @counter = 1;
 
7936
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7937
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7938
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7939
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7940
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7941
ORDER BY f_int1;
 
7942
DROP TRIGGER trg_3;
 
7943
        
 
7944
# check trigger-11 success:     1
 
7945
DELETE FROM t1
 
7946
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7947
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7948
AND f_charbig = '####updated per insert trigger####';
 
7949
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7950
BEGIN
 
7951
SET new.f_int1 = @my_max1 + @counter,
 
7952
new.f_int2 = @my_min2 - @counter,
 
7953
new.f_charbig = '####updated per insert trigger####';
 
7954
SET @counter = @counter + 1;
 
7955
END|
 
7956
SET @counter = 1;
 
7957
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7958
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7959
SELECT CAST(f_int1 AS CHAR),
 
7960
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7961
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7962
ORDER BY f_int1;
 
7963
DROP TRIGGER trg_3;
 
7964
        
 
7965
# check trigger-12 success:     1
 
7966
DELETE FROM t1
 
7967
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7968
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7969
AND f_charbig = '####updated per insert trigger####';
 
7970
ANALYZE  TABLE t1;
 
7971
Table   Op      Msg_type        Msg_text
 
7972
test.t1 analyze status  OK
 
7973
CHECK    TABLE t1 EXTENDED;
 
7974
Table   Op      Msg_type        Msg_text
 
7975
test.t1 check   status  OK
 
7976
CHECKSUM TABLE t1 EXTENDED;
 
7977
Table   Checksum
 
7978
test.t1 <some_value>
 
7979
OPTIMIZE TABLE t1;
 
7980
Table   Op      Msg_type        Msg_text
 
7981
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
7982
test.t1 optimize        status  OK
 
7983
# check layout success:    1
 
7984
REPAIR   TABLE t1 EXTENDED;
 
7985
Table   Op      Msg_type        Msg_text
 
7986
test.t1 repair  note    The storage engine for the table doesn't support repair
 
7987
# check layout success:    1
 
7988
TRUNCATE t1;
 
7989
        
 
7990
# check TRUNCATE success:       1
 
7991
# check layout success:    1
 
7992
# End usability test (inc/partition_check.inc)
 
7993
DROP TABLE t1;
 
7994
CREATE TABLE t1 (
 
7995
f_int1 INTEGER,
 
7996
f_int2 INTEGER,
 
7997
f_char1 CHAR(20),
 
7998
f_char2 CHAR(20),
 
7999
f_charbig VARCHAR(1000)
 
8000
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
8001
)
 
8002
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
8003
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8004
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
8005
# Start usability test (inc/partition_check.inc)
 
8006
create_command
 
8007
SHOW CREATE TABLE t1;
 
8008
Table   Create Table
 
8009
t1      CREATE TABLE `t1` (
 
8010
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
8011
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
8012
  `f_char1` char(20) DEFAULT NULL,
 
8013
  `f_char2` char(20) DEFAULT NULL,
 
8014
  `f_charbig` varchar(1000) DEFAULT NULL,
 
8015
  PRIMARY KEY (`f_int2`,`f_int1`),
 
8016
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
8017
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
8018
/*!50100 PARTITION BY KEY (f_int1)
 
8019
PARTITIONS 5 */
 
8020
 
 
8021
unified filelist
 
8022
t1.frm
 
8023
t1.par
 
8024
 
 
8025
# check prerequisites-1 success:    1
 
8026
# check COUNT(*) success:    1
 
8027
# check MIN/MAX(f_int1) success:    1
 
8028
# check MIN/MAX(f_int2) success:    1
 
8029
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8030
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8031
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8032
WHERE f_int1 IN (2,3);
 
8033
ERROR 23000: Can't write; duplicate key in table 't1'
 
8034
# check prerequisites-3 success:    1
 
8035
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
8036
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8037
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8038
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8039
WHERE f_int1 IN (2,3);
 
8040
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8041
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8042
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8043
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8044
WHERE f_int1 IN (2,3);
 
8045
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8046
# check read via f_int1 success: 1
 
8047
# check read via f_int2 success: 1
 
8048
        
 
8049
# check multiple-1 success:     1
 
8050
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8051
        
 
8052
# check multiple-2 success:     1
 
8053
INSERT INTO t1 SELECT * FROM t0_template
 
8054
WHERE MOD(f_int1,3) = 0;
 
8055
        
 
8056
# check multiple-3 success:     1
 
8057
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8058
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8059
AND @max_row_div2 + @max_row_div4;
 
8060
        
 
8061
# check multiple-4 success:     1
 
8062
DELETE FROM t1
 
8063
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8064
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8065
        
 
8066
# check multiple-5 success:     1
 
8067
SELECT COUNT(*) INTO @try_count FROM t0_template
 
8068
WHERE MOD(f_int1,3) = 0
 
8069
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8070
SELECT COUNT(*) INTO @clash_count
 
8071
FROM t1 INNER JOIN t0_template USING(f_int1)
 
8072
WHERE MOD(f_int1,3) = 0
 
8073
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8074
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8075
INSERT INTO t1
 
8076
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8077
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8078
f_charbig = '#SINGLE#';
 
8079
        
 
8080
# check single-1 success:       1
 
8081
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8082
INSERT INTO t1
 
8083
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8084
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8085
f_charbig = '#SINGLE#';
 
8086
        
 
8087
# check single-2 success:       1
 
8088
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8089
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8090
UPDATE t1 SET f_int1 = @cur_value2
 
8091
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8092
        
 
8093
# check single-3 success:       1
 
8094
SET @cur_value1= -1;
 
8095
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8096
UPDATE t1 SET f_int1 = @cur_value1
 
8097
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8098
        
 
8099
# check single-4 success:       1
 
8100
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8101
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8102
        
 
8103
# check single-5 success:       1
 
8104
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8105
        
 
8106
# check single-6 success:       1
 
8107
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8108
        
 
8109
# check single-7 success:       1
 
8110
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8111
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8112
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8113
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8114
f_charbig = '#NULL#';
 
8115
INSERT INTO t1
 
8116
SET f_int1 = NULL , f_int2 = -@max_row,
 
8117
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8118
f_charbig = '#NULL#';
 
8119
ERROR 23000: Column 'f_int1' cannot be null
 
8120
# check null success:    1
 
8121
DELETE FROM t1
 
8122
WHERE f_int1 = 0 AND f_int2 = 0
 
8123
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8124
AND f_charbig = '#NULL#';
 
8125
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8126
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8127
   FROM t0_template source_tab
 
8128
WHERE MOD(f_int1,3) = 0
 
8129
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
8130
ON DUPLICATE KEY
 
8131
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
8132
f_int2 = 2 * @max_row + source_tab.f_int1,
 
8133
f_charbig = 'was updated';
 
8134
        
 
8135
# check unique-1-a success:     1
 
8136
        
 
8137
# check unique-1-b success:     1
 
8138
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8139
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8140
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8141
f_charbig = CONCAT('===',f_char1,'===')
 
8142
WHERE f_charbig = 'was updated';
 
8143
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8144
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
8145
   FROM t0_template source_tab
 
8146
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8147
        
 
8148
# check replace success:        1
 
8149
DELETE FROM t1
 
8150
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
8151
DELETE FROM t1
 
8152
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
8153
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
8154
UPDATE t1 SET f_int2 = f_int1,
 
8155
f_char1 = CAST(f_int1 AS CHAR),
 
8156
f_char2 = CAST(f_int1 AS CHAR),
 
8157
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
8158
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
8159
SET AUTOCOMMIT= 0;
 
8160
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8161
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8162
FROM t0_template source_tab
 
8163
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8164
        
 
8165
# check transactions-1 success:         1
 
8166
COMMIT WORK;
 
8167
        
 
8168
# check transactions-2 success:         1
 
8169
ROLLBACK WORK;
 
8170
        
 
8171
# check transactions-3 success:         1
 
8172
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8173
COMMIT WORK;
 
8174
ROLLBACK WORK;
 
8175
        
 
8176
# check transactions-4 success:         1
 
8177
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8178
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8179
FROM t0_template source_tab
 
8180
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8181
        
 
8182
# check transactions-5 success:         1
 
8183
ROLLBACK WORK;
 
8184
        
 
8185
# check transactions-6 success:         1
 
8186
# INFO: Storage engine used for t1 seems to be transactional.
 
8187
COMMIT;
 
8188
        
 
8189
# check transactions-7 success:         1
 
8190
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8191
COMMIT WORK;
 
8192
SET @@session.sql_mode = 'traditional';
 
8193
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8194
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8195
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8196
'', '', 'was inserted' FROM t0_template
 
8197
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8198
ERROR 22012: Division by 0
 
8199
COMMIT;
 
8200
        
 
8201
# check transactions-8 success:         1
 
8202
# INFO: Storage engine used for t1 seems to be able to revert
 
8203
#       changes made by the failing statement.
 
8204
SET @@session.sql_mode = '';
 
8205
SET AUTOCOMMIT= 1;
 
8206
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8207
COMMIT WORK;
 
8208
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8209
        
 
8210
# check special-1 success:      1
 
8211
UPDATE t1 SET f_charbig = '';
 
8212
        
 
8213
# check special-2 success:      1
 
8214
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8215
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8216
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8217
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8218
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8219
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8220
'just inserted' FROM t0_template
 
8221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8222
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8223
BEGIN
 
8224
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8225
f_charbig = 'updated by trigger'
 
8226
      WHERE f_int1 = new.f_int1;
 
8227
END|
 
8228
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8229
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8230
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8231
        
 
8232
# check trigger-1 success:      1
 
8233
DROP TRIGGER trg_1;
 
8234
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8235
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8236
f_charbig = 'just inserted'
 
8237
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8238
DELETE FROM t0_aux
 
8239
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8240
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8241
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8242
'just inserted' FROM t0_template
 
8243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8244
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8245
BEGIN
 
8246
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8247
f_charbig = 'updated by trigger'
 
8248
      WHERE f_int1 = new.f_int1;
 
8249
END|
 
8250
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8251
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8253
        
 
8254
# check trigger-2 success:      1
 
8255
DROP TRIGGER trg_1;
 
8256
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8257
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8258
f_charbig = 'just inserted'
 
8259
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8260
DELETE FROM t0_aux
 
8261
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8262
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8263
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8264
'just inserted' FROM t0_template
 
8265
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8266
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8267
BEGIN
 
8268
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8269
f_charbig = 'updated by trigger'
 
8270
      WHERE f_int1 = new.f_int1;
 
8271
END|
 
8272
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8273
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8274
        
 
8275
# check trigger-3 success:      1
 
8276
DROP TRIGGER trg_1;
 
8277
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8278
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8279
f_charbig = 'just inserted'
 
8280
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8281
DELETE FROM t0_aux
 
8282
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8283
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8284
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8285
'just inserted' FROM t0_template
 
8286
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8287
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8288
BEGIN
 
8289
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8290
f_charbig = 'updated by trigger'
 
8291
      WHERE f_int1 = - old.f_int1;
 
8292
END|
 
8293
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8294
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8295
        
 
8296
# check trigger-4 success:      1
 
8297
DROP TRIGGER trg_1;
 
8298
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8299
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8300
f_charbig = 'just inserted'
 
8301
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8302
DELETE FROM t0_aux
 
8303
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8304
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8305
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8306
'just inserted' FROM t0_template
 
8307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8308
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8309
BEGIN
 
8310
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8311
f_charbig = 'updated by trigger'
 
8312
      WHERE f_int1 = new.f_int1;
 
8313
END|
 
8314
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8315
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8316
        
 
8317
# check trigger-5 success:      1
 
8318
DROP TRIGGER trg_1;
 
8319
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8320
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8321
f_charbig = 'just inserted'
 
8322
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8323
DELETE FROM t0_aux
 
8324
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8325
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8326
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8327
'just inserted' FROM t0_template
 
8328
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8329
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8330
BEGIN
 
8331
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8332
f_charbig = 'updated by trigger'
 
8333
      WHERE f_int1 = - old.f_int1;
 
8334
END|
 
8335
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8336
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8337
        
 
8338
# check trigger-6 success:      1
 
8339
DROP TRIGGER trg_1;
 
8340
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8341
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8342
f_charbig = 'just inserted'
 
8343
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8344
DELETE FROM t0_aux
 
8345
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8346
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8347
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8348
'just inserted' FROM t0_template
 
8349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8350
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8351
BEGIN
 
8352
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8353
f_charbig = 'updated by trigger'
 
8354
      WHERE f_int1 = - old.f_int1;
 
8355
END|
 
8356
DELETE FROM t0_aux
 
8357
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8358
        
 
8359
# check trigger-7 success:      1
 
8360
DROP TRIGGER trg_1;
 
8361
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8362
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8363
f_charbig = 'just inserted'
 
8364
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8365
DELETE FROM t0_aux
 
8366
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8367
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8368
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8369
'just inserted' FROM t0_template
 
8370
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8371
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8372
BEGIN
 
8373
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8374
f_charbig = 'updated by trigger'
 
8375
      WHERE f_int1 = - old.f_int1;
 
8376
END|
 
8377
DELETE FROM t0_aux
 
8378
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8379
        
 
8380
# check trigger-8 success:      1
 
8381
DROP TRIGGER trg_1;
 
8382
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8383
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8384
f_charbig = 'just inserted'
 
8385
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8386
DELETE FROM t0_aux
 
8387
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8388
DELETE FROM t1
 
8389
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8390
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8391
BEGIN
 
8392
SET new.f_int1 = old.f_int1 + @max_row,
 
8393
new.f_int2 = old.f_int2 - @max_row,
 
8394
new.f_charbig = '####updated per update trigger####';
 
8395
END|
 
8396
UPDATE t1
 
8397
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8398
f_charbig = '####updated per update statement itself####';
 
8399
        
 
8400
# check trigger-9 success:      1
 
8401
DROP TRIGGER trg_2;
 
8402
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8403
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8404
f_charbig = CONCAT('===',f_char1,'===');
 
8405
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8406
BEGIN
 
8407
SET new.f_int1 = new.f_int1 + @max_row,
 
8408
new.f_int2 = new.f_int2 - @max_row,
 
8409
new.f_charbig = '####updated per update trigger####';
 
8410
END|
 
8411
UPDATE t1
 
8412
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8413
f_charbig = '####updated per update statement itself####';
 
8414
        
 
8415
# check trigger-10 success:     1
 
8416
DROP TRIGGER trg_2;
 
8417
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8418
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8419
f_charbig = CONCAT('===',f_char1,'===');
 
8420
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8421
BEGIN
 
8422
SET new.f_int1 = @my_max1 + @counter,
 
8423
new.f_int2 = @my_min2 - @counter,
 
8424
new.f_charbig = '####updated per insert trigger####';
 
8425
SET @counter = @counter + 1;
 
8426
END|
 
8427
SET @counter = 1;
 
8428
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8429
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8430
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8431
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8433
ORDER BY f_int1;
 
8434
DROP TRIGGER trg_3;
 
8435
        
 
8436
# check trigger-11 success:     1
 
8437
DELETE FROM t1
 
8438
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8439
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8440
AND f_charbig = '####updated per insert trigger####';
 
8441
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8442
BEGIN
 
8443
SET new.f_int1 = @my_max1 + @counter,
 
8444
new.f_int2 = @my_min2 - @counter,
 
8445
new.f_charbig = '####updated per insert trigger####';
 
8446
SET @counter = @counter + 1;
 
8447
END|
 
8448
SET @counter = 1;
 
8449
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8450
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8451
SELECT CAST(f_int1 AS CHAR),
 
8452
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8454
ORDER BY f_int1;
 
8455
DROP TRIGGER trg_3;
 
8456
        
 
8457
# check trigger-12 success:     1
 
8458
DELETE FROM t1
 
8459
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8460
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8461
AND f_charbig = '####updated per insert trigger####';
 
8462
ANALYZE  TABLE t1;
 
8463
Table   Op      Msg_type        Msg_text
 
8464
test.t1 analyze status  OK
 
8465
CHECK    TABLE t1 EXTENDED;
 
8466
Table   Op      Msg_type        Msg_text
 
8467
test.t1 check   status  OK
 
8468
CHECKSUM TABLE t1 EXTENDED;
 
8469
Table   Checksum
 
8470
test.t1 <some_value>
 
8471
OPTIMIZE TABLE t1;
 
8472
Table   Op      Msg_type        Msg_text
 
8473
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
8474
test.t1 optimize        status  OK
 
8475
# check layout success:    1
 
8476
REPAIR   TABLE t1 EXTENDED;
 
8477
Table   Op      Msg_type        Msg_text
 
8478
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8479
# check layout success:    1
 
8480
TRUNCATE t1;
 
8481
        
 
8482
# check TRUNCATE success:       1
 
8483
# check layout success:    1
 
8484
# End usability test (inc/partition_check.inc)
 
8485
DROP TABLE t1;
 
8486
CREATE TABLE t1 (
 
8487
f_int1 INTEGER,
 
8488
f_int2 INTEGER,
 
8489
f_char1 CHAR(20),
 
8490
f_char2 CHAR(20),
 
8491
f_charbig VARCHAR(1000)
 
8492
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
8493
)
 
8494
PARTITION BY LIST(MOD(f_int1,4))
 
8495
(PARTITION part_3 VALUES IN (-3),
 
8496
PARTITION part_2 VALUES IN (-2),
 
8497
PARTITION part_1 VALUES IN (-1),
 
8498
PARTITION part_N VALUES IN (NULL),
 
8499
PARTITION part0 VALUES IN (0),
 
8500
PARTITION part1 VALUES IN (1),
 
8501
PARTITION part2 VALUES IN (2),
 
8502
PARTITION part3 VALUES IN (3));
 
8503
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8504
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
8505
# Start usability test (inc/partition_check.inc)
 
8506
create_command
 
8507
SHOW CREATE TABLE t1;
 
8508
Table   Create Table
 
8509
t1      CREATE TABLE `t1` (
 
8510
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
8511
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
8512
  `f_char1` char(20) DEFAULT NULL,
 
8513
  `f_char2` char(20) DEFAULT NULL,
 
8514
  `f_charbig` varchar(1000) DEFAULT NULL,
 
8515
  PRIMARY KEY (`f_int2`,`f_int1`),
 
8516
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
8517
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
8518
/*!50100 PARTITION BY LIST (MOD(f_int1,4))
 
8519
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
8520
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
8521
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
8522
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
8523
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
8524
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
8525
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
8526
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
8527
 
 
8528
unified filelist
 
8529
t1.frm
 
8530
t1.par
 
8531
 
 
8532
# check prerequisites-1 success:    1
 
8533
# check COUNT(*) success:    1
 
8534
# check MIN/MAX(f_int1) success:    1
 
8535
# check MIN/MAX(f_int2) success:    1
 
8536
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8537
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8538
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8539
WHERE f_int1 IN (2,3);
 
8540
ERROR 23000: Can't write; duplicate key in table 't1'
 
8541
# check prerequisites-3 success:    1
 
8542
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
8543
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8544
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8545
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8546
WHERE f_int1 IN (2,3);
 
8547
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8548
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8549
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
8550
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
8551
WHERE f_int1 IN (2,3);
 
8552
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8553
# check read via f_int1 success: 1
 
8554
# check read via f_int2 success: 1
 
8555
        
 
8556
# check multiple-1 success:     1
 
8557
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8558
        
 
8559
# check multiple-2 success:     1
 
8560
INSERT INTO t1 SELECT * FROM t0_template
 
8561
WHERE MOD(f_int1,3) = 0;
 
8562
        
 
8563
# check multiple-3 success:     1
 
8564
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8565
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8566
AND @max_row_div2 + @max_row_div4;
 
8567
        
 
8568
# check multiple-4 success:     1
 
8569
DELETE FROM t1
 
8570
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8571
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8572
        
 
8573
# check multiple-5 success:     1
 
8574
SELECT COUNT(*) INTO @try_count FROM t0_template
 
8575
WHERE MOD(f_int1,3) = 0
 
8576
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8577
SELECT COUNT(*) INTO @clash_count
 
8578
FROM t1 INNER JOIN t0_template USING(f_int1)
 
8579
WHERE MOD(f_int1,3) = 0
 
8580
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8581
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8582
INSERT INTO t1
 
8583
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8584
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8585
f_charbig = '#SINGLE#';
 
8586
        
 
8587
# check single-1 success:       1
 
8588
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8589
INSERT INTO t1
 
8590
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8591
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8592
f_charbig = '#SINGLE#';
 
8593
        
 
8594
# check single-2 success:       1
 
8595
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8596
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8597
UPDATE t1 SET f_int1 = @cur_value2
 
8598
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8599
        
 
8600
# check single-3 success:       1
 
8601
SET @cur_value1= -1;
 
8602
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8603
UPDATE t1 SET f_int1 = @cur_value1
 
8604
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8605
        
 
8606
# check single-4 success:       1
 
8607
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8608
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8609
        
 
8610
# check single-5 success:       1
 
8611
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8612
        
 
8613
# check single-6 success:       1
 
8614
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8615
        
 
8616
# check single-7 success:       1
 
8617
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8618
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8619
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8620
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8621
f_charbig = '#NULL#';
 
8622
INSERT INTO t1
 
8623
SET f_int1 = NULL , f_int2 = -@max_row,
 
8624
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8625
f_charbig = '#NULL#';
 
8626
ERROR 23000: Column 'f_int1' cannot be null
 
8627
# check null success:    1
 
8628
DELETE FROM t1
 
8629
WHERE f_int1 = 0 AND f_int2 = 0
 
8630
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8631
AND f_charbig = '#NULL#';
 
8632
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8633
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8634
   FROM t0_template source_tab
 
8635
WHERE MOD(f_int1,3) = 0
 
8636
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
8637
ON DUPLICATE KEY
 
8638
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
8639
f_int2 = 2 * @max_row + source_tab.f_int1,
 
8640
f_charbig = 'was updated';
 
8641
        
 
8642
# check unique-1-a success:     1
 
8643
        
 
8644
# check unique-1-b success:     1
 
8645
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8646
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8647
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8648
f_charbig = CONCAT('===',f_char1,'===')
 
8649
WHERE f_charbig = 'was updated';
 
8650
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8651
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
8652
   FROM t0_template source_tab
 
8653
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8654
        
 
8655
# check replace success:        1
 
8656
DELETE FROM t1
 
8657
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
8658
DELETE FROM t1
 
8659
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
8660
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
8661
UPDATE t1 SET f_int2 = f_int1,
 
8662
f_char1 = CAST(f_int1 AS CHAR),
 
8663
f_char2 = CAST(f_int1 AS CHAR),
 
8664
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
8665
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
8666
SET AUTOCOMMIT= 0;
 
8667
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8668
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8669
FROM t0_template source_tab
 
8670
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8671
        
 
8672
# check transactions-1 success:         1
 
8673
COMMIT WORK;
 
8674
        
 
8675
# check transactions-2 success:         1
 
8676
ROLLBACK WORK;
 
8677
        
 
8678
# check transactions-3 success:         1
 
8679
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8680
COMMIT WORK;
 
8681
ROLLBACK WORK;
 
8682
        
 
8683
# check transactions-4 success:         1
 
8684
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8685
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8686
FROM t0_template source_tab
 
8687
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8688
        
 
8689
# check transactions-5 success:         1
 
8690
ROLLBACK WORK;
 
8691
        
 
8692
# check transactions-6 success:         1
 
8693
# INFO: Storage engine used for t1 seems to be transactional.
 
8694
COMMIT;
 
8695
        
 
8696
# check transactions-7 success:         1
 
8697
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8698
COMMIT WORK;
 
8699
SET @@session.sql_mode = 'traditional';
 
8700
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8701
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8702
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8703
'', '', 'was inserted' FROM t0_template
 
8704
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8705
ERROR 22012: Division by 0
 
8706
COMMIT;
 
8707
        
 
8708
# check transactions-8 success:         1
 
8709
# INFO: Storage engine used for t1 seems to be able to revert
 
8710
#       changes made by the failing statement.
 
8711
SET @@session.sql_mode = '';
 
8712
SET AUTOCOMMIT= 1;
 
8713
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8714
COMMIT WORK;
 
8715
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8716
        
 
8717
# check special-1 success:      1
 
8718
UPDATE t1 SET f_charbig = '';
 
8719
        
 
8720
# check special-2 success:      1
 
8721
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8722
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8723
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8724
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8725
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8726
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8727
'just inserted' FROM t0_template
 
8728
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8729
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8730
BEGIN
 
8731
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8732
f_charbig = 'updated by trigger'
 
8733
      WHERE f_int1 = new.f_int1;
 
8734
END|
 
8735
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8736
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8738
        
 
8739
# check trigger-1 success:      1
 
8740
DROP TRIGGER trg_1;
 
8741
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8742
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8743
f_charbig = 'just inserted'
 
8744
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8745
DELETE FROM t0_aux
 
8746
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8747
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8748
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8749
'just inserted' FROM t0_template
 
8750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8751
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8752
BEGIN
 
8753
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8754
f_charbig = 'updated by trigger'
 
8755
      WHERE f_int1 = new.f_int1;
 
8756
END|
 
8757
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8758
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8759
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8760
        
 
8761
# check trigger-2 success:      1
 
8762
DROP TRIGGER trg_1;
 
8763
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8764
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8765
f_charbig = 'just inserted'
 
8766
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8767
DELETE FROM t0_aux
 
8768
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8769
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8770
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8771
'just inserted' FROM t0_template
 
8772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8773
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8774
BEGIN
 
8775
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8776
f_charbig = 'updated by trigger'
 
8777
      WHERE f_int1 = new.f_int1;
 
8778
END|
 
8779
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8780
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8781
        
 
8782
# check trigger-3 success:      1
 
8783
DROP TRIGGER trg_1;
 
8784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8786
f_charbig = 'just inserted'
 
8787
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8788
DELETE FROM t0_aux
 
8789
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8790
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8791
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8792
'just inserted' FROM t0_template
 
8793
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8794
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8795
BEGIN
 
8796
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8797
f_charbig = 'updated by trigger'
 
8798
      WHERE f_int1 = - old.f_int1;
 
8799
END|
 
8800
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8801
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8802
        
 
8803
# check trigger-4 success:      1
 
8804
DROP TRIGGER trg_1;
 
8805
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8806
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8807
f_charbig = 'just inserted'
 
8808
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8809
DELETE FROM t0_aux
 
8810
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8811
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8812
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8813
'just inserted' FROM t0_template
 
8814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8815
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8816
BEGIN
 
8817
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8818
f_charbig = 'updated by trigger'
 
8819
      WHERE f_int1 = new.f_int1;
 
8820
END|
 
8821
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8822
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8823
        
 
8824
# check trigger-5 success:      1
 
8825
DROP TRIGGER trg_1;
 
8826
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8827
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8828
f_charbig = 'just inserted'
 
8829
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8830
DELETE FROM t0_aux
 
8831
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8832
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8833
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8834
'just inserted' FROM t0_template
 
8835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8836
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8837
BEGIN
 
8838
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8839
f_charbig = 'updated by trigger'
 
8840
      WHERE f_int1 = - old.f_int1;
 
8841
END|
 
8842
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8843
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8844
        
 
8845
# check trigger-6 success:      1
 
8846
DROP TRIGGER trg_1;
 
8847
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8848
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8849
f_charbig = 'just inserted'
 
8850
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8851
DELETE FROM t0_aux
 
8852
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8853
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8854
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8855
'just inserted' FROM t0_template
 
8856
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8857
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8858
BEGIN
 
8859
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8860
f_charbig = 'updated by trigger'
 
8861
      WHERE f_int1 = - old.f_int1;
 
8862
END|
 
8863
DELETE FROM t0_aux
 
8864
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8865
        
 
8866
# check trigger-7 success:      1
 
8867
DROP TRIGGER trg_1;
 
8868
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8869
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8870
f_charbig = 'just inserted'
 
8871
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8872
DELETE FROM t0_aux
 
8873
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8874
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8875
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8876
'just inserted' FROM t0_template
 
8877
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8878
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8879
BEGIN
 
8880
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8881
f_charbig = 'updated by trigger'
 
8882
      WHERE f_int1 = - old.f_int1;
 
8883
END|
 
8884
DELETE FROM t0_aux
 
8885
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8886
        
 
8887
# check trigger-8 success:      1
 
8888
DROP TRIGGER trg_1;
 
8889
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8890
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8891
f_charbig = 'just inserted'
 
8892
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8893
DELETE FROM t0_aux
 
8894
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8895
DELETE FROM t1
 
8896
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8897
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8898
BEGIN
 
8899
SET new.f_int1 = old.f_int1 + @max_row,
 
8900
new.f_int2 = old.f_int2 - @max_row,
 
8901
new.f_charbig = '####updated per update trigger####';
 
8902
END|
 
8903
UPDATE t1
 
8904
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8905
f_charbig = '####updated per update statement itself####';
 
8906
        
 
8907
# check trigger-9 success:      1
 
8908
DROP TRIGGER trg_2;
 
8909
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8910
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8911
f_charbig = CONCAT('===',f_char1,'===');
 
8912
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8913
BEGIN
 
8914
SET new.f_int1 = new.f_int1 + @max_row,
 
8915
new.f_int2 = new.f_int2 - @max_row,
 
8916
new.f_charbig = '####updated per update trigger####';
 
8917
END|
 
8918
UPDATE t1
 
8919
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8920
f_charbig = '####updated per update statement itself####';
 
8921
        
 
8922
# check trigger-10 success:     1
 
8923
DROP TRIGGER trg_2;
 
8924
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8925
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8926
f_charbig = CONCAT('===',f_char1,'===');
 
8927
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8928
BEGIN
 
8929
SET new.f_int1 = @my_max1 + @counter,
 
8930
new.f_int2 = @my_min2 - @counter,
 
8931
new.f_charbig = '####updated per insert trigger####';
 
8932
SET @counter = @counter + 1;
 
8933
END|
 
8934
SET @counter = 1;
 
8935
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8936
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8937
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8938
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8939
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8940
ORDER BY f_int1;
 
8941
DROP TRIGGER trg_3;
 
8942
        
 
8943
# check trigger-11 success:     1
 
8944
DELETE FROM t1
 
8945
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8946
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8947
AND f_charbig = '####updated per insert trigger####';
 
8948
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8949
BEGIN
 
8950
SET new.f_int1 = @my_max1 + @counter,
 
8951
new.f_int2 = @my_min2 - @counter,
 
8952
new.f_charbig = '####updated per insert trigger####';
 
8953
SET @counter = @counter + 1;
 
8954
END|
 
8955
SET @counter = 1;
 
8956
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8957
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8958
SELECT CAST(f_int1 AS CHAR),
 
8959
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8960
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8961
ORDER BY f_int1;
 
8962
DROP TRIGGER trg_3;
 
8963
        
 
8964
# check trigger-12 success:     1
 
8965
DELETE FROM t1
 
8966
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8967
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8968
AND f_charbig = '####updated per insert trigger####';
 
8969
ANALYZE  TABLE t1;
 
8970
Table   Op      Msg_type        Msg_text
 
8971
test.t1 analyze status  OK
 
8972
CHECK    TABLE t1 EXTENDED;
 
8973
Table   Op      Msg_type        Msg_text
 
8974
test.t1 check   status  OK
 
8975
CHECKSUM TABLE t1 EXTENDED;
 
8976
Table   Checksum
 
8977
test.t1 <some_value>
 
8978
OPTIMIZE TABLE t1;
 
8979
Table   Op      Msg_type        Msg_text
 
8980
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
8981
test.t1 optimize        status  OK
 
8982
# check layout success:    1
 
8983
REPAIR   TABLE t1 EXTENDED;
 
8984
Table   Op      Msg_type        Msg_text
 
8985
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8986
# check layout success:    1
 
8987
TRUNCATE t1;
 
8988
        
 
8989
# check TRUNCATE success:       1
 
8990
# check layout success:    1
 
8991
# End usability test (inc/partition_check.inc)
 
8992
DROP TABLE t1;
 
8993
CREATE TABLE t1 (
 
8994
f_int1 INTEGER,
 
8995
f_int2 INTEGER,
 
8996
f_char1 CHAR(20),
 
8997
f_char2 CHAR(20),
 
8998
f_charbig VARCHAR(1000)
 
8999
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
9000
)
 
9001
PARTITION BY RANGE(f_int1)
 
9002
(PARTITION parta VALUES LESS THAN (0),
 
9003
PARTITION partb VALUES LESS THAN (5),
 
9004
PARTITION partc VALUES LESS THAN (10),
 
9005
PARTITION partd VALUES LESS THAN (10 + 5),
 
9006
PARTITION parte VALUES LESS THAN (20),
 
9007
PARTITION partf VALUES LESS THAN (2147483646));
 
9008
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9009
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
9010
# Start usability test (inc/partition_check.inc)
 
9011
create_command
 
9012
SHOW CREATE TABLE t1;
 
9013
Table   Create Table
 
9014
t1      CREATE TABLE `t1` (
 
9015
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
9016
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
9017
  `f_char1` char(20) DEFAULT NULL,
 
9018
  `f_char2` char(20) DEFAULT NULL,
 
9019
  `f_charbig` varchar(1000) DEFAULT NULL,
 
9020
  PRIMARY KEY (`f_int2`,`f_int1`),
 
9021
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
9022
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
9023
/*!50100 PARTITION BY RANGE (f_int1)
 
9024
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
9025
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
9026
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
9027
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
9028
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
9029
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
9030
 
 
9031
unified filelist
 
9032
t1.frm
 
9033
t1.par
 
9034
 
 
9035
# check prerequisites-1 success:    1
 
9036
# check COUNT(*) success:    1
 
9037
# check MIN/MAX(f_int1) success:    1
 
9038
# check MIN/MAX(f_int2) success:    1
 
9039
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9040
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9041
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9042
WHERE f_int1 IN (2,3);
 
9043
ERROR 23000: Can't write; duplicate key in table 't1'
 
9044
# check prerequisites-3 success:    1
 
9045
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
9046
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9047
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9048
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9049
WHERE f_int1 IN (2,3);
 
9050
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9051
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9052
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9053
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9054
WHERE f_int1 IN (2,3);
 
9055
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9056
# check read via f_int1 success: 1
 
9057
# check read via f_int2 success: 1
 
9058
        
 
9059
# check multiple-1 success:     1
 
9060
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9061
        
 
9062
# check multiple-2 success:     1
 
9063
INSERT INTO t1 SELECT * FROM t0_template
 
9064
WHERE MOD(f_int1,3) = 0;
 
9065
        
 
9066
# check multiple-3 success:     1
 
9067
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9068
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9069
AND @max_row_div2 + @max_row_div4;
 
9070
        
 
9071
# check multiple-4 success:     1
 
9072
DELETE FROM t1
 
9073
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9074
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9075
        
 
9076
# check multiple-5 success:     1
 
9077
SELECT COUNT(*) INTO @try_count FROM t0_template
 
9078
WHERE MOD(f_int1,3) = 0
 
9079
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9080
SELECT COUNT(*) INTO @clash_count
 
9081
FROM t1 INNER JOIN t0_template USING(f_int1)
 
9082
WHERE MOD(f_int1,3) = 0
 
9083
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9084
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9085
INSERT INTO t1
 
9086
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9087
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9088
f_charbig = '#SINGLE#';
 
9089
        
 
9090
# check single-1 success:       1
 
9091
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9092
INSERT INTO t1
 
9093
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9094
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9095
f_charbig = '#SINGLE#';
 
9096
        
 
9097
# check single-2 success:       1
 
9098
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9099
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9100
UPDATE t1 SET f_int1 = @cur_value2
 
9101
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9102
        
 
9103
# check single-3 success:       1
 
9104
SET @cur_value1= -1;
 
9105
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9106
UPDATE t1 SET f_int1 = @cur_value1
 
9107
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9108
        
 
9109
# check single-4 success:       1
 
9110
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9111
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9112
        
 
9113
# check single-5 success:       1
 
9114
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9115
        
 
9116
# check single-6 success:       1
 
9117
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9118
ERROR HY000: Table has no partition for value 2147483647
 
9119
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9120
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9121
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9122
f_charbig = '#NULL#';
 
9123
INSERT INTO t1
 
9124
SET f_int1 = NULL , f_int2 = -@max_row,
 
9125
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9126
f_charbig = '#NULL#';
 
9127
ERROR 23000: Column 'f_int1' cannot be null
 
9128
# check null success:    1
 
9129
DELETE FROM t1
 
9130
WHERE f_int1 = 0 AND f_int2 = 0
 
9131
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9132
AND f_charbig = '#NULL#';
 
9133
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9134
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9135
   FROM t0_template source_tab
 
9136
WHERE MOD(f_int1,3) = 0
 
9137
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
9138
ON DUPLICATE KEY
 
9139
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
9140
f_int2 = 2 * @max_row + source_tab.f_int1,
 
9141
f_charbig = 'was updated';
 
9142
        
 
9143
# check unique-1-a success:     1
 
9144
        
 
9145
# check unique-1-b success:     1
 
9146
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9147
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9148
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9149
f_charbig = CONCAT('===',f_char1,'===')
 
9150
WHERE f_charbig = 'was updated';
 
9151
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9152
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
9153
   FROM t0_template source_tab
 
9154
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9155
        
 
9156
# check replace success:        1
 
9157
DELETE FROM t1
 
9158
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
9159
DELETE FROM t1
 
9160
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
9161
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
9162
UPDATE t1 SET f_int2 = f_int1,
 
9163
f_char1 = CAST(f_int1 AS CHAR),
 
9164
f_char2 = CAST(f_int1 AS CHAR),
 
9165
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
9166
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
9167
SET AUTOCOMMIT= 0;
 
9168
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9169
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9170
FROM t0_template source_tab
 
9171
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9172
        
 
9173
# check transactions-1 success:         1
 
9174
COMMIT WORK;
 
9175
        
 
9176
# check transactions-2 success:         1
 
9177
ROLLBACK WORK;
 
9178
        
 
9179
# check transactions-3 success:         1
 
9180
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9181
COMMIT WORK;
 
9182
ROLLBACK WORK;
 
9183
        
 
9184
# check transactions-4 success:         1
 
9185
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9186
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9187
FROM t0_template source_tab
 
9188
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9189
        
 
9190
# check transactions-5 success:         1
 
9191
ROLLBACK WORK;
 
9192
        
 
9193
# check transactions-6 success:         1
 
9194
# INFO: Storage engine used for t1 seems to be transactional.
 
9195
COMMIT;
 
9196
        
 
9197
# check transactions-7 success:         1
 
9198
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9199
COMMIT WORK;
 
9200
SET @@session.sql_mode = 'traditional';
 
9201
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9202
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9203
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9204
'', '', 'was inserted' FROM t0_template
 
9205
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9206
ERROR 22012: Division by 0
 
9207
COMMIT;
 
9208
        
 
9209
# check transactions-8 success:         1
 
9210
# INFO: Storage engine used for t1 seems to be able to revert
 
9211
#       changes made by the failing statement.
 
9212
SET @@session.sql_mode = '';
 
9213
SET AUTOCOMMIT= 1;
 
9214
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9215
COMMIT WORK;
 
9216
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9217
        
 
9218
# check special-1 success:      1
 
9219
UPDATE t1 SET f_charbig = '';
 
9220
        
 
9221
# check special-2 success:      1
 
9222
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9223
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9224
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9225
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9226
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9227
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9228
'just inserted' FROM t0_template
 
9229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9230
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9231
BEGIN
 
9232
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9233
f_charbig = 'updated by trigger'
 
9234
      WHERE f_int1 = new.f_int1;
 
9235
END|
 
9236
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9237
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9239
        
 
9240
# check trigger-1 success:      1
 
9241
DROP TRIGGER trg_1;
 
9242
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9243
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9244
f_charbig = 'just inserted'
 
9245
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9246
DELETE FROM t0_aux
 
9247
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9248
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9249
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9250
'just inserted' FROM t0_template
 
9251
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9252
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9253
BEGIN
 
9254
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9255
f_charbig = 'updated by trigger'
 
9256
      WHERE f_int1 = new.f_int1;
 
9257
END|
 
9258
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9259
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9261
        
 
9262
# check trigger-2 success:      1
 
9263
DROP TRIGGER trg_1;
 
9264
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9265
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9266
f_charbig = 'just inserted'
 
9267
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9268
DELETE FROM t0_aux
 
9269
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9270
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9271
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9272
'just inserted' FROM t0_template
 
9273
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9274
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9275
BEGIN
 
9276
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9277
f_charbig = 'updated by trigger'
 
9278
      WHERE f_int1 = new.f_int1;
 
9279
END|
 
9280
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9281
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9282
        
 
9283
# check trigger-3 success:      1
 
9284
DROP TRIGGER trg_1;
 
9285
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9286
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9287
f_charbig = 'just inserted'
 
9288
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9289
DELETE FROM t0_aux
 
9290
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9291
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9292
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9293
'just inserted' FROM t0_template
 
9294
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9295
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9296
BEGIN
 
9297
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9298
f_charbig = 'updated by trigger'
 
9299
      WHERE f_int1 = - old.f_int1;
 
9300
END|
 
9301
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9302
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9303
        
 
9304
# check trigger-4 success:      1
 
9305
DROP TRIGGER trg_1;
 
9306
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9307
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9308
f_charbig = 'just inserted'
 
9309
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9310
DELETE FROM t0_aux
 
9311
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9312
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9313
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9314
'just inserted' FROM t0_template
 
9315
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9316
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9317
BEGIN
 
9318
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9319
f_charbig = 'updated by trigger'
 
9320
      WHERE f_int1 = new.f_int1;
 
9321
END|
 
9322
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9323
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9324
        
 
9325
# check trigger-5 success:      1
 
9326
DROP TRIGGER trg_1;
 
9327
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9328
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9329
f_charbig = 'just inserted'
 
9330
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9331
DELETE FROM t0_aux
 
9332
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9333
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9334
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9335
'just inserted' FROM t0_template
 
9336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9337
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9338
BEGIN
 
9339
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9340
f_charbig = 'updated by trigger'
 
9341
      WHERE f_int1 = - old.f_int1;
 
9342
END|
 
9343
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9344
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9345
        
 
9346
# check trigger-6 success:      1
 
9347
DROP TRIGGER trg_1;
 
9348
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9349
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9350
f_charbig = 'just inserted'
 
9351
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9352
DELETE FROM t0_aux
 
9353
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9354
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9355
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9356
'just inserted' FROM t0_template
 
9357
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9358
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9359
BEGIN
 
9360
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9361
f_charbig = 'updated by trigger'
 
9362
      WHERE f_int1 = - old.f_int1;
 
9363
END|
 
9364
DELETE FROM t0_aux
 
9365
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9366
        
 
9367
# check trigger-7 success:      1
 
9368
DROP TRIGGER trg_1;
 
9369
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9370
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9371
f_charbig = 'just inserted'
 
9372
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9373
DELETE FROM t0_aux
 
9374
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9375
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9376
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9377
'just inserted' FROM t0_template
 
9378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9379
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9380
BEGIN
 
9381
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9382
f_charbig = 'updated by trigger'
 
9383
      WHERE f_int1 = - old.f_int1;
 
9384
END|
 
9385
DELETE FROM t0_aux
 
9386
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9387
        
 
9388
# check trigger-8 success:      1
 
9389
DROP TRIGGER trg_1;
 
9390
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9391
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9392
f_charbig = 'just inserted'
 
9393
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9394
DELETE FROM t0_aux
 
9395
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9396
DELETE FROM t1
 
9397
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9398
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9399
BEGIN
 
9400
SET new.f_int1 = old.f_int1 + @max_row,
 
9401
new.f_int2 = old.f_int2 - @max_row,
 
9402
new.f_charbig = '####updated per update trigger####';
 
9403
END|
 
9404
UPDATE t1
 
9405
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9406
f_charbig = '####updated per update statement itself####';
 
9407
        
 
9408
# check trigger-9 success:      1
 
9409
DROP TRIGGER trg_2;
 
9410
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9411
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9412
f_charbig = CONCAT('===',f_char1,'===');
 
9413
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9414
BEGIN
 
9415
SET new.f_int1 = new.f_int1 + @max_row,
 
9416
new.f_int2 = new.f_int2 - @max_row,
 
9417
new.f_charbig = '####updated per update trigger####';
 
9418
END|
 
9419
UPDATE t1
 
9420
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9421
f_charbig = '####updated per update statement itself####';
 
9422
        
 
9423
# check trigger-10 success:     1
 
9424
DROP TRIGGER trg_2;
 
9425
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9426
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9427
f_charbig = CONCAT('===',f_char1,'===');
 
9428
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9429
BEGIN
 
9430
SET new.f_int1 = @my_max1 + @counter,
 
9431
new.f_int2 = @my_min2 - @counter,
 
9432
new.f_charbig = '####updated per insert trigger####';
 
9433
SET @counter = @counter + 1;
 
9434
END|
 
9435
SET @counter = 1;
 
9436
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9437
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9438
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9439
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9440
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9441
ORDER BY f_int1;
 
9442
DROP TRIGGER trg_3;
 
9443
        
 
9444
# check trigger-11 success:     1
 
9445
DELETE FROM t1
 
9446
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9447
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9448
AND f_charbig = '####updated per insert trigger####';
 
9449
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9450
BEGIN
 
9451
SET new.f_int1 = @my_max1 + @counter,
 
9452
new.f_int2 = @my_min2 - @counter,
 
9453
new.f_charbig = '####updated per insert trigger####';
 
9454
SET @counter = @counter + 1;
 
9455
END|
 
9456
SET @counter = 1;
 
9457
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9458
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9459
SELECT CAST(f_int1 AS CHAR),
 
9460
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9461
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9462
ORDER BY f_int1;
 
9463
DROP TRIGGER trg_3;
 
9464
        
 
9465
# check trigger-12 success:     1
 
9466
DELETE FROM t1
 
9467
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9468
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9469
AND f_charbig = '####updated per insert trigger####';
 
9470
ANALYZE  TABLE t1;
 
9471
Table   Op      Msg_type        Msg_text
 
9472
test.t1 analyze status  OK
 
9473
CHECK    TABLE t1 EXTENDED;
 
9474
Table   Op      Msg_type        Msg_text
 
9475
test.t1 check   status  OK
 
9476
CHECKSUM TABLE t1 EXTENDED;
 
9477
Table   Checksum
 
9478
test.t1 <some_value>
 
9479
OPTIMIZE TABLE t1;
 
9480
Table   Op      Msg_type        Msg_text
 
9481
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
9482
test.t1 optimize        status  OK
 
9483
# check layout success:    1
 
9484
REPAIR   TABLE t1 EXTENDED;
 
9485
Table   Op      Msg_type        Msg_text
 
9486
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9487
# check layout success:    1
 
9488
TRUNCATE t1;
 
9489
        
 
9490
# check TRUNCATE success:       1
 
9491
# check layout success:    1
 
9492
# End usability test (inc/partition_check.inc)
 
9493
DROP TABLE t1;
 
9494
CREATE TABLE t1 (
 
9495
f_int1 INTEGER,
 
9496
f_int2 INTEGER,
 
9497
f_char1 CHAR(20),
 
9498
f_char2 CHAR(20),
 
9499
f_charbig VARCHAR(1000)
 
9500
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
9501
)
 
9502
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
9503
(PARTITION parta VALUES LESS THAN (0),
 
9504
PARTITION partb VALUES LESS THAN (5),
 
9505
PARTITION partc VALUES LESS THAN (10),
 
9506
PARTITION partd VALUES LESS THAN (2147483646));
 
9507
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9508
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
9509
# Start usability test (inc/partition_check.inc)
 
9510
create_command
 
9511
SHOW CREATE TABLE t1;
 
9512
Table   Create Table
 
9513
t1      CREATE TABLE `t1` (
 
9514
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
9515
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
9516
  `f_char1` char(20) DEFAULT NULL,
 
9517
  `f_char2` char(20) DEFAULT NULL,
 
9518
  `f_charbig` varchar(1000) DEFAULT NULL,
 
9519
  PRIMARY KEY (`f_int2`,`f_int1`),
 
9520
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
9521
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
9522
/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
 
9523
SUBPARTITION BY HASH (f_int1)
 
9524
SUBPARTITIONS 2
 
9525
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
9526
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
9527
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
9528
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
9529
 
 
9530
unified filelist
 
9531
t1.frm
 
9532
t1.par
 
9533
 
 
9534
# check prerequisites-1 success:    1
 
9535
# check COUNT(*) success:    1
 
9536
# check MIN/MAX(f_int1) success:    1
 
9537
# check MIN/MAX(f_int2) success:    1
 
9538
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9539
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9540
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9541
WHERE f_int1 IN (2,3);
 
9542
ERROR 23000: Can't write; duplicate key in table 't1'
 
9543
# check prerequisites-3 success:    1
 
9544
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
9545
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9546
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9547
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9548
WHERE f_int1 IN (2,3);
 
9549
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9550
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9551
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
9552
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
9553
WHERE f_int1 IN (2,3);
 
9554
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9555
# check read via f_int1 success: 1
 
9556
# check read via f_int2 success: 1
 
9557
        
 
9558
# check multiple-1 success:     1
 
9559
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9560
        
 
9561
# check multiple-2 success:     1
 
9562
INSERT INTO t1 SELECT * FROM t0_template
 
9563
WHERE MOD(f_int1,3) = 0;
 
9564
        
 
9565
# check multiple-3 success:     1
 
9566
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9567
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9568
AND @max_row_div2 + @max_row_div4;
 
9569
        
 
9570
# check multiple-4 success:     1
 
9571
DELETE FROM t1
 
9572
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9573
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9574
        
 
9575
# check multiple-5 success:     1
 
9576
SELECT COUNT(*) INTO @try_count FROM t0_template
 
9577
WHERE MOD(f_int1,3) = 0
 
9578
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9579
SELECT COUNT(*) INTO @clash_count
 
9580
FROM t1 INNER JOIN t0_template USING(f_int1)
 
9581
WHERE MOD(f_int1,3) = 0
 
9582
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9583
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9584
INSERT INTO t1
 
9585
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9586
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9587
f_charbig = '#SINGLE#';
 
9588
        
 
9589
# check single-1 success:       1
 
9590
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9591
INSERT INTO t1
 
9592
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9593
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9594
f_charbig = '#SINGLE#';
 
9595
        
 
9596
# check single-2 success:       1
 
9597
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9598
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9599
UPDATE t1 SET f_int1 = @cur_value2
 
9600
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9601
        
 
9602
# check single-3 success:       1
 
9603
SET @cur_value1= -1;
 
9604
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9605
UPDATE t1 SET f_int1 = @cur_value1
 
9606
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9607
        
 
9608
# check single-4 success:       1
 
9609
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9610
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9611
        
 
9612
# check single-5 success:       1
 
9613
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9614
        
 
9615
# check single-6 success:       1
 
9616
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9617
        
 
9618
# check single-7 success:       1
 
9619
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
9620
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9621
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9622
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9623
f_charbig = '#NULL#';
 
9624
INSERT INTO t1
 
9625
SET f_int1 = NULL , f_int2 = -@max_row,
 
9626
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9627
f_charbig = '#NULL#';
 
9628
ERROR 23000: Column 'f_int1' cannot be null
 
9629
# check null success:    1
 
9630
DELETE FROM t1
 
9631
WHERE f_int1 = 0 AND f_int2 = 0
 
9632
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9633
AND f_charbig = '#NULL#';
 
9634
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9635
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9636
   FROM t0_template source_tab
 
9637
WHERE MOD(f_int1,3) = 0
 
9638
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
9639
ON DUPLICATE KEY
 
9640
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
9641
f_int2 = 2 * @max_row + source_tab.f_int1,
 
9642
f_charbig = 'was updated';
 
9643
        
 
9644
# check unique-1-a success:     1
 
9645
        
 
9646
# check unique-1-b success:     1
 
9647
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9648
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9649
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9650
f_charbig = CONCAT('===',f_char1,'===')
 
9651
WHERE f_charbig = 'was updated';
 
9652
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9653
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
9654
   FROM t0_template source_tab
 
9655
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9656
        
 
9657
# check replace success:        1
 
9658
DELETE FROM t1
 
9659
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
9660
DELETE FROM t1
 
9661
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
9662
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
9663
UPDATE t1 SET f_int2 = f_int1,
 
9664
f_char1 = CAST(f_int1 AS CHAR),
 
9665
f_char2 = CAST(f_int1 AS CHAR),
 
9666
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
9667
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
9668
SET AUTOCOMMIT= 0;
 
9669
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9670
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9671
FROM t0_template source_tab
 
9672
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9673
        
 
9674
# check transactions-1 success:         1
 
9675
COMMIT WORK;
 
9676
        
 
9677
# check transactions-2 success:         1
 
9678
ROLLBACK WORK;
 
9679
        
 
9680
# check transactions-3 success:         1
 
9681
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9682
COMMIT WORK;
 
9683
ROLLBACK WORK;
 
9684
        
 
9685
# check transactions-4 success:         1
 
9686
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9687
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9688
FROM t0_template source_tab
 
9689
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9690
        
 
9691
# check transactions-5 success:         1
 
9692
ROLLBACK WORK;
 
9693
        
 
9694
# check transactions-6 success:         1
 
9695
# INFO: Storage engine used for t1 seems to be transactional.
 
9696
COMMIT;
 
9697
        
 
9698
# check transactions-7 success:         1
 
9699
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9700
COMMIT WORK;
 
9701
SET @@session.sql_mode = 'traditional';
 
9702
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9703
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9704
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9705
'', '', 'was inserted' FROM t0_template
 
9706
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9707
ERROR 22012: Division by 0
 
9708
COMMIT;
 
9709
        
 
9710
# check transactions-8 success:         1
 
9711
# INFO: Storage engine used for t1 seems to be able to revert
 
9712
#       changes made by the failing statement.
 
9713
SET @@session.sql_mode = '';
 
9714
SET AUTOCOMMIT= 1;
 
9715
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9716
COMMIT WORK;
 
9717
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9718
        
 
9719
# check special-1 success:      1
 
9720
UPDATE t1 SET f_charbig = '';
 
9721
        
 
9722
# check special-2 success:      1
 
9723
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9724
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9725
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9726
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9727
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9728
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9729
'just inserted' FROM t0_template
 
9730
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9731
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9732
BEGIN
 
9733
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9734
f_charbig = 'updated by trigger'
 
9735
      WHERE f_int1 = new.f_int1;
 
9736
END|
 
9737
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9738
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9739
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9740
        
 
9741
# check trigger-1 success:      1
 
9742
DROP TRIGGER trg_1;
 
9743
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9744
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9745
f_charbig = 'just inserted'
 
9746
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9747
DELETE FROM t0_aux
 
9748
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9749
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9750
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9751
'just inserted' FROM t0_template
 
9752
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9753
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9754
BEGIN
 
9755
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9756
f_charbig = 'updated by trigger'
 
9757
      WHERE f_int1 = new.f_int1;
 
9758
END|
 
9759
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9760
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9762
        
 
9763
# check trigger-2 success:      1
 
9764
DROP TRIGGER trg_1;
 
9765
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9766
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9767
f_charbig = 'just inserted'
 
9768
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9769
DELETE FROM t0_aux
 
9770
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9771
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9772
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9773
'just inserted' FROM t0_template
 
9774
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9775
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9776
BEGIN
 
9777
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9778
f_charbig = 'updated by trigger'
 
9779
      WHERE f_int1 = new.f_int1;
 
9780
END|
 
9781
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9782
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9783
        
 
9784
# check trigger-3 success:      1
 
9785
DROP TRIGGER trg_1;
 
9786
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9787
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9788
f_charbig = 'just inserted'
 
9789
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9790
DELETE FROM t0_aux
 
9791
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9792
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9793
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9794
'just inserted' FROM t0_template
 
9795
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9796
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9797
BEGIN
 
9798
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9799
f_charbig = 'updated by trigger'
 
9800
      WHERE f_int1 = - old.f_int1;
 
9801
END|
 
9802
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9803
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9804
        
 
9805
# check trigger-4 success:      1
 
9806
DROP TRIGGER trg_1;
 
9807
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9808
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9809
f_charbig = 'just inserted'
 
9810
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9811
DELETE FROM t0_aux
 
9812
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9813
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9814
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9815
'just inserted' FROM t0_template
 
9816
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9817
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9818
BEGIN
 
9819
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9820
f_charbig = 'updated by trigger'
 
9821
      WHERE f_int1 = new.f_int1;
 
9822
END|
 
9823
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9824
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9825
        
 
9826
# check trigger-5 success:      1
 
9827
DROP TRIGGER trg_1;
 
9828
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9829
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9830
f_charbig = 'just inserted'
 
9831
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9832
DELETE FROM t0_aux
 
9833
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9834
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9835
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9836
'just inserted' FROM t0_template
 
9837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9838
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9839
BEGIN
 
9840
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9841
f_charbig = 'updated by trigger'
 
9842
      WHERE f_int1 = - old.f_int1;
 
9843
END|
 
9844
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9845
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9846
        
 
9847
# check trigger-6 success:      1
 
9848
DROP TRIGGER trg_1;
 
9849
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9850
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9851
f_charbig = 'just inserted'
 
9852
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9853
DELETE FROM t0_aux
 
9854
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9855
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9856
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9857
'just inserted' FROM t0_template
 
9858
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9859
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9860
BEGIN
 
9861
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9862
f_charbig = 'updated by trigger'
 
9863
      WHERE f_int1 = - old.f_int1;
 
9864
END|
 
9865
DELETE FROM t0_aux
 
9866
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9867
        
 
9868
# check trigger-7 success:      1
 
9869
DROP TRIGGER trg_1;
 
9870
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9871
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9872
f_charbig = 'just inserted'
 
9873
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9874
DELETE FROM t0_aux
 
9875
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9876
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9877
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9878
'just inserted' FROM t0_template
 
9879
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9880
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9881
BEGIN
 
9882
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9883
f_charbig = 'updated by trigger'
 
9884
      WHERE f_int1 = - old.f_int1;
 
9885
END|
 
9886
DELETE FROM t0_aux
 
9887
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9888
        
 
9889
# check trigger-8 success:      1
 
9890
DROP TRIGGER trg_1;
 
9891
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9892
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9893
f_charbig = 'just inserted'
 
9894
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9895
DELETE FROM t0_aux
 
9896
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9897
DELETE FROM t1
 
9898
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9899
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9900
BEGIN
 
9901
SET new.f_int1 = old.f_int1 + @max_row,
 
9902
new.f_int2 = old.f_int2 - @max_row,
 
9903
new.f_charbig = '####updated per update trigger####';
 
9904
END|
 
9905
UPDATE t1
 
9906
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9907
f_charbig = '####updated per update statement itself####';
 
9908
        
 
9909
# check trigger-9 success:      1
 
9910
DROP TRIGGER trg_2;
 
9911
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9912
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9913
f_charbig = CONCAT('===',f_char1,'===');
 
9914
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9915
BEGIN
 
9916
SET new.f_int1 = new.f_int1 + @max_row,
 
9917
new.f_int2 = new.f_int2 - @max_row,
 
9918
new.f_charbig = '####updated per update trigger####';
 
9919
END|
 
9920
UPDATE t1
 
9921
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9922
f_charbig = '####updated per update statement itself####';
 
9923
        
 
9924
# check trigger-10 success:     1
 
9925
DROP TRIGGER trg_2;
 
9926
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9927
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9928
f_charbig = CONCAT('===',f_char1,'===');
 
9929
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9930
BEGIN
 
9931
SET new.f_int1 = @my_max1 + @counter,
 
9932
new.f_int2 = @my_min2 - @counter,
 
9933
new.f_charbig = '####updated per insert trigger####';
 
9934
SET @counter = @counter + 1;
 
9935
END|
 
9936
SET @counter = 1;
 
9937
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9938
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9939
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9940
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9941
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9942
ORDER BY f_int1;
 
9943
DROP TRIGGER trg_3;
 
9944
        
 
9945
# check trigger-11 success:     1
 
9946
DELETE FROM t1
 
9947
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9948
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9949
AND f_charbig = '####updated per insert trigger####';
 
9950
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9951
BEGIN
 
9952
SET new.f_int1 = @my_max1 + @counter,
 
9953
new.f_int2 = @my_min2 - @counter,
 
9954
new.f_charbig = '####updated per insert trigger####';
 
9955
SET @counter = @counter + 1;
 
9956
END|
 
9957
SET @counter = 1;
 
9958
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9959
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9960
SELECT CAST(f_int1 AS CHAR),
 
9961
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9962
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9963
ORDER BY f_int1;
 
9964
DROP TRIGGER trg_3;
 
9965
        
 
9966
# check trigger-12 success:     1
 
9967
DELETE FROM t1
 
9968
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9969
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9970
AND f_charbig = '####updated per insert trigger####';
 
9971
ANALYZE  TABLE t1;
 
9972
Table   Op      Msg_type        Msg_text
 
9973
test.t1 analyze status  OK
 
9974
CHECK    TABLE t1 EXTENDED;
 
9975
Table   Op      Msg_type        Msg_text
 
9976
test.t1 check   status  OK
 
9977
CHECKSUM TABLE t1 EXTENDED;
 
9978
Table   Checksum
 
9979
test.t1 <some_value>
 
9980
OPTIMIZE TABLE t1;
 
9981
Table   Op      Msg_type        Msg_text
 
9982
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
9983
test.t1 optimize        status  OK
 
9984
# check layout success:    1
 
9985
REPAIR   TABLE t1 EXTENDED;
 
9986
Table   Op      Msg_type        Msg_text
 
9987
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9988
# check layout success:    1
 
9989
TRUNCATE t1;
 
9990
        
 
9991
# check TRUNCATE success:       1
 
9992
# check layout success:    1
 
9993
# End usability test (inc/partition_check.inc)
 
9994
DROP TABLE t1;
 
9995
CREATE TABLE t1 (
 
9996
f_int1 INTEGER,
 
9997
f_int2 INTEGER,
 
9998
f_char1 CHAR(20),
 
9999
f_char2 CHAR(20),
 
10000
f_charbig VARCHAR(1000)
 
10001
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
10002
)
 
10003
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
10004
(PARTITION part1 VALUES LESS THAN (0)
 
10005
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
10006
PARTITION part2 VALUES LESS THAN (5)
 
10007
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
10008
PARTITION part3 VALUES LESS THAN (10)
 
10009
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
10010
PARTITION part4 VALUES LESS THAN (2147483646)
 
10011
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
10012
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10013
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
10014
# Start usability test (inc/partition_check.inc)
 
10015
create_command
 
10016
SHOW CREATE TABLE t1;
 
10017
Table   Create Table
 
10018
t1      CREATE TABLE `t1` (
 
10019
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
10020
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
10021
  `f_char1` char(20) DEFAULT NULL,
 
10022
  `f_char2` char(20) DEFAULT NULL,
 
10023
  `f_charbig` varchar(1000) DEFAULT NULL,
 
10024
  PRIMARY KEY (`f_int2`,`f_int1`),
 
10025
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
10026
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
10027
/*!50100 PARTITION BY RANGE (f_int1)
 
10028
SUBPARTITION BY KEY (f_int1)
 
10029
(PARTITION part1 VALUES LESS THAN (0)
 
10030
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
10031
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
10032
 PARTITION part2 VALUES LESS THAN (5)
 
10033
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
10034
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
10035
 PARTITION part3 VALUES LESS THAN (10)
 
10036
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
10037
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
10038
 PARTITION part4 VALUES LESS THAN (2147483646)
 
10039
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
10040
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
10041
 
 
10042
unified filelist
 
10043
t1.frm
 
10044
t1.par
 
10045
 
 
10046
# check prerequisites-1 success:    1
 
10047
# check COUNT(*) success:    1
 
10048
# check MIN/MAX(f_int1) success:    1
 
10049
# check MIN/MAX(f_int2) success:    1
 
10050
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10051
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10052
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10053
WHERE f_int1 IN (2,3);
 
10054
ERROR 23000: Can't write; duplicate key in table 't1'
 
10055
# check prerequisites-3 success:    1
 
10056
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
10057
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10058
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10059
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10060
WHERE f_int1 IN (2,3);
 
10061
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10062
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10063
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10064
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10065
WHERE f_int1 IN (2,3);
 
10066
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10067
# check read via f_int1 success: 1
 
10068
# check read via f_int2 success: 1
 
10069
        
 
10070
# check multiple-1 success:     1
 
10071
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10072
        
 
10073
# check multiple-2 success:     1
 
10074
INSERT INTO t1 SELECT * FROM t0_template
 
10075
WHERE MOD(f_int1,3) = 0;
 
10076
        
 
10077
# check multiple-3 success:     1
 
10078
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10079
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10080
AND @max_row_div2 + @max_row_div4;
 
10081
        
 
10082
# check multiple-4 success:     1
 
10083
DELETE FROM t1
 
10084
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10085
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10086
        
 
10087
# check multiple-5 success:     1
 
10088
SELECT COUNT(*) INTO @try_count FROM t0_template
 
10089
WHERE MOD(f_int1,3) = 0
 
10090
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10091
SELECT COUNT(*) INTO @clash_count
 
10092
FROM t1 INNER JOIN t0_template USING(f_int1)
 
10093
WHERE MOD(f_int1,3) = 0
 
10094
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10095
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10096
INSERT INTO t1
 
10097
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10098
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10099
f_charbig = '#SINGLE#';
 
10100
        
 
10101
# check single-1 success:       1
 
10102
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10103
INSERT INTO t1
 
10104
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10105
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10106
f_charbig = '#SINGLE#';
 
10107
        
 
10108
# check single-2 success:       1
 
10109
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10110
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10111
UPDATE t1 SET f_int1 = @cur_value2
 
10112
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10113
        
 
10114
# check single-3 success:       1
 
10115
SET @cur_value1= -1;
 
10116
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10117
UPDATE t1 SET f_int1 = @cur_value1
 
10118
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10119
        
 
10120
# check single-4 success:       1
 
10121
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10122
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10123
        
 
10124
# check single-5 success:       1
 
10125
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10126
        
 
10127
# check single-6 success:       1
 
10128
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10129
ERROR HY000: Table has no partition for value 2147483647
 
10130
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10131
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10132
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10133
f_charbig = '#NULL#';
 
10134
INSERT INTO t1
 
10135
SET f_int1 = NULL , f_int2 = -@max_row,
 
10136
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10137
f_charbig = '#NULL#';
 
10138
ERROR 23000: Column 'f_int1' cannot be null
 
10139
# check null success:    1
 
10140
DELETE FROM t1
 
10141
WHERE f_int1 = 0 AND f_int2 = 0
 
10142
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10143
AND f_charbig = '#NULL#';
 
10144
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10145
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10146
   FROM t0_template source_tab
 
10147
WHERE MOD(f_int1,3) = 0
 
10148
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
10149
ON DUPLICATE KEY
 
10150
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
10151
f_int2 = 2 * @max_row + source_tab.f_int1,
 
10152
f_charbig = 'was updated';
 
10153
        
 
10154
# check unique-1-a success:     1
 
10155
        
 
10156
# check unique-1-b success:     1
 
10157
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10158
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10159
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10160
f_charbig = CONCAT('===',f_char1,'===')
 
10161
WHERE f_charbig = 'was updated';
 
10162
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10163
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
10164
   FROM t0_template source_tab
 
10165
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10166
        
 
10167
# check replace success:        1
 
10168
DELETE FROM t1
 
10169
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
10170
DELETE FROM t1
 
10171
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
10172
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
10173
UPDATE t1 SET f_int2 = f_int1,
 
10174
f_char1 = CAST(f_int1 AS CHAR),
 
10175
f_char2 = CAST(f_int1 AS CHAR),
 
10176
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
10177
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
10178
SET AUTOCOMMIT= 0;
 
10179
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10180
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10181
FROM t0_template source_tab
 
10182
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10183
        
 
10184
# check transactions-1 success:         1
 
10185
COMMIT WORK;
 
10186
        
 
10187
# check transactions-2 success:         1
 
10188
ROLLBACK WORK;
 
10189
        
 
10190
# check transactions-3 success:         1
 
10191
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10192
COMMIT WORK;
 
10193
ROLLBACK WORK;
 
10194
        
 
10195
# check transactions-4 success:         1
 
10196
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10197
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10198
FROM t0_template source_tab
 
10199
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10200
        
 
10201
# check transactions-5 success:         1
 
10202
ROLLBACK WORK;
 
10203
        
 
10204
# check transactions-6 success:         1
 
10205
# INFO: Storage engine used for t1 seems to be transactional.
 
10206
COMMIT;
 
10207
        
 
10208
# check transactions-7 success:         1
 
10209
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10210
COMMIT WORK;
 
10211
SET @@session.sql_mode = 'traditional';
 
10212
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10213
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10214
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10215
'', '', 'was inserted' FROM t0_template
 
10216
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10217
ERROR 22012: Division by 0
 
10218
COMMIT;
 
10219
        
 
10220
# check transactions-8 success:         1
 
10221
# INFO: Storage engine used for t1 seems to be able to revert
 
10222
#       changes made by the failing statement.
 
10223
SET @@session.sql_mode = '';
 
10224
SET AUTOCOMMIT= 1;
 
10225
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10226
COMMIT WORK;
 
10227
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10228
        
 
10229
# check special-1 success:      1
 
10230
UPDATE t1 SET f_charbig = '';
 
10231
        
 
10232
# check special-2 success:      1
 
10233
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10234
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10235
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10236
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10237
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10238
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10239
'just inserted' FROM t0_template
 
10240
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10241
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10242
BEGIN
 
10243
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10244
f_charbig = 'updated by trigger'
 
10245
      WHERE f_int1 = new.f_int1;
 
10246
END|
 
10247
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10248
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10249
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10250
        
 
10251
# check trigger-1 success:      1
 
10252
DROP TRIGGER trg_1;
 
10253
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10254
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10255
f_charbig = 'just inserted'
 
10256
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10257
DELETE FROM t0_aux
 
10258
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10259
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10260
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10261
'just inserted' FROM t0_template
 
10262
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10263
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10264
BEGIN
 
10265
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10266
f_charbig = 'updated by trigger'
 
10267
      WHERE f_int1 = new.f_int1;
 
10268
END|
 
10269
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10270
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10272
        
 
10273
# check trigger-2 success:      1
 
10274
DROP TRIGGER trg_1;
 
10275
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10276
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10277
f_charbig = 'just inserted'
 
10278
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10279
DELETE FROM t0_aux
 
10280
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10281
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10282
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10283
'just inserted' FROM t0_template
 
10284
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10285
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10286
BEGIN
 
10287
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10288
f_charbig = 'updated by trigger'
 
10289
      WHERE f_int1 = new.f_int1;
 
10290
END|
 
10291
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10292
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10293
        
 
10294
# check trigger-3 success:      1
 
10295
DROP TRIGGER trg_1;
 
10296
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10297
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10298
f_charbig = 'just inserted'
 
10299
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10300
DELETE FROM t0_aux
 
10301
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10302
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10303
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10304
'just inserted' FROM t0_template
 
10305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10306
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10307
BEGIN
 
10308
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10309
f_charbig = 'updated by trigger'
 
10310
      WHERE f_int1 = - old.f_int1;
 
10311
END|
 
10312
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10313
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10314
        
 
10315
# check trigger-4 success:      1
 
10316
DROP TRIGGER trg_1;
 
10317
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10318
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10319
f_charbig = 'just inserted'
 
10320
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10321
DELETE FROM t0_aux
 
10322
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10323
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10324
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10325
'just inserted' FROM t0_template
 
10326
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10327
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10328
BEGIN
 
10329
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10330
f_charbig = 'updated by trigger'
 
10331
      WHERE f_int1 = new.f_int1;
 
10332
END|
 
10333
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10334
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10335
        
 
10336
# check trigger-5 success:      1
 
10337
DROP TRIGGER trg_1;
 
10338
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10339
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10340
f_charbig = 'just inserted'
 
10341
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10342
DELETE FROM t0_aux
 
10343
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10344
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10345
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10346
'just inserted' FROM t0_template
 
10347
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10348
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10349
BEGIN
 
10350
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10351
f_charbig = 'updated by trigger'
 
10352
      WHERE f_int1 = - old.f_int1;
 
10353
END|
 
10354
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10355
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10356
        
 
10357
# check trigger-6 success:      1
 
10358
DROP TRIGGER trg_1;
 
10359
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10360
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10361
f_charbig = 'just inserted'
 
10362
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10363
DELETE FROM t0_aux
 
10364
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10365
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10366
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10367
'just inserted' FROM t0_template
 
10368
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10369
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10370
BEGIN
 
10371
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10372
f_charbig = 'updated by trigger'
 
10373
      WHERE f_int1 = - old.f_int1;
 
10374
END|
 
10375
DELETE FROM t0_aux
 
10376
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10377
        
 
10378
# check trigger-7 success:      1
 
10379
DROP TRIGGER trg_1;
 
10380
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10381
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10382
f_charbig = 'just inserted'
 
10383
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10384
DELETE FROM t0_aux
 
10385
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10386
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10387
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10388
'just inserted' FROM t0_template
 
10389
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10390
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10391
BEGIN
 
10392
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10393
f_charbig = 'updated by trigger'
 
10394
      WHERE f_int1 = - old.f_int1;
 
10395
END|
 
10396
DELETE FROM t0_aux
 
10397
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10398
        
 
10399
# check trigger-8 success:      1
 
10400
DROP TRIGGER trg_1;
 
10401
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10402
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10403
f_charbig = 'just inserted'
 
10404
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10405
DELETE FROM t0_aux
 
10406
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10407
DELETE FROM t1
 
10408
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10409
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10410
BEGIN
 
10411
SET new.f_int1 = old.f_int1 + @max_row,
 
10412
new.f_int2 = old.f_int2 - @max_row,
 
10413
new.f_charbig = '####updated per update trigger####';
 
10414
END|
 
10415
UPDATE t1
 
10416
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10417
f_charbig = '####updated per update statement itself####';
 
10418
        
 
10419
# check trigger-9 success:      1
 
10420
DROP TRIGGER trg_2;
 
10421
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10422
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10423
f_charbig = CONCAT('===',f_char1,'===');
 
10424
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10425
BEGIN
 
10426
SET new.f_int1 = new.f_int1 + @max_row,
 
10427
new.f_int2 = new.f_int2 - @max_row,
 
10428
new.f_charbig = '####updated per update trigger####';
 
10429
END|
 
10430
UPDATE t1
 
10431
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10432
f_charbig = '####updated per update statement itself####';
 
10433
        
 
10434
# check trigger-10 success:     1
 
10435
DROP TRIGGER trg_2;
 
10436
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10437
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10438
f_charbig = CONCAT('===',f_char1,'===');
 
10439
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10440
BEGIN
 
10441
SET new.f_int1 = @my_max1 + @counter,
 
10442
new.f_int2 = @my_min2 - @counter,
 
10443
new.f_charbig = '####updated per insert trigger####';
 
10444
SET @counter = @counter + 1;
 
10445
END|
 
10446
SET @counter = 1;
 
10447
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10448
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10449
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10450
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10451
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10452
ORDER BY f_int1;
 
10453
DROP TRIGGER trg_3;
 
10454
        
 
10455
# check trigger-11 success:     1
 
10456
DELETE FROM t1
 
10457
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10458
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10459
AND f_charbig = '####updated per insert trigger####';
 
10460
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10461
BEGIN
 
10462
SET new.f_int1 = @my_max1 + @counter,
 
10463
new.f_int2 = @my_min2 - @counter,
 
10464
new.f_charbig = '####updated per insert trigger####';
 
10465
SET @counter = @counter + 1;
 
10466
END|
 
10467
SET @counter = 1;
 
10468
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10469
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10470
SELECT CAST(f_int1 AS CHAR),
 
10471
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10472
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10473
ORDER BY f_int1;
 
10474
DROP TRIGGER trg_3;
 
10475
        
 
10476
# check trigger-12 success:     1
 
10477
DELETE FROM t1
 
10478
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10479
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10480
AND f_charbig = '####updated per insert trigger####';
 
10481
ANALYZE  TABLE t1;
 
10482
Table   Op      Msg_type        Msg_text
 
10483
test.t1 analyze status  OK
 
10484
CHECK    TABLE t1 EXTENDED;
 
10485
Table   Op      Msg_type        Msg_text
 
10486
test.t1 check   status  OK
 
10487
CHECKSUM TABLE t1 EXTENDED;
 
10488
Table   Checksum
 
10489
test.t1 <some_value>
 
10490
OPTIMIZE TABLE t1;
 
10491
Table   Op      Msg_type        Msg_text
 
10492
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
10493
test.t1 optimize        status  OK
 
10494
# check layout success:    1
 
10495
REPAIR   TABLE t1 EXTENDED;
 
10496
Table   Op      Msg_type        Msg_text
 
10497
test.t1 repair  note    The storage engine for the table doesn't support repair
 
10498
# check layout success:    1
 
10499
TRUNCATE t1;
 
10500
        
 
10501
# check TRUNCATE success:       1
 
10502
# check layout success:    1
 
10503
# End usability test (inc/partition_check.inc)
 
10504
DROP TABLE t1;
 
10505
CREATE TABLE t1 (
 
10506
f_int1 INTEGER,
 
10507
f_int2 INTEGER,
 
10508
f_char1 CHAR(20),
 
10509
f_char2 CHAR(20),
 
10510
f_charbig VARCHAR(1000)
 
10511
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
10512
)
 
10513
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
10514
(PARTITION part1 VALUES IN (0)
 
10515
(SUBPARTITION sp11,
 
10516
SUBPARTITION sp12),
 
10517
PARTITION part2 VALUES IN (1)
 
10518
(SUBPARTITION sp21,
 
10519
SUBPARTITION sp22),
 
10520
PARTITION part3 VALUES IN (2)
 
10521
(SUBPARTITION sp31, 
 
10522
SUBPARTITION sp32),
 
10523
PARTITION part4 VALUES IN (NULL)
 
10524
(SUBPARTITION sp41,
 
10525
SUBPARTITION sp42));
 
10526
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10527
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
10528
# Start usability test (inc/partition_check.inc)
 
10529
create_command
 
10530
SHOW CREATE TABLE t1;
 
10531
Table   Create Table
 
10532
t1      CREATE TABLE `t1` (
 
10533
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
10534
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
10535
  `f_char1` char(20) DEFAULT NULL,
 
10536
  `f_char2` char(20) DEFAULT NULL,
 
10537
  `f_charbig` varchar(1000) DEFAULT NULL,
 
10538
  PRIMARY KEY (`f_int2`,`f_int1`),
 
10539
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
10540
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
10541
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
10542
SUBPARTITION BY HASH (f_int1 + 1)
 
10543
(PARTITION part1 VALUES IN (0)
 
10544
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
10545
  SUBPARTITION sp12 ENGINE = InnoDB),
 
10546
 PARTITION part2 VALUES IN (1)
 
10547
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
10548
  SUBPARTITION sp22 ENGINE = InnoDB),
 
10549
 PARTITION part3 VALUES IN (2)
 
10550
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
10551
  SUBPARTITION sp32 ENGINE = InnoDB),
 
10552
 PARTITION part4 VALUES IN (NULL)
 
10553
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
10554
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
10555
 
 
10556
unified filelist
 
10557
t1.frm
 
10558
t1.par
 
10559
 
 
10560
# check prerequisites-1 success:    1
 
10561
# check COUNT(*) success:    1
 
10562
# check MIN/MAX(f_int1) success:    1
 
10563
# check MIN/MAX(f_int2) success:    1
 
10564
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10565
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10566
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10567
WHERE f_int1 IN (2,3);
 
10568
ERROR 23000: Can't write; duplicate key in table 't1'
 
10569
# check prerequisites-3 success:    1
 
10570
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
10571
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10572
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10573
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10574
WHERE f_int1 IN (2,3);
 
10575
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10576
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10577
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
10578
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
10579
WHERE f_int1 IN (2,3);
 
10580
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10581
# check read via f_int1 success: 1
 
10582
# check read via f_int2 success: 1
 
10583
        
 
10584
# check multiple-1 success:     1
 
10585
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10586
        
 
10587
# check multiple-2 success:     1
 
10588
INSERT INTO t1 SELECT * FROM t0_template
 
10589
WHERE MOD(f_int1,3) = 0;
 
10590
        
 
10591
# check multiple-3 success:     1
 
10592
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10593
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10594
AND @max_row_div2 + @max_row_div4;
 
10595
        
 
10596
# check multiple-4 success:     1
 
10597
DELETE FROM t1
 
10598
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10599
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10600
        
 
10601
# check multiple-5 success:     1
 
10602
SELECT COUNT(*) INTO @try_count FROM t0_template
 
10603
WHERE MOD(f_int1,3) = 0
 
10604
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10605
SELECT COUNT(*) INTO @clash_count
 
10606
FROM t1 INNER JOIN t0_template USING(f_int1)
 
10607
WHERE MOD(f_int1,3) = 0
 
10608
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10609
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10610
INSERT INTO t1
 
10611
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10612
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10613
f_charbig = '#SINGLE#';
 
10614
        
 
10615
# check single-1 success:       1
 
10616
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10617
INSERT INTO t1
 
10618
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10619
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10620
f_charbig = '#SINGLE#';
 
10621
        
 
10622
# check single-2 success:       1
 
10623
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10624
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10625
UPDATE t1 SET f_int1 = @cur_value2
 
10626
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10627
        
 
10628
# check single-3 success:       1
 
10629
SET @cur_value1= -1;
 
10630
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10631
UPDATE t1 SET f_int1 = @cur_value1
 
10632
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10633
        
 
10634
# check single-4 success:       1
 
10635
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10636
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10637
        
 
10638
# check single-5 success:       1
 
10639
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10640
        
 
10641
# check single-6 success:       1
 
10642
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10643
        
 
10644
# check single-7 success:       1
 
10645
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
10646
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10647
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10648
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10649
f_charbig = '#NULL#';
 
10650
INSERT INTO t1
 
10651
SET f_int1 = NULL , f_int2 = -@max_row,
 
10652
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10653
f_charbig = '#NULL#';
 
10654
ERROR 23000: Column 'f_int1' cannot be null
 
10655
# check null success:    1
 
10656
DELETE FROM t1
 
10657
WHERE f_int1 = 0 AND f_int2 = 0
 
10658
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10659
AND f_charbig = '#NULL#';
 
10660
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10661
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10662
   FROM t0_template source_tab
 
10663
WHERE MOD(f_int1,3) = 0
 
10664
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
10665
ON DUPLICATE KEY
 
10666
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
10667
f_int2 = 2 * @max_row + source_tab.f_int1,
 
10668
f_charbig = 'was updated';
 
10669
        
 
10670
# check unique-1-a success:     1
 
10671
        
 
10672
# check unique-1-b success:     1
 
10673
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10674
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10675
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10676
f_charbig = CONCAT('===',f_char1,'===')
 
10677
WHERE f_charbig = 'was updated';
 
10678
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10679
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
10680
   FROM t0_template source_tab
 
10681
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10682
        
 
10683
# check replace success:        1
 
10684
DELETE FROM t1
 
10685
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
10686
DELETE FROM t1
 
10687
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
10688
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
10689
UPDATE t1 SET f_int2 = f_int1,
 
10690
f_char1 = CAST(f_int1 AS CHAR),
 
10691
f_char2 = CAST(f_int1 AS CHAR),
 
10692
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
10693
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
10694
SET AUTOCOMMIT= 0;
 
10695
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10696
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10697
FROM t0_template source_tab
 
10698
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10699
        
 
10700
# check transactions-1 success:         1
 
10701
COMMIT WORK;
 
10702
        
 
10703
# check transactions-2 success:         1
 
10704
ROLLBACK WORK;
 
10705
        
 
10706
# check transactions-3 success:         1
 
10707
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10708
COMMIT WORK;
 
10709
ROLLBACK WORK;
 
10710
        
 
10711
# check transactions-4 success:         1
 
10712
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10713
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10714
FROM t0_template source_tab
 
10715
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10716
        
 
10717
# check transactions-5 success:         1
 
10718
ROLLBACK WORK;
 
10719
        
 
10720
# check transactions-6 success:         1
 
10721
# INFO: Storage engine used for t1 seems to be transactional.
 
10722
COMMIT;
 
10723
        
 
10724
# check transactions-7 success:         1
 
10725
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10726
COMMIT WORK;
 
10727
SET @@session.sql_mode = 'traditional';
 
10728
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10729
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10730
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10731
'', '', 'was inserted' FROM t0_template
 
10732
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10733
ERROR 22012: Division by 0
 
10734
COMMIT;
 
10735
        
 
10736
# check transactions-8 success:         1
 
10737
# INFO: Storage engine used for t1 seems to be able to revert
 
10738
#       changes made by the failing statement.
 
10739
SET @@session.sql_mode = '';
 
10740
SET AUTOCOMMIT= 1;
 
10741
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10742
COMMIT WORK;
 
10743
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10744
        
 
10745
# check special-1 success:      1
 
10746
UPDATE t1 SET f_charbig = '';
 
10747
        
 
10748
# check special-2 success:      1
 
10749
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10750
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10751
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10752
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10754
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10755
'just inserted' FROM t0_template
 
10756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10757
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10758
BEGIN
 
10759
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10760
f_charbig = 'updated by trigger'
 
10761
      WHERE f_int1 = new.f_int1;
 
10762
END|
 
10763
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10764
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10765
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10766
        
 
10767
# check trigger-1 success:      1
 
10768
DROP TRIGGER trg_1;
 
10769
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10770
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10771
f_charbig = 'just inserted'
 
10772
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10773
DELETE FROM t0_aux
 
10774
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10775
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10776
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10777
'just inserted' FROM t0_template
 
10778
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10779
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10780
BEGIN
 
10781
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10782
f_charbig = 'updated by trigger'
 
10783
      WHERE f_int1 = new.f_int1;
 
10784
END|
 
10785
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10786
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10787
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10788
        
 
10789
# check trigger-2 success:      1
 
10790
DROP TRIGGER trg_1;
 
10791
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10792
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10793
f_charbig = 'just inserted'
 
10794
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10795
DELETE FROM t0_aux
 
10796
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10797
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10798
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10799
'just inserted' FROM t0_template
 
10800
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10801
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10802
BEGIN
 
10803
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10804
f_charbig = 'updated by trigger'
 
10805
      WHERE f_int1 = new.f_int1;
 
10806
END|
 
10807
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10808
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10809
        
 
10810
# check trigger-3 success:      1
 
10811
DROP TRIGGER trg_1;
 
10812
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10813
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10814
f_charbig = 'just inserted'
 
10815
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10816
DELETE FROM t0_aux
 
10817
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10818
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10819
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10820
'just inserted' FROM t0_template
 
10821
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10822
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10823
BEGIN
 
10824
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10825
f_charbig = 'updated by trigger'
 
10826
      WHERE f_int1 = - old.f_int1;
 
10827
END|
 
10828
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10829
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10830
        
 
10831
# check trigger-4 success:      1
 
10832
DROP TRIGGER trg_1;
 
10833
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10834
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10835
f_charbig = 'just inserted'
 
10836
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10837
DELETE FROM t0_aux
 
10838
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10839
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10840
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10841
'just inserted' FROM t0_template
 
10842
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10843
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10844
BEGIN
 
10845
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10846
f_charbig = 'updated by trigger'
 
10847
      WHERE f_int1 = new.f_int1;
 
10848
END|
 
10849
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10850
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10851
        
 
10852
# check trigger-5 success:      1
 
10853
DROP TRIGGER trg_1;
 
10854
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10855
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10856
f_charbig = 'just inserted'
 
10857
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10858
DELETE FROM t0_aux
 
10859
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10860
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10861
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10862
'just inserted' FROM t0_template
 
10863
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10864
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10865
BEGIN
 
10866
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10867
f_charbig = 'updated by trigger'
 
10868
      WHERE f_int1 = - old.f_int1;
 
10869
END|
 
10870
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10871
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10872
        
 
10873
# check trigger-6 success:      1
 
10874
DROP TRIGGER trg_1;
 
10875
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10876
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10877
f_charbig = 'just inserted'
 
10878
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10879
DELETE FROM t0_aux
 
10880
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10881
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10882
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10883
'just inserted' FROM t0_template
 
10884
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10885
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10886
BEGIN
 
10887
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10888
f_charbig = 'updated by trigger'
 
10889
      WHERE f_int1 = - old.f_int1;
 
10890
END|
 
10891
DELETE FROM t0_aux
 
10892
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10893
        
 
10894
# check trigger-7 success:      1
 
10895
DROP TRIGGER trg_1;
 
10896
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10897
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10898
f_charbig = 'just inserted'
 
10899
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10900
DELETE FROM t0_aux
 
10901
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10902
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10903
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10904
'just inserted' FROM t0_template
 
10905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10906
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10907
BEGIN
 
10908
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10909
f_charbig = 'updated by trigger'
 
10910
      WHERE f_int1 = - old.f_int1;
 
10911
END|
 
10912
DELETE FROM t0_aux
 
10913
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10914
        
 
10915
# check trigger-8 success:      1
 
10916
DROP TRIGGER trg_1;
 
10917
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10918
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10919
f_charbig = 'just inserted'
 
10920
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10921
DELETE FROM t0_aux
 
10922
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10923
DELETE FROM t1
 
10924
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10925
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10926
BEGIN
 
10927
SET new.f_int1 = old.f_int1 + @max_row,
 
10928
new.f_int2 = old.f_int2 - @max_row,
 
10929
new.f_charbig = '####updated per update trigger####';
 
10930
END|
 
10931
UPDATE t1
 
10932
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10933
f_charbig = '####updated per update statement itself####';
 
10934
        
 
10935
# check trigger-9 success:      1
 
10936
DROP TRIGGER trg_2;
 
10937
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10938
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10939
f_charbig = CONCAT('===',f_char1,'===');
 
10940
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10941
BEGIN
 
10942
SET new.f_int1 = new.f_int1 + @max_row,
 
10943
new.f_int2 = new.f_int2 - @max_row,
 
10944
new.f_charbig = '####updated per update trigger####';
 
10945
END|
 
10946
UPDATE t1
 
10947
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10948
f_charbig = '####updated per update statement itself####';
 
10949
        
 
10950
# check trigger-10 success:     1
 
10951
DROP TRIGGER trg_2;
 
10952
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10953
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10954
f_charbig = CONCAT('===',f_char1,'===');
 
10955
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10956
BEGIN
 
10957
SET new.f_int1 = @my_max1 + @counter,
 
10958
new.f_int2 = @my_min2 - @counter,
 
10959
new.f_charbig = '####updated per insert trigger####';
 
10960
SET @counter = @counter + 1;
 
10961
END|
 
10962
SET @counter = 1;
 
10963
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10964
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10965
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10966
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10967
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10968
ORDER BY f_int1;
 
10969
DROP TRIGGER trg_3;
 
10970
        
 
10971
# check trigger-11 success:     1
 
10972
DELETE FROM t1
 
10973
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10974
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10975
AND f_charbig = '####updated per insert trigger####';
 
10976
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10977
BEGIN
 
10978
SET new.f_int1 = @my_max1 + @counter,
 
10979
new.f_int2 = @my_min2 - @counter,
 
10980
new.f_charbig = '####updated per insert trigger####';
 
10981
SET @counter = @counter + 1;
 
10982
END|
 
10983
SET @counter = 1;
 
10984
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10985
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10986
SELECT CAST(f_int1 AS CHAR),
 
10987
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10988
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10989
ORDER BY f_int1;
 
10990
DROP TRIGGER trg_3;
 
10991
        
 
10992
# check trigger-12 success:     1
 
10993
DELETE FROM t1
 
10994
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10995
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10996
AND f_charbig = '####updated per insert trigger####';
 
10997
ANALYZE  TABLE t1;
 
10998
Table   Op      Msg_type        Msg_text
 
10999
test.t1 analyze status  OK
 
11000
CHECK    TABLE t1 EXTENDED;
 
11001
Table   Op      Msg_type        Msg_text
 
11002
test.t1 check   status  OK
 
11003
CHECKSUM TABLE t1 EXTENDED;
 
11004
Table   Checksum
 
11005
test.t1 <some_value>
 
11006
OPTIMIZE TABLE t1;
 
11007
Table   Op      Msg_type        Msg_text
 
11008
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
11009
test.t1 optimize        status  OK
 
11010
# check layout success:    1
 
11011
REPAIR   TABLE t1 EXTENDED;
 
11012
Table   Op      Msg_type        Msg_text
 
11013
test.t1 repair  note    The storage engine for the table doesn't support repair
 
11014
# check layout success:    1
 
11015
TRUNCATE t1;
 
11016
        
 
11017
# check TRUNCATE success:       1
 
11018
# check layout success:    1
 
11019
# End usability test (inc/partition_check.inc)
 
11020
DROP TABLE t1;
 
11021
CREATE TABLE t1 (
 
11022
f_int1 INTEGER,
 
11023
f_int2 INTEGER,
 
11024
f_char1 CHAR(20),
 
11025
f_char2 CHAR(20),
 
11026
f_charbig VARCHAR(1000)
 
11027
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
11028
)
 
11029
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
11030
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
11031
(PARTITION part1 VALUES IN (0),
 
11032
PARTITION part2 VALUES IN (1),
 
11033
PARTITION part3 VALUES IN (NULL));
 
11034
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11035
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
11036
# Start usability test (inc/partition_check.inc)
 
11037
create_command
 
11038
SHOW CREATE TABLE t1;
 
11039
Table   Create Table
 
11040
t1      CREATE TABLE `t1` (
 
11041
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
11042
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
11043
  `f_char1` char(20) DEFAULT NULL,
 
11044
  `f_char2` char(20) DEFAULT NULL,
 
11045
  `f_charbig` varchar(1000) DEFAULT NULL,
 
11046
  PRIMARY KEY (`f_int2`,`f_int1`),
 
11047
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
11048
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
11049
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
11050
SUBPARTITION BY KEY (f_int1)
 
11051
SUBPARTITIONS 3
 
11052
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
11053
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
11054
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
11055
 
 
11056
unified filelist
 
11057
t1.frm
 
11058
t1.par
 
11059
 
 
11060
# check prerequisites-1 success:    1
 
11061
# check COUNT(*) success:    1
 
11062
# check MIN/MAX(f_int1) success:    1
 
11063
# check MIN/MAX(f_int2) success:    1
 
11064
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11065
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11066
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11067
WHERE f_int1 IN (2,3);
 
11068
ERROR 23000: Can't write; duplicate key in table 't1'
 
11069
# check prerequisites-3 success:    1
 
11070
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
11071
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11072
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11073
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11074
WHERE f_int1 IN (2,3);
 
11075
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11076
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11077
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11078
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11079
WHERE f_int1 IN (2,3);
 
11080
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11081
# check read via f_int1 success: 1
 
11082
# check read via f_int2 success: 1
 
11083
        
 
11084
# check multiple-1 success:     1
 
11085
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11086
        
 
11087
# check multiple-2 success:     1
 
11088
INSERT INTO t1 SELECT * FROM t0_template
 
11089
WHERE MOD(f_int1,3) = 0;
 
11090
        
 
11091
# check multiple-3 success:     1
 
11092
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11093
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11094
AND @max_row_div2 + @max_row_div4;
 
11095
        
 
11096
# check multiple-4 success:     1
 
11097
DELETE FROM t1
 
11098
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11099
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11100
        
 
11101
# check multiple-5 success:     1
 
11102
SELECT COUNT(*) INTO @try_count FROM t0_template
 
11103
WHERE MOD(f_int1,3) = 0
 
11104
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11105
SELECT COUNT(*) INTO @clash_count
 
11106
FROM t1 INNER JOIN t0_template USING(f_int1)
 
11107
WHERE MOD(f_int1,3) = 0
 
11108
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11109
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11110
INSERT INTO t1
 
11111
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11112
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11113
f_charbig = '#SINGLE#';
 
11114
        
 
11115
# check single-1 success:       1
 
11116
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11117
INSERT INTO t1
 
11118
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11119
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11120
f_charbig = '#SINGLE#';
 
11121
        
 
11122
# check single-2 success:       1
 
11123
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11124
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11125
UPDATE t1 SET f_int1 = @cur_value2
 
11126
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11127
        
 
11128
# check single-3 success:       1
 
11129
SET @cur_value1= -1;
 
11130
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11131
UPDATE t1 SET f_int1 = @cur_value1
 
11132
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11133
        
 
11134
# check single-4 success:       1
 
11135
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11136
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11137
        
 
11138
# check single-5 success:       1
 
11139
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11140
        
 
11141
# check single-6 success:       1
 
11142
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11143
        
 
11144
# check single-7 success:       1
 
11145
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11146
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11147
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11148
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11149
f_charbig = '#NULL#';
 
11150
INSERT INTO t1
 
11151
SET f_int1 = NULL , f_int2 = -@max_row,
 
11152
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11153
f_charbig = '#NULL#';
 
11154
ERROR 23000: Column 'f_int1' cannot be null
 
11155
# check null success:    1
 
11156
DELETE FROM t1
 
11157
WHERE f_int1 = 0 AND f_int2 = 0
 
11158
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11159
AND f_charbig = '#NULL#';
 
11160
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11161
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11162
   FROM t0_template source_tab
 
11163
WHERE MOD(f_int1,3) = 0
 
11164
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
11165
ON DUPLICATE KEY
 
11166
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
11167
f_int2 = 2 * @max_row + source_tab.f_int1,
 
11168
f_charbig = 'was updated';
 
11169
        
 
11170
# check unique-1-a success:     1
 
11171
        
 
11172
# check unique-1-b success:     1
 
11173
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11174
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11175
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11176
f_charbig = CONCAT('===',f_char1,'===')
 
11177
WHERE f_charbig = 'was updated';
 
11178
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11179
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
11180
   FROM t0_template source_tab
 
11181
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11182
        
 
11183
# check replace success:        1
 
11184
DELETE FROM t1
 
11185
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
11186
DELETE FROM t1
 
11187
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
11188
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
11189
UPDATE t1 SET f_int2 = f_int1,
 
11190
f_char1 = CAST(f_int1 AS CHAR),
 
11191
f_char2 = CAST(f_int1 AS CHAR),
 
11192
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
11193
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
11194
SET AUTOCOMMIT= 0;
 
11195
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11196
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11197
FROM t0_template source_tab
 
11198
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11199
        
 
11200
# check transactions-1 success:         1
 
11201
COMMIT WORK;
 
11202
        
 
11203
# check transactions-2 success:         1
 
11204
ROLLBACK WORK;
 
11205
        
 
11206
# check transactions-3 success:         1
 
11207
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11208
COMMIT WORK;
 
11209
ROLLBACK WORK;
 
11210
        
 
11211
# check transactions-4 success:         1
 
11212
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11213
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11214
FROM t0_template source_tab
 
11215
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11216
        
 
11217
# check transactions-5 success:         1
 
11218
ROLLBACK WORK;
 
11219
        
 
11220
# check transactions-6 success:         1
 
11221
# INFO: Storage engine used for t1 seems to be transactional.
 
11222
COMMIT;
 
11223
        
 
11224
# check transactions-7 success:         1
 
11225
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11226
COMMIT WORK;
 
11227
SET @@session.sql_mode = 'traditional';
 
11228
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11229
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11230
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11231
'', '', 'was inserted' FROM t0_template
 
11232
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11233
ERROR 22012: Division by 0
 
11234
COMMIT;
 
11235
        
 
11236
# check transactions-8 success:         1
 
11237
# INFO: Storage engine used for t1 seems to be able to revert
 
11238
#       changes made by the failing statement.
 
11239
SET @@session.sql_mode = '';
 
11240
SET AUTOCOMMIT= 1;
 
11241
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11242
COMMIT WORK;
 
11243
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11244
        
 
11245
# check special-1 success:      1
 
11246
UPDATE t1 SET f_charbig = '';
 
11247
        
 
11248
# check special-2 success:      1
 
11249
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11250
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11251
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11255
'just inserted' FROM t0_template
 
11256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11257
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11258
BEGIN
 
11259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11260
f_charbig = 'updated by trigger'
 
11261
      WHERE f_int1 = new.f_int1;
 
11262
END|
 
11263
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11264
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11265
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11266
        
 
11267
# check trigger-1 success:      1
 
11268
DROP TRIGGER trg_1;
 
11269
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11270
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11271
f_charbig = 'just inserted'
 
11272
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11273
DELETE FROM t0_aux
 
11274
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11275
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11276
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11277
'just inserted' FROM t0_template
 
11278
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11279
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11280
BEGIN
 
11281
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11282
f_charbig = 'updated by trigger'
 
11283
      WHERE f_int1 = new.f_int1;
 
11284
END|
 
11285
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11286
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11287
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11288
        
 
11289
# check trigger-2 success:      1
 
11290
DROP TRIGGER trg_1;
 
11291
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11292
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11293
f_charbig = 'just inserted'
 
11294
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11295
DELETE FROM t0_aux
 
11296
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11297
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11298
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11299
'just inserted' FROM t0_template
 
11300
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11301
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11302
BEGIN
 
11303
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11304
f_charbig = 'updated by trigger'
 
11305
      WHERE f_int1 = new.f_int1;
 
11306
END|
 
11307
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11308
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11309
        
 
11310
# check trigger-3 success:      1
 
11311
DROP TRIGGER trg_1;
 
11312
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11313
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11314
f_charbig = 'just inserted'
 
11315
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11316
DELETE FROM t0_aux
 
11317
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11318
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11319
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11320
'just inserted' FROM t0_template
 
11321
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11322
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11323
BEGIN
 
11324
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11325
f_charbig = 'updated by trigger'
 
11326
      WHERE f_int1 = - old.f_int1;
 
11327
END|
 
11328
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11329
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11330
        
 
11331
# check trigger-4 success:      1
 
11332
DROP TRIGGER trg_1;
 
11333
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11334
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11335
f_charbig = 'just inserted'
 
11336
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11337
DELETE FROM t0_aux
 
11338
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11339
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11340
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11341
'just inserted' FROM t0_template
 
11342
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11343
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11344
BEGIN
 
11345
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11346
f_charbig = 'updated by trigger'
 
11347
      WHERE f_int1 = new.f_int1;
 
11348
END|
 
11349
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11350
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11351
        
 
11352
# check trigger-5 success:      1
 
11353
DROP TRIGGER trg_1;
 
11354
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11355
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11356
f_charbig = 'just inserted'
 
11357
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11358
DELETE FROM t0_aux
 
11359
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11360
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11361
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11362
'just inserted' FROM t0_template
 
11363
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11364
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11365
BEGIN
 
11366
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11367
f_charbig = 'updated by trigger'
 
11368
      WHERE f_int1 = - old.f_int1;
 
11369
END|
 
11370
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11371
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11372
        
 
11373
# check trigger-6 success:      1
 
11374
DROP TRIGGER trg_1;
 
11375
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11376
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11377
f_charbig = 'just inserted'
 
11378
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11379
DELETE FROM t0_aux
 
11380
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11381
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11382
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11383
'just inserted' FROM t0_template
 
11384
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11385
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11386
BEGIN
 
11387
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11388
f_charbig = 'updated by trigger'
 
11389
      WHERE f_int1 = - old.f_int1;
 
11390
END|
 
11391
DELETE FROM t0_aux
 
11392
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11393
        
 
11394
# check trigger-7 success:      1
 
11395
DROP TRIGGER trg_1;
 
11396
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11397
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11398
f_charbig = 'just inserted'
 
11399
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11400
DELETE FROM t0_aux
 
11401
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11402
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11403
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11404
'just inserted' FROM t0_template
 
11405
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11406
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11407
BEGIN
 
11408
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11409
f_charbig = 'updated by trigger'
 
11410
      WHERE f_int1 = - old.f_int1;
 
11411
END|
 
11412
DELETE FROM t0_aux
 
11413
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11414
        
 
11415
# check trigger-8 success:      1
 
11416
DROP TRIGGER trg_1;
 
11417
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11418
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11419
f_charbig = 'just inserted'
 
11420
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11421
DELETE FROM t0_aux
 
11422
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11423
DELETE FROM t1
 
11424
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11425
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11426
BEGIN
 
11427
SET new.f_int1 = old.f_int1 + @max_row,
 
11428
new.f_int2 = old.f_int2 - @max_row,
 
11429
new.f_charbig = '####updated per update trigger####';
 
11430
END|
 
11431
UPDATE t1
 
11432
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11433
f_charbig = '####updated per update statement itself####';
 
11434
        
 
11435
# check trigger-9 success:      1
 
11436
DROP TRIGGER trg_2;
 
11437
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11438
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11439
f_charbig = CONCAT('===',f_char1,'===');
 
11440
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11441
BEGIN
 
11442
SET new.f_int1 = new.f_int1 + @max_row,
 
11443
new.f_int2 = new.f_int2 - @max_row,
 
11444
new.f_charbig = '####updated per update trigger####';
 
11445
END|
 
11446
UPDATE t1
 
11447
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11448
f_charbig = '####updated per update statement itself####';
 
11449
        
 
11450
# check trigger-10 success:     1
 
11451
DROP TRIGGER trg_2;
 
11452
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11453
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11454
f_charbig = CONCAT('===',f_char1,'===');
 
11455
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11456
BEGIN
 
11457
SET new.f_int1 = @my_max1 + @counter,
 
11458
new.f_int2 = @my_min2 - @counter,
 
11459
new.f_charbig = '####updated per insert trigger####';
 
11460
SET @counter = @counter + 1;
 
11461
END|
 
11462
SET @counter = 1;
 
11463
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11464
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11465
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11466
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11467
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11468
ORDER BY f_int1;
 
11469
DROP TRIGGER trg_3;
 
11470
        
 
11471
# check trigger-11 success:     1
 
11472
DELETE FROM t1
 
11473
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11474
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11475
AND f_charbig = '####updated per insert trigger####';
 
11476
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11477
BEGIN
 
11478
SET new.f_int1 = @my_max1 + @counter,
 
11479
new.f_int2 = @my_min2 - @counter,
 
11480
new.f_charbig = '####updated per insert trigger####';
 
11481
SET @counter = @counter + 1;
 
11482
END|
 
11483
SET @counter = 1;
 
11484
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11485
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11486
SELECT CAST(f_int1 AS CHAR),
 
11487
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11488
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11489
ORDER BY f_int1;
 
11490
DROP TRIGGER trg_3;
 
11491
        
 
11492
# check trigger-12 success:     1
 
11493
DELETE FROM t1
 
11494
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11495
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11496
AND f_charbig = '####updated per insert trigger####';
 
11497
ANALYZE  TABLE t1;
 
11498
Table   Op      Msg_type        Msg_text
 
11499
test.t1 analyze status  OK
 
11500
CHECK    TABLE t1 EXTENDED;
 
11501
Table   Op      Msg_type        Msg_text
 
11502
test.t1 check   status  OK
 
11503
CHECKSUM TABLE t1 EXTENDED;
 
11504
Table   Checksum
 
11505
test.t1 <some_value>
 
11506
OPTIMIZE TABLE t1;
 
11507
Table   Op      Msg_type        Msg_text
 
11508
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
11509
test.t1 optimize        status  OK
 
11510
# check layout success:    1
 
11511
REPAIR   TABLE t1 EXTENDED;
 
11512
Table   Op      Msg_type        Msg_text
 
11513
test.t1 repair  note    The storage engine for the table doesn't support repair
 
11514
# check layout success:    1
 
11515
TRUNCATE t1;
 
11516
        
 
11517
# check TRUNCATE success:       1
 
11518
# check layout success:    1
 
11519
# End usability test (inc/partition_check.inc)
 
11520
DROP TABLE t1;
 
11521
DROP TABLE IF EXISTS t1;
 
11522
CREATE TABLE t1 (
 
11523
f_int1 INTEGER,
 
11524
f_int2 INTEGER,
 
11525
f_char1 CHAR(20),
 
11526
f_char2 CHAR(20),
 
11527
f_charbig VARCHAR(1000)
 
11528
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
11529
)
 
11530
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
11531
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11532
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
11533
# Start usability test (inc/partition_check.inc)
 
11534
create_command
 
11535
SHOW CREATE TABLE t1;
 
11536
Table   Create Table
 
11537
t1      CREATE TABLE `t1` (
 
11538
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
11539
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
11540
  `f_char1` char(20) DEFAULT NULL,
 
11541
  `f_char2` char(20) DEFAULT NULL,
 
11542
  `f_charbig` varchar(1000) DEFAULT NULL,
 
11543
  PRIMARY KEY (`f_int1`,`f_int2`),
 
11544
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
11545
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
11546
/*!50100 PARTITION BY HASH (f_int1)
 
11547
PARTITIONS 2 */
 
11548
 
 
11549
unified filelist
 
11550
t1.frm
 
11551
t1.par
 
11552
 
 
11553
# check prerequisites-1 success:    1
 
11554
# check COUNT(*) success:    1
 
11555
# check MIN/MAX(f_int1) success:    1
 
11556
# check MIN/MAX(f_int2) success:    1
 
11557
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11558
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11559
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11560
WHERE f_int1 IN (2,3);
 
11561
ERROR 23000: Can't write; duplicate key in table 't1'
 
11562
# check prerequisites-3 success:    1
 
11563
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
11564
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11565
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11566
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11567
WHERE f_int1 IN (2,3);
 
11568
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11569
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11570
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
11571
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
11572
WHERE f_int1 IN (2,3);
 
11573
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11574
# check read via f_int1 success: 1
 
11575
# check read via f_int2 success: 1
 
11576
        
 
11577
# check multiple-1 success:     1
 
11578
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11579
        
 
11580
# check multiple-2 success:     1
 
11581
INSERT INTO t1 SELECT * FROM t0_template
 
11582
WHERE MOD(f_int1,3) = 0;
 
11583
        
 
11584
# check multiple-3 success:     1
 
11585
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11586
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11587
AND @max_row_div2 + @max_row_div4;
 
11588
        
 
11589
# check multiple-4 success:     1
 
11590
DELETE FROM t1
 
11591
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11592
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11593
        
 
11594
# check multiple-5 success:     1
 
11595
SELECT COUNT(*) INTO @try_count FROM t0_template
 
11596
WHERE MOD(f_int1,3) = 0
 
11597
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11598
SELECT COUNT(*) INTO @clash_count
 
11599
FROM t1 INNER JOIN t0_template USING(f_int1)
 
11600
WHERE MOD(f_int1,3) = 0
 
11601
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11602
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11603
INSERT INTO t1
 
11604
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11605
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11606
f_charbig = '#SINGLE#';
 
11607
        
 
11608
# check single-1 success:       1
 
11609
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11610
INSERT INTO t1
 
11611
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11612
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11613
f_charbig = '#SINGLE#';
 
11614
        
 
11615
# check single-2 success:       1
 
11616
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11617
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11618
UPDATE t1 SET f_int1 = @cur_value2
 
11619
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11620
        
 
11621
# check single-3 success:       1
 
11622
SET @cur_value1= -1;
 
11623
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11624
UPDATE t1 SET f_int1 = @cur_value1
 
11625
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11626
        
 
11627
# check single-4 success:       1
 
11628
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11629
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11630
        
 
11631
# check single-5 success:       1
 
11632
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11633
        
 
11634
# check single-6 success:       1
 
11635
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11636
        
 
11637
# check single-7 success:       1
 
11638
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11639
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11640
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11641
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11642
f_charbig = '#NULL#';
 
11643
INSERT INTO t1
 
11644
SET f_int1 = NULL , f_int2 = -@max_row,
 
11645
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11646
f_charbig = '#NULL#';
 
11647
ERROR 23000: Column 'f_int1' cannot be null
 
11648
# check null success:    1
 
11649
DELETE FROM t1
 
11650
WHERE f_int1 = 0 AND f_int2 = 0
 
11651
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11652
AND f_charbig = '#NULL#';
 
11653
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11654
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11655
   FROM t0_template source_tab
 
11656
WHERE MOD(f_int1,3) = 0
 
11657
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
11658
ON DUPLICATE KEY
 
11659
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
11660
f_int2 = 2 * @max_row + source_tab.f_int1,
 
11661
f_charbig = 'was updated';
 
11662
        
 
11663
# check unique-1-a success:     1
 
11664
        
 
11665
# check unique-1-b success:     1
 
11666
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11667
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11668
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11669
f_charbig = CONCAT('===',f_char1,'===')
 
11670
WHERE f_charbig = 'was updated';
 
11671
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11672
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
11673
   FROM t0_template source_tab
 
11674
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11675
        
 
11676
# check replace success:        1
 
11677
DELETE FROM t1
 
11678
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
11679
DELETE FROM t1
 
11680
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
11681
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
11682
UPDATE t1 SET f_int2 = f_int1,
 
11683
f_char1 = CAST(f_int1 AS CHAR),
 
11684
f_char2 = CAST(f_int1 AS CHAR),
 
11685
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
11686
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
11687
SET AUTOCOMMIT= 0;
 
11688
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11689
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11690
FROM t0_template source_tab
 
11691
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11692
        
 
11693
# check transactions-1 success:         1
 
11694
COMMIT WORK;
 
11695
        
 
11696
# check transactions-2 success:         1
 
11697
ROLLBACK WORK;
 
11698
        
 
11699
# check transactions-3 success:         1
 
11700
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11701
COMMIT WORK;
 
11702
ROLLBACK WORK;
 
11703
        
 
11704
# check transactions-4 success:         1
 
11705
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11706
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11707
FROM t0_template source_tab
 
11708
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11709
        
 
11710
# check transactions-5 success:         1
 
11711
ROLLBACK WORK;
 
11712
        
 
11713
# check transactions-6 success:         1
 
11714
# INFO: Storage engine used for t1 seems to be transactional.
 
11715
COMMIT;
 
11716
        
 
11717
# check transactions-7 success:         1
 
11718
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11719
COMMIT WORK;
 
11720
SET @@session.sql_mode = 'traditional';
 
11721
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11722
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11723
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11724
'', '', 'was inserted' FROM t0_template
 
11725
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11726
ERROR 22012: Division by 0
 
11727
COMMIT;
 
11728
        
 
11729
# check transactions-8 success:         1
 
11730
# INFO: Storage engine used for t1 seems to be able to revert
 
11731
#       changes made by the failing statement.
 
11732
SET @@session.sql_mode = '';
 
11733
SET AUTOCOMMIT= 1;
 
11734
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11735
COMMIT WORK;
 
11736
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11737
        
 
11738
# check special-1 success:      1
 
11739
UPDATE t1 SET f_charbig = '';
 
11740
        
 
11741
# check special-2 success:      1
 
11742
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11743
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11744
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11745
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11746
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11747
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11748
'just inserted' FROM t0_template
 
11749
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11750
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11751
BEGIN
 
11752
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11753
f_charbig = 'updated by trigger'
 
11754
      WHERE f_int1 = new.f_int1;
 
11755
END|
 
11756
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11757
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11758
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11759
        
 
11760
# check trigger-1 success:      1
 
11761
DROP TRIGGER trg_1;
 
11762
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11763
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11764
f_charbig = 'just inserted'
 
11765
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11766
DELETE FROM t0_aux
 
11767
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11768
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11769
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11770
'just inserted' FROM t0_template
 
11771
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11772
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11773
BEGIN
 
11774
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11775
f_charbig = 'updated by trigger'
 
11776
      WHERE f_int1 = new.f_int1;
 
11777
END|
 
11778
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11779
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11780
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11781
        
 
11782
# check trigger-2 success:      1
 
11783
DROP TRIGGER trg_1;
 
11784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11786
f_charbig = 'just inserted'
 
11787
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11788
DELETE FROM t0_aux
 
11789
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11790
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11791
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11792
'just inserted' FROM t0_template
 
11793
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11794
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11795
BEGIN
 
11796
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11797
f_charbig = 'updated by trigger'
 
11798
      WHERE f_int1 = new.f_int1;
 
11799
END|
 
11800
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11801
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11802
        
 
11803
# check trigger-3 success:      1
 
11804
DROP TRIGGER trg_1;
 
11805
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11806
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11807
f_charbig = 'just inserted'
 
11808
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11809
DELETE FROM t0_aux
 
11810
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11811
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11812
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11813
'just inserted' FROM t0_template
 
11814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11815
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11816
BEGIN
 
11817
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11818
f_charbig = 'updated by trigger'
 
11819
      WHERE f_int1 = - old.f_int1;
 
11820
END|
 
11821
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11822
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11823
        
 
11824
# check trigger-4 success:      1
 
11825
DROP TRIGGER trg_1;
 
11826
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11827
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11828
f_charbig = 'just inserted'
 
11829
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11830
DELETE FROM t0_aux
 
11831
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11832
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11833
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11834
'just inserted' FROM t0_template
 
11835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11836
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11837
BEGIN
 
11838
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11839
f_charbig = 'updated by trigger'
 
11840
      WHERE f_int1 = new.f_int1;
 
11841
END|
 
11842
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11843
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11844
        
 
11845
# check trigger-5 success:      1
 
11846
DROP TRIGGER trg_1;
 
11847
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11848
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11849
f_charbig = 'just inserted'
 
11850
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11851
DELETE FROM t0_aux
 
11852
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11853
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11854
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11855
'just inserted' FROM t0_template
 
11856
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11857
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11858
BEGIN
 
11859
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11860
f_charbig = 'updated by trigger'
 
11861
      WHERE f_int1 = - old.f_int1;
 
11862
END|
 
11863
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11864
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11865
        
 
11866
# check trigger-6 success:      1
 
11867
DROP TRIGGER trg_1;
 
11868
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11869
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11870
f_charbig = 'just inserted'
 
11871
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11872
DELETE FROM t0_aux
 
11873
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11874
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11875
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11876
'just inserted' FROM t0_template
 
11877
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11878
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11879
BEGIN
 
11880
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11881
f_charbig = 'updated by trigger'
 
11882
      WHERE f_int1 = - old.f_int1;
 
11883
END|
 
11884
DELETE FROM t0_aux
 
11885
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11886
        
 
11887
# check trigger-7 success:      1
 
11888
DROP TRIGGER trg_1;
 
11889
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11890
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11891
f_charbig = 'just inserted'
 
11892
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11893
DELETE FROM t0_aux
 
11894
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11895
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11896
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11897
'just inserted' FROM t0_template
 
11898
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11899
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11900
BEGIN
 
11901
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11902
f_charbig = 'updated by trigger'
 
11903
      WHERE f_int1 = - old.f_int1;
 
11904
END|
 
11905
DELETE FROM t0_aux
 
11906
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11907
        
 
11908
# check trigger-8 success:      1
 
11909
DROP TRIGGER trg_1;
 
11910
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11911
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11912
f_charbig = 'just inserted'
 
11913
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11914
DELETE FROM t0_aux
 
11915
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11916
DELETE FROM t1
 
11917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11918
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11919
BEGIN
 
11920
SET new.f_int1 = old.f_int1 + @max_row,
 
11921
new.f_int2 = old.f_int2 - @max_row,
 
11922
new.f_charbig = '####updated per update trigger####';
 
11923
END|
 
11924
UPDATE t1
 
11925
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11926
f_charbig = '####updated per update statement itself####';
 
11927
        
 
11928
# check trigger-9 success:      1
 
11929
DROP TRIGGER trg_2;
 
11930
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11931
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11932
f_charbig = CONCAT('===',f_char1,'===');
 
11933
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11934
BEGIN
 
11935
SET new.f_int1 = new.f_int1 + @max_row,
 
11936
new.f_int2 = new.f_int2 - @max_row,
 
11937
new.f_charbig = '####updated per update trigger####';
 
11938
END|
 
11939
UPDATE t1
 
11940
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11941
f_charbig = '####updated per update statement itself####';
 
11942
        
 
11943
# check trigger-10 success:     1
 
11944
DROP TRIGGER trg_2;
 
11945
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11946
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11947
f_charbig = CONCAT('===',f_char1,'===');
 
11948
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11949
BEGIN
 
11950
SET new.f_int1 = @my_max1 + @counter,
 
11951
new.f_int2 = @my_min2 - @counter,
 
11952
new.f_charbig = '####updated per insert trigger####';
 
11953
SET @counter = @counter + 1;
 
11954
END|
 
11955
SET @counter = 1;
 
11956
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11957
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11958
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11959
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11960
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11961
ORDER BY f_int1;
 
11962
DROP TRIGGER trg_3;
 
11963
        
 
11964
# check trigger-11 success:     1
 
11965
DELETE FROM t1
 
11966
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11967
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11968
AND f_charbig = '####updated per insert trigger####';
 
11969
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11970
BEGIN
 
11971
SET new.f_int1 = @my_max1 + @counter,
 
11972
new.f_int2 = @my_min2 - @counter,
 
11973
new.f_charbig = '####updated per insert trigger####';
 
11974
SET @counter = @counter + 1;
 
11975
END|
 
11976
SET @counter = 1;
 
11977
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11978
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11979
SELECT CAST(f_int1 AS CHAR),
 
11980
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11981
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11982
ORDER BY f_int1;
 
11983
DROP TRIGGER trg_3;
 
11984
        
 
11985
# check trigger-12 success:     1
 
11986
DELETE FROM t1
 
11987
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11988
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11989
AND f_charbig = '####updated per insert trigger####';
 
11990
ANALYZE  TABLE t1;
 
11991
Table   Op      Msg_type        Msg_text
 
11992
test.t1 analyze status  OK
 
11993
CHECK    TABLE t1 EXTENDED;
 
11994
Table   Op      Msg_type        Msg_text
 
11995
test.t1 check   status  OK
 
11996
CHECKSUM TABLE t1 EXTENDED;
 
11997
Table   Checksum
 
11998
test.t1 <some_value>
 
11999
OPTIMIZE TABLE t1;
 
12000
Table   Op      Msg_type        Msg_text
 
12001
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
12002
test.t1 optimize        status  OK
 
12003
# check layout success:    1
 
12004
REPAIR   TABLE t1 EXTENDED;
 
12005
Table   Op      Msg_type        Msg_text
 
12006
test.t1 repair  note    The storage engine for the table doesn't support repair
 
12007
# check layout success:    1
 
12008
TRUNCATE t1;
 
12009
        
 
12010
# check TRUNCATE success:       1
 
12011
# check layout success:    1
 
12012
# End usability test (inc/partition_check.inc)
 
12013
DROP TABLE t1;
 
12014
CREATE TABLE t1 (
 
12015
f_int1 INTEGER,
 
12016
f_int2 INTEGER,
 
12017
f_char1 CHAR(20),
 
12018
f_char2 CHAR(20),
 
12019
f_charbig VARCHAR(1000)
 
12020
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
12021
)
 
12022
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
12023
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12024
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
12025
# Start usability test (inc/partition_check.inc)
 
12026
create_command
 
12027
SHOW CREATE TABLE t1;
 
12028
Table   Create Table
 
12029
t1      CREATE TABLE `t1` (
 
12030
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
12031
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
12032
  `f_char1` char(20) DEFAULT NULL,
 
12033
  `f_char2` char(20) DEFAULT NULL,
 
12034
  `f_charbig` varchar(1000) DEFAULT NULL,
 
12035
  PRIMARY KEY (`f_int1`,`f_int2`),
 
12036
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
12037
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
12038
/*!50100 PARTITION BY KEY (f_int1)
 
12039
PARTITIONS 5 */
 
12040
 
 
12041
unified filelist
 
12042
t1.frm
 
12043
t1.par
 
12044
 
 
12045
# check prerequisites-1 success:    1
 
12046
# check COUNT(*) success:    1
 
12047
# check MIN/MAX(f_int1) success:    1
 
12048
# check MIN/MAX(f_int2) success:    1
 
12049
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12050
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12051
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12052
WHERE f_int1 IN (2,3);
 
12053
ERROR 23000: Can't write; duplicate key in table 't1'
 
12054
# check prerequisites-3 success:    1
 
12055
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
12056
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12057
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12058
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12059
WHERE f_int1 IN (2,3);
 
12060
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12061
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12062
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12063
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12064
WHERE f_int1 IN (2,3);
 
12065
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12066
# check read via f_int1 success: 1
 
12067
# check read via f_int2 success: 1
 
12068
        
 
12069
# check multiple-1 success:     1
 
12070
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12071
        
 
12072
# check multiple-2 success:     1
 
12073
INSERT INTO t1 SELECT * FROM t0_template
 
12074
WHERE MOD(f_int1,3) = 0;
 
12075
        
 
12076
# check multiple-3 success:     1
 
12077
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12078
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12079
AND @max_row_div2 + @max_row_div4;
 
12080
        
 
12081
# check multiple-4 success:     1
 
12082
DELETE FROM t1
 
12083
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12084
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12085
        
 
12086
# check multiple-5 success:     1
 
12087
SELECT COUNT(*) INTO @try_count FROM t0_template
 
12088
WHERE MOD(f_int1,3) = 0
 
12089
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12090
SELECT COUNT(*) INTO @clash_count
 
12091
FROM t1 INNER JOIN t0_template USING(f_int1)
 
12092
WHERE MOD(f_int1,3) = 0
 
12093
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12094
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12095
INSERT INTO t1
 
12096
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12097
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12098
f_charbig = '#SINGLE#';
 
12099
        
 
12100
# check single-1 success:       1
 
12101
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12102
INSERT INTO t1
 
12103
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12104
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12105
f_charbig = '#SINGLE#';
 
12106
        
 
12107
# check single-2 success:       1
 
12108
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12109
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12110
UPDATE t1 SET f_int1 = @cur_value2
 
12111
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12112
        
 
12113
# check single-3 success:       1
 
12114
SET @cur_value1= -1;
 
12115
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12116
UPDATE t1 SET f_int1 = @cur_value1
 
12117
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12118
        
 
12119
# check single-4 success:       1
 
12120
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12121
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12122
        
 
12123
# check single-5 success:       1
 
12124
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12125
        
 
12126
# check single-6 success:       1
 
12127
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12128
        
 
12129
# check single-7 success:       1
 
12130
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12131
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12132
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12133
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12134
f_charbig = '#NULL#';
 
12135
INSERT INTO t1
 
12136
SET f_int1 = NULL , f_int2 = -@max_row,
 
12137
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12138
f_charbig = '#NULL#';
 
12139
ERROR 23000: Column 'f_int1' cannot be null
 
12140
# check null success:    1
 
12141
DELETE FROM t1
 
12142
WHERE f_int1 = 0 AND f_int2 = 0
 
12143
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12144
AND f_charbig = '#NULL#';
 
12145
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12146
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12147
   FROM t0_template source_tab
 
12148
WHERE MOD(f_int1,3) = 0
 
12149
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
12150
ON DUPLICATE KEY
 
12151
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
12152
f_int2 = 2 * @max_row + source_tab.f_int1,
 
12153
f_charbig = 'was updated';
 
12154
        
 
12155
# check unique-1-a success:     1
 
12156
        
 
12157
# check unique-1-b success:     1
 
12158
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12159
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12160
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12161
f_charbig = CONCAT('===',f_char1,'===')
 
12162
WHERE f_charbig = 'was updated';
 
12163
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12164
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
12165
   FROM t0_template source_tab
 
12166
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12167
        
 
12168
# check replace success:        1
 
12169
DELETE FROM t1
 
12170
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
12171
DELETE FROM t1
 
12172
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
12173
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
12174
UPDATE t1 SET f_int2 = f_int1,
 
12175
f_char1 = CAST(f_int1 AS CHAR),
 
12176
f_char2 = CAST(f_int1 AS CHAR),
 
12177
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
12178
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
12179
SET AUTOCOMMIT= 0;
 
12180
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12181
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12182
FROM t0_template source_tab
 
12183
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12184
        
 
12185
# check transactions-1 success:         1
 
12186
COMMIT WORK;
 
12187
        
 
12188
# check transactions-2 success:         1
 
12189
ROLLBACK WORK;
 
12190
        
 
12191
# check transactions-3 success:         1
 
12192
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12193
COMMIT WORK;
 
12194
ROLLBACK WORK;
 
12195
        
 
12196
# check transactions-4 success:         1
 
12197
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12198
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12199
FROM t0_template source_tab
 
12200
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12201
        
 
12202
# check transactions-5 success:         1
 
12203
ROLLBACK WORK;
 
12204
        
 
12205
# check transactions-6 success:         1
 
12206
# INFO: Storage engine used for t1 seems to be transactional.
 
12207
COMMIT;
 
12208
        
 
12209
# check transactions-7 success:         1
 
12210
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12211
COMMIT WORK;
 
12212
SET @@session.sql_mode = 'traditional';
 
12213
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12214
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12215
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12216
'', '', 'was inserted' FROM t0_template
 
12217
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12218
ERROR 22012: Division by 0
 
12219
COMMIT;
 
12220
        
 
12221
# check transactions-8 success:         1
 
12222
# INFO: Storage engine used for t1 seems to be able to revert
 
12223
#       changes made by the failing statement.
 
12224
SET @@session.sql_mode = '';
 
12225
SET AUTOCOMMIT= 1;
 
12226
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12227
COMMIT WORK;
 
12228
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12229
        
 
12230
# check special-1 success:      1
 
12231
UPDATE t1 SET f_charbig = '';
 
12232
        
 
12233
# check special-2 success:      1
 
12234
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12235
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12236
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12237
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12238
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12239
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12240
'just inserted' FROM t0_template
 
12241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12242
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12243
BEGIN
 
12244
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12245
f_charbig = 'updated by trigger'
 
12246
      WHERE f_int1 = new.f_int1;
 
12247
END|
 
12248
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12249
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12251
        
 
12252
# check trigger-1 success:      1
 
12253
DROP TRIGGER trg_1;
 
12254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12256
f_charbig = 'just inserted'
 
12257
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12258
DELETE FROM t0_aux
 
12259
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12260
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12261
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12262
'just inserted' FROM t0_template
 
12263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12264
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12265
BEGIN
 
12266
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12267
f_charbig = 'updated by trigger'
 
12268
      WHERE f_int1 = new.f_int1;
 
12269
END|
 
12270
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12271
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12272
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12273
        
 
12274
# check trigger-2 success:      1
 
12275
DROP TRIGGER trg_1;
 
12276
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12277
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12278
f_charbig = 'just inserted'
 
12279
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12280
DELETE FROM t0_aux
 
12281
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12282
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12283
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12284
'just inserted' FROM t0_template
 
12285
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12286
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12287
BEGIN
 
12288
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12289
f_charbig = 'updated by trigger'
 
12290
      WHERE f_int1 = new.f_int1;
 
12291
END|
 
12292
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12293
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12294
        
 
12295
# check trigger-3 success:      1
 
12296
DROP TRIGGER trg_1;
 
12297
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12298
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12299
f_charbig = 'just inserted'
 
12300
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12301
DELETE FROM t0_aux
 
12302
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12303
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12304
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12305
'just inserted' FROM t0_template
 
12306
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12307
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12308
BEGIN
 
12309
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12310
f_charbig = 'updated by trigger'
 
12311
      WHERE f_int1 = - old.f_int1;
 
12312
END|
 
12313
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12314
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12315
        
 
12316
# check trigger-4 success:      1
 
12317
DROP TRIGGER trg_1;
 
12318
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12319
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12320
f_charbig = 'just inserted'
 
12321
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12322
DELETE FROM t0_aux
 
12323
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12324
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12325
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12326
'just inserted' FROM t0_template
 
12327
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12328
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12329
BEGIN
 
12330
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12331
f_charbig = 'updated by trigger'
 
12332
      WHERE f_int1 = new.f_int1;
 
12333
END|
 
12334
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12335
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12336
        
 
12337
# check trigger-5 success:      1
 
12338
DROP TRIGGER trg_1;
 
12339
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12340
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12341
f_charbig = 'just inserted'
 
12342
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12343
DELETE FROM t0_aux
 
12344
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12345
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12346
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12347
'just inserted' FROM t0_template
 
12348
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12349
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12350
BEGIN
 
12351
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12352
f_charbig = 'updated by trigger'
 
12353
      WHERE f_int1 = - old.f_int1;
 
12354
END|
 
12355
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12356
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12357
        
 
12358
# check trigger-6 success:      1
 
12359
DROP TRIGGER trg_1;
 
12360
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12361
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12362
f_charbig = 'just inserted'
 
12363
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12364
DELETE FROM t0_aux
 
12365
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12366
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12367
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12368
'just inserted' FROM t0_template
 
12369
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12370
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12371
BEGIN
 
12372
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12373
f_charbig = 'updated by trigger'
 
12374
      WHERE f_int1 = - old.f_int1;
 
12375
END|
 
12376
DELETE FROM t0_aux
 
12377
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12378
        
 
12379
# check trigger-7 success:      1
 
12380
DROP TRIGGER trg_1;
 
12381
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12382
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12383
f_charbig = 'just inserted'
 
12384
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12385
DELETE FROM t0_aux
 
12386
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12387
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12388
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12389
'just inserted' FROM t0_template
 
12390
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12391
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12392
BEGIN
 
12393
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12394
f_charbig = 'updated by trigger'
 
12395
      WHERE f_int1 = - old.f_int1;
 
12396
END|
 
12397
DELETE FROM t0_aux
 
12398
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12399
        
 
12400
# check trigger-8 success:      1
 
12401
DROP TRIGGER trg_1;
 
12402
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12403
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12404
f_charbig = 'just inserted'
 
12405
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12406
DELETE FROM t0_aux
 
12407
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12408
DELETE FROM t1
 
12409
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12410
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12411
BEGIN
 
12412
SET new.f_int1 = old.f_int1 + @max_row,
 
12413
new.f_int2 = old.f_int2 - @max_row,
 
12414
new.f_charbig = '####updated per update trigger####';
 
12415
END|
 
12416
UPDATE t1
 
12417
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12418
f_charbig = '####updated per update statement itself####';
 
12419
        
 
12420
# check trigger-9 success:      1
 
12421
DROP TRIGGER trg_2;
 
12422
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12423
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12424
f_charbig = CONCAT('===',f_char1,'===');
 
12425
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12426
BEGIN
 
12427
SET new.f_int1 = new.f_int1 + @max_row,
 
12428
new.f_int2 = new.f_int2 - @max_row,
 
12429
new.f_charbig = '####updated per update trigger####';
 
12430
END|
 
12431
UPDATE t1
 
12432
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12433
f_charbig = '####updated per update statement itself####';
 
12434
        
 
12435
# check trigger-10 success:     1
 
12436
DROP TRIGGER trg_2;
 
12437
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12438
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12439
f_charbig = CONCAT('===',f_char1,'===');
 
12440
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12441
BEGIN
 
12442
SET new.f_int1 = @my_max1 + @counter,
 
12443
new.f_int2 = @my_min2 - @counter,
 
12444
new.f_charbig = '####updated per insert trigger####';
 
12445
SET @counter = @counter + 1;
 
12446
END|
 
12447
SET @counter = 1;
 
12448
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12449
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12450
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12451
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12452
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12453
ORDER BY f_int1;
 
12454
DROP TRIGGER trg_3;
 
12455
        
 
12456
# check trigger-11 success:     1
 
12457
DELETE FROM t1
 
12458
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12459
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12460
AND f_charbig = '####updated per insert trigger####';
 
12461
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12462
BEGIN
 
12463
SET new.f_int1 = @my_max1 + @counter,
 
12464
new.f_int2 = @my_min2 - @counter,
 
12465
new.f_charbig = '####updated per insert trigger####';
 
12466
SET @counter = @counter + 1;
 
12467
END|
 
12468
SET @counter = 1;
 
12469
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12470
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12471
SELECT CAST(f_int1 AS CHAR),
 
12472
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12473
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12474
ORDER BY f_int1;
 
12475
DROP TRIGGER trg_3;
 
12476
        
 
12477
# check trigger-12 success:     1
 
12478
DELETE FROM t1
 
12479
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12480
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12481
AND f_charbig = '####updated per insert trigger####';
 
12482
ANALYZE  TABLE t1;
 
12483
Table   Op      Msg_type        Msg_text
 
12484
test.t1 analyze status  OK
 
12485
CHECK    TABLE t1 EXTENDED;
 
12486
Table   Op      Msg_type        Msg_text
 
12487
test.t1 check   status  OK
 
12488
CHECKSUM TABLE t1 EXTENDED;
 
12489
Table   Checksum
 
12490
test.t1 <some_value>
 
12491
OPTIMIZE TABLE t1;
 
12492
Table   Op      Msg_type        Msg_text
 
12493
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
12494
test.t1 optimize        status  OK
 
12495
# check layout success:    1
 
12496
REPAIR   TABLE t1 EXTENDED;
 
12497
Table   Op      Msg_type        Msg_text
 
12498
test.t1 repair  note    The storage engine for the table doesn't support repair
 
12499
# check layout success:    1
 
12500
TRUNCATE t1;
 
12501
        
 
12502
# check TRUNCATE success:       1
 
12503
# check layout success:    1
 
12504
# End usability test (inc/partition_check.inc)
 
12505
DROP TABLE t1;
 
12506
CREATE TABLE t1 (
 
12507
f_int1 INTEGER,
 
12508
f_int2 INTEGER,
 
12509
f_char1 CHAR(20),
 
12510
f_char2 CHAR(20),
 
12511
f_charbig VARCHAR(1000)
 
12512
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
12513
)
 
12514
PARTITION BY LIST(MOD(f_int1,4))
 
12515
(PARTITION part_3 VALUES IN (-3),
 
12516
PARTITION part_2 VALUES IN (-2),
 
12517
PARTITION part_1 VALUES IN (-1),
 
12518
PARTITION part_N VALUES IN (NULL),
 
12519
PARTITION part0 VALUES IN (0),
 
12520
PARTITION part1 VALUES IN (1),
 
12521
PARTITION part2 VALUES IN (2),
 
12522
PARTITION part3 VALUES IN (3));
 
12523
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12524
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
12525
# Start usability test (inc/partition_check.inc)
 
12526
create_command
 
12527
SHOW CREATE TABLE t1;
 
12528
Table   Create Table
 
12529
t1      CREATE TABLE `t1` (
 
12530
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
12531
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
12532
  `f_char1` char(20) DEFAULT NULL,
 
12533
  `f_char2` char(20) DEFAULT NULL,
 
12534
  `f_charbig` varchar(1000) DEFAULT NULL,
 
12535
  PRIMARY KEY (`f_int1`,`f_int2`),
 
12536
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
12537
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
12538
/*!50100 PARTITION BY LIST (MOD(f_int1,4))
 
12539
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
12540
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
12541
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
12542
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
12543
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
12544
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
12545
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
12546
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
12547
 
 
12548
unified filelist
 
12549
t1.frm
 
12550
t1.par
 
12551
 
 
12552
# check prerequisites-1 success:    1
 
12553
# check COUNT(*) success:    1
 
12554
# check MIN/MAX(f_int1) success:    1
 
12555
# check MIN/MAX(f_int2) success:    1
 
12556
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12557
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12558
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12559
WHERE f_int1 IN (2,3);
 
12560
ERROR 23000: Can't write; duplicate key in table 't1'
 
12561
# check prerequisites-3 success:    1
 
12562
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
12563
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12564
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12565
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12566
WHERE f_int1 IN (2,3);
 
12567
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12568
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12569
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
12570
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
12571
WHERE f_int1 IN (2,3);
 
12572
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12573
# check read via f_int1 success: 1
 
12574
# check read via f_int2 success: 1
 
12575
        
 
12576
# check multiple-1 success:     1
 
12577
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12578
        
 
12579
# check multiple-2 success:     1
 
12580
INSERT INTO t1 SELECT * FROM t0_template
 
12581
WHERE MOD(f_int1,3) = 0;
 
12582
        
 
12583
# check multiple-3 success:     1
 
12584
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12585
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12586
AND @max_row_div2 + @max_row_div4;
 
12587
        
 
12588
# check multiple-4 success:     1
 
12589
DELETE FROM t1
 
12590
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12591
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12592
        
 
12593
# check multiple-5 success:     1
 
12594
SELECT COUNT(*) INTO @try_count FROM t0_template
 
12595
WHERE MOD(f_int1,3) = 0
 
12596
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12597
SELECT COUNT(*) INTO @clash_count
 
12598
FROM t1 INNER JOIN t0_template USING(f_int1)
 
12599
WHERE MOD(f_int1,3) = 0
 
12600
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12601
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12602
INSERT INTO t1
 
12603
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12604
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12605
f_charbig = '#SINGLE#';
 
12606
        
 
12607
# check single-1 success:       1
 
12608
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12609
INSERT INTO t1
 
12610
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12611
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12612
f_charbig = '#SINGLE#';
 
12613
        
 
12614
# check single-2 success:       1
 
12615
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12616
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12617
UPDATE t1 SET f_int1 = @cur_value2
 
12618
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12619
        
 
12620
# check single-3 success:       1
 
12621
SET @cur_value1= -1;
 
12622
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12623
UPDATE t1 SET f_int1 = @cur_value1
 
12624
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12625
        
 
12626
# check single-4 success:       1
 
12627
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12628
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12629
        
 
12630
# check single-5 success:       1
 
12631
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12632
        
 
12633
# check single-6 success:       1
 
12634
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12635
        
 
12636
# check single-7 success:       1
 
12637
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12638
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12639
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12640
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12641
f_charbig = '#NULL#';
 
12642
INSERT INTO t1
 
12643
SET f_int1 = NULL , f_int2 = -@max_row,
 
12644
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12645
f_charbig = '#NULL#';
 
12646
ERROR 23000: Column 'f_int1' cannot be null
 
12647
# check null success:    1
 
12648
DELETE FROM t1
 
12649
WHERE f_int1 = 0 AND f_int2 = 0
 
12650
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12651
AND f_charbig = '#NULL#';
 
12652
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12653
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12654
   FROM t0_template source_tab
 
12655
WHERE MOD(f_int1,3) = 0
 
12656
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
12657
ON DUPLICATE KEY
 
12658
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
12659
f_int2 = 2 * @max_row + source_tab.f_int1,
 
12660
f_charbig = 'was updated';
 
12661
        
 
12662
# check unique-1-a success:     1
 
12663
        
 
12664
# check unique-1-b success:     1
 
12665
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12666
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12667
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12668
f_charbig = CONCAT('===',f_char1,'===')
 
12669
WHERE f_charbig = 'was updated';
 
12670
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12671
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
12672
   FROM t0_template source_tab
 
12673
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12674
        
 
12675
# check replace success:        1
 
12676
DELETE FROM t1
 
12677
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
12678
DELETE FROM t1
 
12679
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
12680
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
12681
UPDATE t1 SET f_int2 = f_int1,
 
12682
f_char1 = CAST(f_int1 AS CHAR),
 
12683
f_char2 = CAST(f_int1 AS CHAR),
 
12684
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
12685
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
12686
SET AUTOCOMMIT= 0;
 
12687
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12688
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12689
FROM t0_template source_tab
 
12690
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12691
        
 
12692
# check transactions-1 success:         1
 
12693
COMMIT WORK;
 
12694
        
 
12695
# check transactions-2 success:         1
 
12696
ROLLBACK WORK;
 
12697
        
 
12698
# check transactions-3 success:         1
 
12699
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12700
COMMIT WORK;
 
12701
ROLLBACK WORK;
 
12702
        
 
12703
# check transactions-4 success:         1
 
12704
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12705
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12706
FROM t0_template source_tab
 
12707
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12708
        
 
12709
# check transactions-5 success:         1
 
12710
ROLLBACK WORK;
 
12711
        
 
12712
# check transactions-6 success:         1
 
12713
# INFO: Storage engine used for t1 seems to be transactional.
 
12714
COMMIT;
 
12715
        
 
12716
# check transactions-7 success:         1
 
12717
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12718
COMMIT WORK;
 
12719
SET @@session.sql_mode = 'traditional';
 
12720
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12721
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12722
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12723
'', '', 'was inserted' FROM t0_template
 
12724
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12725
ERROR 22012: Division by 0
 
12726
COMMIT;
 
12727
        
 
12728
# check transactions-8 success:         1
 
12729
# INFO: Storage engine used for t1 seems to be able to revert
 
12730
#       changes made by the failing statement.
 
12731
SET @@session.sql_mode = '';
 
12732
SET AUTOCOMMIT= 1;
 
12733
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12734
COMMIT WORK;
 
12735
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12736
        
 
12737
# check special-1 success:      1
 
12738
UPDATE t1 SET f_charbig = '';
 
12739
        
 
12740
# check special-2 success:      1
 
12741
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12742
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12743
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12744
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12745
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12746
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12747
'just inserted' FROM t0_template
 
12748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12749
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12750
BEGIN
 
12751
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12752
f_charbig = 'updated by trigger'
 
12753
      WHERE f_int1 = new.f_int1;
 
12754
END|
 
12755
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12756
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12758
        
 
12759
# check trigger-1 success:      1
 
12760
DROP TRIGGER trg_1;
 
12761
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12762
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12763
f_charbig = 'just inserted'
 
12764
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12765
DELETE FROM t0_aux
 
12766
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12767
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12768
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12769
'just inserted' FROM t0_template
 
12770
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12771
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12772
BEGIN
 
12773
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12774
f_charbig = 'updated by trigger'
 
12775
      WHERE f_int1 = new.f_int1;
 
12776
END|
 
12777
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12778
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12779
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12780
        
 
12781
# check trigger-2 success:      1
 
12782
DROP TRIGGER trg_1;
 
12783
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12784
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12785
f_charbig = 'just inserted'
 
12786
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12787
DELETE FROM t0_aux
 
12788
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12789
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12790
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12791
'just inserted' FROM t0_template
 
12792
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12793
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12794
BEGIN
 
12795
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12796
f_charbig = 'updated by trigger'
 
12797
      WHERE f_int1 = new.f_int1;
 
12798
END|
 
12799
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12800
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12801
        
 
12802
# check trigger-3 success:      1
 
12803
DROP TRIGGER trg_1;
 
12804
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12805
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12806
f_charbig = 'just inserted'
 
12807
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12808
DELETE FROM t0_aux
 
12809
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12810
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12811
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12812
'just inserted' FROM t0_template
 
12813
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12814
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12815
BEGIN
 
12816
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12817
f_charbig = 'updated by trigger'
 
12818
      WHERE f_int1 = - old.f_int1;
 
12819
END|
 
12820
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12821
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12822
        
 
12823
# check trigger-4 success:      1
 
12824
DROP TRIGGER trg_1;
 
12825
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12826
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12827
f_charbig = 'just inserted'
 
12828
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12829
DELETE FROM t0_aux
 
12830
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12831
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12832
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12833
'just inserted' FROM t0_template
 
12834
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12835
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12836
BEGIN
 
12837
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12838
f_charbig = 'updated by trigger'
 
12839
      WHERE f_int1 = new.f_int1;
 
12840
END|
 
12841
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12842
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12843
        
 
12844
# check trigger-5 success:      1
 
12845
DROP TRIGGER trg_1;
 
12846
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12847
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12848
f_charbig = 'just inserted'
 
12849
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12850
DELETE FROM t0_aux
 
12851
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12852
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12853
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12854
'just inserted' FROM t0_template
 
12855
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12856
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12857
BEGIN
 
12858
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12859
f_charbig = 'updated by trigger'
 
12860
      WHERE f_int1 = - old.f_int1;
 
12861
END|
 
12862
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12863
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12864
        
 
12865
# check trigger-6 success:      1
 
12866
DROP TRIGGER trg_1;
 
12867
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12868
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12869
f_charbig = 'just inserted'
 
12870
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12871
DELETE FROM t0_aux
 
12872
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12873
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12874
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12875
'just inserted' FROM t0_template
 
12876
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12877
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12878
BEGIN
 
12879
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12880
f_charbig = 'updated by trigger'
 
12881
      WHERE f_int1 = - old.f_int1;
 
12882
END|
 
12883
DELETE FROM t0_aux
 
12884
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12885
        
 
12886
# check trigger-7 success:      1
 
12887
DROP TRIGGER trg_1;
 
12888
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12889
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12890
f_charbig = 'just inserted'
 
12891
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12892
DELETE FROM t0_aux
 
12893
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12894
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12895
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12896
'just inserted' FROM t0_template
 
12897
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12898
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12899
BEGIN
 
12900
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12901
f_charbig = 'updated by trigger'
 
12902
      WHERE f_int1 = - old.f_int1;
 
12903
END|
 
12904
DELETE FROM t0_aux
 
12905
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12906
        
 
12907
# check trigger-8 success:      1
 
12908
DROP TRIGGER trg_1;
 
12909
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12910
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12911
f_charbig = 'just inserted'
 
12912
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12913
DELETE FROM t0_aux
 
12914
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12915
DELETE FROM t1
 
12916
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12917
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12918
BEGIN
 
12919
SET new.f_int1 = old.f_int1 + @max_row,
 
12920
new.f_int2 = old.f_int2 - @max_row,
 
12921
new.f_charbig = '####updated per update trigger####';
 
12922
END|
 
12923
UPDATE t1
 
12924
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12925
f_charbig = '####updated per update statement itself####';
 
12926
        
 
12927
# check trigger-9 success:      1
 
12928
DROP TRIGGER trg_2;
 
12929
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12930
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12931
f_charbig = CONCAT('===',f_char1,'===');
 
12932
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12933
BEGIN
 
12934
SET new.f_int1 = new.f_int1 + @max_row,
 
12935
new.f_int2 = new.f_int2 - @max_row,
 
12936
new.f_charbig = '####updated per update trigger####';
 
12937
END|
 
12938
UPDATE t1
 
12939
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12940
f_charbig = '####updated per update statement itself####';
 
12941
        
 
12942
# check trigger-10 success:     1
 
12943
DROP TRIGGER trg_2;
 
12944
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12945
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12946
f_charbig = CONCAT('===',f_char1,'===');
 
12947
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12948
BEGIN
 
12949
SET new.f_int1 = @my_max1 + @counter,
 
12950
new.f_int2 = @my_min2 - @counter,
 
12951
new.f_charbig = '####updated per insert trigger####';
 
12952
SET @counter = @counter + 1;
 
12953
END|
 
12954
SET @counter = 1;
 
12955
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12957
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12958
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12960
ORDER BY f_int1;
 
12961
DROP TRIGGER trg_3;
 
12962
        
 
12963
# check trigger-11 success:     1
 
12964
DELETE FROM t1
 
12965
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12966
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12967
AND f_charbig = '####updated per insert trigger####';
 
12968
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12969
BEGIN
 
12970
SET new.f_int1 = @my_max1 + @counter,
 
12971
new.f_int2 = @my_min2 - @counter,
 
12972
new.f_charbig = '####updated per insert trigger####';
 
12973
SET @counter = @counter + 1;
 
12974
END|
 
12975
SET @counter = 1;
 
12976
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12977
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12978
SELECT CAST(f_int1 AS CHAR),
 
12979
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12980
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12981
ORDER BY f_int1;
 
12982
DROP TRIGGER trg_3;
 
12983
        
 
12984
# check trigger-12 success:     1
 
12985
DELETE FROM t1
 
12986
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12987
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12988
AND f_charbig = '####updated per insert trigger####';
 
12989
ANALYZE  TABLE t1;
 
12990
Table   Op      Msg_type        Msg_text
 
12991
test.t1 analyze status  OK
 
12992
CHECK    TABLE t1 EXTENDED;
 
12993
Table   Op      Msg_type        Msg_text
 
12994
test.t1 check   status  OK
 
12995
CHECKSUM TABLE t1 EXTENDED;
 
12996
Table   Checksum
 
12997
test.t1 <some_value>
 
12998
OPTIMIZE TABLE t1;
 
12999
Table   Op      Msg_type        Msg_text
 
13000
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
13001
test.t1 optimize        status  OK
 
13002
# check layout success:    1
 
13003
REPAIR   TABLE t1 EXTENDED;
 
13004
Table   Op      Msg_type        Msg_text
 
13005
test.t1 repair  note    The storage engine for the table doesn't support repair
 
13006
# check layout success:    1
 
13007
TRUNCATE t1;
 
13008
        
 
13009
# check TRUNCATE success:       1
 
13010
# check layout success:    1
 
13011
# End usability test (inc/partition_check.inc)
 
13012
DROP TABLE t1;
 
13013
CREATE TABLE t1 (
 
13014
f_int1 INTEGER,
 
13015
f_int2 INTEGER,
 
13016
f_char1 CHAR(20),
 
13017
f_char2 CHAR(20),
 
13018
f_charbig VARCHAR(1000)
 
13019
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
13020
)
 
13021
PARTITION BY RANGE(f_int1)
 
13022
(PARTITION parta VALUES LESS THAN (0),
 
13023
PARTITION partb VALUES LESS THAN (5),
 
13024
PARTITION partc VALUES LESS THAN (10),
 
13025
PARTITION partd VALUES LESS THAN (10 + 5),
 
13026
PARTITION parte VALUES LESS THAN (20),
 
13027
PARTITION partf VALUES LESS THAN (2147483646));
 
13028
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13029
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
13030
# Start usability test (inc/partition_check.inc)
 
13031
create_command
 
13032
SHOW CREATE TABLE t1;
 
13033
Table   Create Table
 
13034
t1      CREATE TABLE `t1` (
 
13035
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
13036
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
13037
  `f_char1` char(20) DEFAULT NULL,
 
13038
  `f_char2` char(20) DEFAULT NULL,
 
13039
  `f_charbig` varchar(1000) DEFAULT NULL,
 
13040
  PRIMARY KEY (`f_int1`,`f_int2`),
 
13041
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
13042
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
13043
/*!50100 PARTITION BY RANGE (f_int1)
 
13044
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
13045
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
13046
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
13047
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
13048
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
13049
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
13050
 
 
13051
unified filelist
 
13052
t1.frm
 
13053
t1.par
 
13054
 
 
13055
# check prerequisites-1 success:    1
 
13056
# check COUNT(*) success:    1
 
13057
# check MIN/MAX(f_int1) success:    1
 
13058
# check MIN/MAX(f_int2) success:    1
 
13059
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13060
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13061
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13062
WHERE f_int1 IN (2,3);
 
13063
ERROR 23000: Can't write; duplicate key in table 't1'
 
13064
# check prerequisites-3 success:    1
 
13065
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
13066
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13067
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13068
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13069
WHERE f_int1 IN (2,3);
 
13070
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13071
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13072
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13073
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13074
WHERE f_int1 IN (2,3);
 
13075
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13076
# check read via f_int1 success: 1
 
13077
# check read via f_int2 success: 1
 
13078
        
 
13079
# check multiple-1 success:     1
 
13080
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13081
        
 
13082
# check multiple-2 success:     1
 
13083
INSERT INTO t1 SELECT * FROM t0_template
 
13084
WHERE MOD(f_int1,3) = 0;
 
13085
        
 
13086
# check multiple-3 success:     1
 
13087
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13088
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13089
AND @max_row_div2 + @max_row_div4;
 
13090
        
 
13091
# check multiple-4 success:     1
 
13092
DELETE FROM t1
 
13093
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13094
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13095
        
 
13096
# check multiple-5 success:     1
 
13097
SELECT COUNT(*) INTO @try_count FROM t0_template
 
13098
WHERE MOD(f_int1,3) = 0
 
13099
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13100
SELECT COUNT(*) INTO @clash_count
 
13101
FROM t1 INNER JOIN t0_template USING(f_int1)
 
13102
WHERE MOD(f_int1,3) = 0
 
13103
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13104
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13105
INSERT INTO t1
 
13106
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13107
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13108
f_charbig = '#SINGLE#';
 
13109
        
 
13110
# check single-1 success:       1
 
13111
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13112
INSERT INTO t1
 
13113
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13114
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13115
f_charbig = '#SINGLE#';
 
13116
        
 
13117
# check single-2 success:       1
 
13118
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13119
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13120
UPDATE t1 SET f_int1 = @cur_value2
 
13121
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13122
        
 
13123
# check single-3 success:       1
 
13124
SET @cur_value1= -1;
 
13125
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13126
UPDATE t1 SET f_int1 = @cur_value1
 
13127
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13128
        
 
13129
# check single-4 success:       1
 
13130
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13131
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13132
        
 
13133
# check single-5 success:       1
 
13134
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13135
        
 
13136
# check single-6 success:       1
 
13137
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13138
ERROR HY000: Table has no partition for value 2147483647
 
13139
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13140
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13141
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13142
f_charbig = '#NULL#';
 
13143
INSERT INTO t1
 
13144
SET f_int1 = NULL , f_int2 = -@max_row,
 
13145
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13146
f_charbig = '#NULL#';
 
13147
ERROR 23000: Column 'f_int1' cannot be null
 
13148
# check null success:    1
 
13149
DELETE FROM t1
 
13150
WHERE f_int1 = 0 AND f_int2 = 0
 
13151
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13152
AND f_charbig = '#NULL#';
 
13153
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13154
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13155
   FROM t0_template source_tab
 
13156
WHERE MOD(f_int1,3) = 0
 
13157
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
13158
ON DUPLICATE KEY
 
13159
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
13160
f_int2 = 2 * @max_row + source_tab.f_int1,
 
13161
f_charbig = 'was updated';
 
13162
        
 
13163
# check unique-1-a success:     1
 
13164
        
 
13165
# check unique-1-b success:     1
 
13166
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13167
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13168
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13169
f_charbig = CONCAT('===',f_char1,'===')
 
13170
WHERE f_charbig = 'was updated';
 
13171
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13172
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
13173
   FROM t0_template source_tab
 
13174
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13175
        
 
13176
# check replace success:        1
 
13177
DELETE FROM t1
 
13178
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
13179
DELETE FROM t1
 
13180
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
13181
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
13182
UPDATE t1 SET f_int2 = f_int1,
 
13183
f_char1 = CAST(f_int1 AS CHAR),
 
13184
f_char2 = CAST(f_int1 AS CHAR),
 
13185
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
13186
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
13187
SET AUTOCOMMIT= 0;
 
13188
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13189
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13190
FROM t0_template source_tab
 
13191
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13192
        
 
13193
# check transactions-1 success:         1
 
13194
COMMIT WORK;
 
13195
        
 
13196
# check transactions-2 success:         1
 
13197
ROLLBACK WORK;
 
13198
        
 
13199
# check transactions-3 success:         1
 
13200
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13201
COMMIT WORK;
 
13202
ROLLBACK WORK;
 
13203
        
 
13204
# check transactions-4 success:         1
 
13205
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13206
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13207
FROM t0_template source_tab
 
13208
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13209
        
 
13210
# check transactions-5 success:         1
 
13211
ROLLBACK WORK;
 
13212
        
 
13213
# check transactions-6 success:         1
 
13214
# INFO: Storage engine used for t1 seems to be transactional.
 
13215
COMMIT;
 
13216
        
 
13217
# check transactions-7 success:         1
 
13218
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13219
COMMIT WORK;
 
13220
SET @@session.sql_mode = 'traditional';
 
13221
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13222
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13223
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13224
'', '', 'was inserted' FROM t0_template
 
13225
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13226
ERROR 22012: Division by 0
 
13227
COMMIT;
 
13228
        
 
13229
# check transactions-8 success:         1
 
13230
# INFO: Storage engine used for t1 seems to be able to revert
 
13231
#       changes made by the failing statement.
 
13232
SET @@session.sql_mode = '';
 
13233
SET AUTOCOMMIT= 1;
 
13234
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13235
COMMIT WORK;
 
13236
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13237
        
 
13238
# check special-1 success:      1
 
13239
UPDATE t1 SET f_charbig = '';
 
13240
        
 
13241
# check special-2 success:      1
 
13242
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13243
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13244
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13245
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13246
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13247
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13248
'just inserted' FROM t0_template
 
13249
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13250
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13251
BEGIN
 
13252
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13253
f_charbig = 'updated by trigger'
 
13254
      WHERE f_int1 = new.f_int1;
 
13255
END|
 
13256
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13257
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13258
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13259
        
 
13260
# check trigger-1 success:      1
 
13261
DROP TRIGGER trg_1;
 
13262
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13263
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13264
f_charbig = 'just inserted'
 
13265
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13266
DELETE FROM t0_aux
 
13267
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13268
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13269
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13270
'just inserted' FROM t0_template
 
13271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13272
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13273
BEGIN
 
13274
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13275
f_charbig = 'updated by trigger'
 
13276
      WHERE f_int1 = new.f_int1;
 
13277
END|
 
13278
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13279
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13280
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13281
        
 
13282
# check trigger-2 success:      1
 
13283
DROP TRIGGER trg_1;
 
13284
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13285
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13286
f_charbig = 'just inserted'
 
13287
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13288
DELETE FROM t0_aux
 
13289
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13290
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13291
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13292
'just inserted' FROM t0_template
 
13293
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13294
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13295
BEGIN
 
13296
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13297
f_charbig = 'updated by trigger'
 
13298
      WHERE f_int1 = new.f_int1;
 
13299
END|
 
13300
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13301
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13302
        
 
13303
# check trigger-3 success:      1
 
13304
DROP TRIGGER trg_1;
 
13305
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13306
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13307
f_charbig = 'just inserted'
 
13308
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13309
DELETE FROM t0_aux
 
13310
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13311
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13312
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13313
'just inserted' FROM t0_template
 
13314
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13315
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13316
BEGIN
 
13317
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13318
f_charbig = 'updated by trigger'
 
13319
      WHERE f_int1 = - old.f_int1;
 
13320
END|
 
13321
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13322
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13323
        
 
13324
# check trigger-4 success:      1
 
13325
DROP TRIGGER trg_1;
 
13326
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13327
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13328
f_charbig = 'just inserted'
 
13329
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13330
DELETE FROM t0_aux
 
13331
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13332
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13333
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13334
'just inserted' FROM t0_template
 
13335
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13336
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13337
BEGIN
 
13338
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13339
f_charbig = 'updated by trigger'
 
13340
      WHERE f_int1 = new.f_int1;
 
13341
END|
 
13342
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13343
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13344
        
 
13345
# check trigger-5 success:      1
 
13346
DROP TRIGGER trg_1;
 
13347
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13348
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13349
f_charbig = 'just inserted'
 
13350
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13351
DELETE FROM t0_aux
 
13352
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13353
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13354
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13355
'just inserted' FROM t0_template
 
13356
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13357
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13358
BEGIN
 
13359
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13360
f_charbig = 'updated by trigger'
 
13361
      WHERE f_int1 = - old.f_int1;
 
13362
END|
 
13363
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13364
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13365
        
 
13366
# check trigger-6 success:      1
 
13367
DROP TRIGGER trg_1;
 
13368
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13369
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13370
f_charbig = 'just inserted'
 
13371
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13372
DELETE FROM t0_aux
 
13373
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13374
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13375
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13376
'just inserted' FROM t0_template
 
13377
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13378
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13379
BEGIN
 
13380
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13381
f_charbig = 'updated by trigger'
 
13382
      WHERE f_int1 = - old.f_int1;
 
13383
END|
 
13384
DELETE FROM t0_aux
 
13385
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13386
        
 
13387
# check trigger-7 success:      1
 
13388
DROP TRIGGER trg_1;
 
13389
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13390
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13391
f_charbig = 'just inserted'
 
13392
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13393
DELETE FROM t0_aux
 
13394
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13395
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13396
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13397
'just inserted' FROM t0_template
 
13398
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13399
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13400
BEGIN
 
13401
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13402
f_charbig = 'updated by trigger'
 
13403
      WHERE f_int1 = - old.f_int1;
 
13404
END|
 
13405
DELETE FROM t0_aux
 
13406
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13407
        
 
13408
# check trigger-8 success:      1
 
13409
DROP TRIGGER trg_1;
 
13410
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13411
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13412
f_charbig = 'just inserted'
 
13413
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13414
DELETE FROM t0_aux
 
13415
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13416
DELETE FROM t1
 
13417
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13418
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13419
BEGIN
 
13420
SET new.f_int1 = old.f_int1 + @max_row,
 
13421
new.f_int2 = old.f_int2 - @max_row,
 
13422
new.f_charbig = '####updated per update trigger####';
 
13423
END|
 
13424
UPDATE t1
 
13425
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13426
f_charbig = '####updated per update statement itself####';
 
13427
        
 
13428
# check trigger-9 success:      1
 
13429
DROP TRIGGER trg_2;
 
13430
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13431
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13432
f_charbig = CONCAT('===',f_char1,'===');
 
13433
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13434
BEGIN
 
13435
SET new.f_int1 = new.f_int1 + @max_row,
 
13436
new.f_int2 = new.f_int2 - @max_row,
 
13437
new.f_charbig = '####updated per update trigger####';
 
13438
END|
 
13439
UPDATE t1
 
13440
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13441
f_charbig = '####updated per update statement itself####';
 
13442
        
 
13443
# check trigger-10 success:     1
 
13444
DROP TRIGGER trg_2;
 
13445
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13446
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13447
f_charbig = CONCAT('===',f_char1,'===');
 
13448
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13449
BEGIN
 
13450
SET new.f_int1 = @my_max1 + @counter,
 
13451
new.f_int2 = @my_min2 - @counter,
 
13452
new.f_charbig = '####updated per insert trigger####';
 
13453
SET @counter = @counter + 1;
 
13454
END|
 
13455
SET @counter = 1;
 
13456
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13457
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13458
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13459
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13461
ORDER BY f_int1;
 
13462
DROP TRIGGER trg_3;
 
13463
        
 
13464
# check trigger-11 success:     1
 
13465
DELETE FROM t1
 
13466
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13467
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13468
AND f_charbig = '####updated per insert trigger####';
 
13469
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13470
BEGIN
 
13471
SET new.f_int1 = @my_max1 + @counter,
 
13472
new.f_int2 = @my_min2 - @counter,
 
13473
new.f_charbig = '####updated per insert trigger####';
 
13474
SET @counter = @counter + 1;
 
13475
END|
 
13476
SET @counter = 1;
 
13477
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13478
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13479
SELECT CAST(f_int1 AS CHAR),
 
13480
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13481
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13482
ORDER BY f_int1;
 
13483
DROP TRIGGER trg_3;
 
13484
        
 
13485
# check trigger-12 success:     1
 
13486
DELETE FROM t1
 
13487
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13488
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13489
AND f_charbig = '####updated per insert trigger####';
 
13490
ANALYZE  TABLE t1;
 
13491
Table   Op      Msg_type        Msg_text
 
13492
test.t1 analyze status  OK
 
13493
CHECK    TABLE t1 EXTENDED;
 
13494
Table   Op      Msg_type        Msg_text
 
13495
test.t1 check   status  OK
 
13496
CHECKSUM TABLE t1 EXTENDED;
 
13497
Table   Checksum
 
13498
test.t1 <some_value>
 
13499
OPTIMIZE TABLE t1;
 
13500
Table   Op      Msg_type        Msg_text
 
13501
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
13502
test.t1 optimize        status  OK
 
13503
# check layout success:    1
 
13504
REPAIR   TABLE t1 EXTENDED;
 
13505
Table   Op      Msg_type        Msg_text
 
13506
test.t1 repair  note    The storage engine for the table doesn't support repair
 
13507
# check layout success:    1
 
13508
TRUNCATE t1;
 
13509
        
 
13510
# check TRUNCATE success:       1
 
13511
# check layout success:    1
 
13512
# End usability test (inc/partition_check.inc)
 
13513
DROP TABLE t1;
 
13514
CREATE TABLE t1 (
 
13515
f_int1 INTEGER,
 
13516
f_int2 INTEGER,
 
13517
f_char1 CHAR(20),
 
13518
f_char2 CHAR(20),
 
13519
f_charbig VARCHAR(1000)
 
13520
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
13521
)
 
13522
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
13523
(PARTITION parta VALUES LESS THAN (0),
 
13524
PARTITION partb VALUES LESS THAN (5),
 
13525
PARTITION partc VALUES LESS THAN (10),
 
13526
PARTITION partd VALUES LESS THAN (2147483646));
 
13527
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13528
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
13529
# Start usability test (inc/partition_check.inc)
 
13530
create_command
 
13531
SHOW CREATE TABLE t1;
 
13532
Table   Create Table
 
13533
t1      CREATE TABLE `t1` (
 
13534
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
13535
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
13536
  `f_char1` char(20) DEFAULT NULL,
 
13537
  `f_char2` char(20) DEFAULT NULL,
 
13538
  `f_charbig` varchar(1000) DEFAULT NULL,
 
13539
  PRIMARY KEY (`f_int1`,`f_int2`),
 
13540
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
13541
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
13542
/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
 
13543
SUBPARTITION BY HASH (f_int1)
 
13544
SUBPARTITIONS 2
 
13545
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
13546
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
13547
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
13548
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
13549
 
 
13550
unified filelist
 
13551
t1.frm
 
13552
t1.par
 
13553
 
 
13554
# check prerequisites-1 success:    1
 
13555
# check COUNT(*) success:    1
 
13556
# check MIN/MAX(f_int1) success:    1
 
13557
# check MIN/MAX(f_int2) success:    1
 
13558
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13559
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13560
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13561
WHERE f_int1 IN (2,3);
 
13562
ERROR 23000: Can't write; duplicate key in table 't1'
 
13563
# check prerequisites-3 success:    1
 
13564
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
13565
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13566
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13567
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13568
WHERE f_int1 IN (2,3);
 
13569
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13570
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13571
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
13572
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
13573
WHERE f_int1 IN (2,3);
 
13574
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13575
# check read via f_int1 success: 1
 
13576
# check read via f_int2 success: 1
 
13577
        
 
13578
# check multiple-1 success:     1
 
13579
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13580
        
 
13581
# check multiple-2 success:     1
 
13582
INSERT INTO t1 SELECT * FROM t0_template
 
13583
WHERE MOD(f_int1,3) = 0;
 
13584
        
 
13585
# check multiple-3 success:     1
 
13586
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13587
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13588
AND @max_row_div2 + @max_row_div4;
 
13589
        
 
13590
# check multiple-4 success:     1
 
13591
DELETE FROM t1
 
13592
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13593
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13594
        
 
13595
# check multiple-5 success:     1
 
13596
SELECT COUNT(*) INTO @try_count FROM t0_template
 
13597
WHERE MOD(f_int1,3) = 0
 
13598
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13599
SELECT COUNT(*) INTO @clash_count
 
13600
FROM t1 INNER JOIN t0_template USING(f_int1)
 
13601
WHERE MOD(f_int1,3) = 0
 
13602
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13603
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13604
INSERT INTO t1
 
13605
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13606
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13607
f_charbig = '#SINGLE#';
 
13608
        
 
13609
# check single-1 success:       1
 
13610
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13611
INSERT INTO t1
 
13612
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13613
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13614
f_charbig = '#SINGLE#';
 
13615
        
 
13616
# check single-2 success:       1
 
13617
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13618
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13619
UPDATE t1 SET f_int1 = @cur_value2
 
13620
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13621
        
 
13622
# check single-3 success:       1
 
13623
SET @cur_value1= -1;
 
13624
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13625
UPDATE t1 SET f_int1 = @cur_value1
 
13626
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13627
        
 
13628
# check single-4 success:       1
 
13629
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13630
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13631
        
 
13632
# check single-5 success:       1
 
13633
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13634
        
 
13635
# check single-6 success:       1
 
13636
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13637
        
 
13638
# check single-7 success:       1
 
13639
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
13640
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13641
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13642
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13643
f_charbig = '#NULL#';
 
13644
INSERT INTO t1
 
13645
SET f_int1 = NULL , f_int2 = -@max_row,
 
13646
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13647
f_charbig = '#NULL#';
 
13648
ERROR 23000: Column 'f_int1' cannot be null
 
13649
# check null success:    1
 
13650
DELETE FROM t1
 
13651
WHERE f_int1 = 0 AND f_int2 = 0
 
13652
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13653
AND f_charbig = '#NULL#';
 
13654
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13655
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13656
   FROM t0_template source_tab
 
13657
WHERE MOD(f_int1,3) = 0
 
13658
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
13659
ON DUPLICATE KEY
 
13660
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
13661
f_int2 = 2 * @max_row + source_tab.f_int1,
 
13662
f_charbig = 'was updated';
 
13663
        
 
13664
# check unique-1-a success:     1
 
13665
        
 
13666
# check unique-1-b success:     1
 
13667
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13668
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13669
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13670
f_charbig = CONCAT('===',f_char1,'===')
 
13671
WHERE f_charbig = 'was updated';
 
13672
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13673
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
13674
   FROM t0_template source_tab
 
13675
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13676
        
 
13677
# check replace success:        1
 
13678
DELETE FROM t1
 
13679
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
13680
DELETE FROM t1
 
13681
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
13682
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
13683
UPDATE t1 SET f_int2 = f_int1,
 
13684
f_char1 = CAST(f_int1 AS CHAR),
 
13685
f_char2 = CAST(f_int1 AS CHAR),
 
13686
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
13687
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
13688
SET AUTOCOMMIT= 0;
 
13689
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13690
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13691
FROM t0_template source_tab
 
13692
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13693
        
 
13694
# check transactions-1 success:         1
 
13695
COMMIT WORK;
 
13696
        
 
13697
# check transactions-2 success:         1
 
13698
ROLLBACK WORK;
 
13699
        
 
13700
# check transactions-3 success:         1
 
13701
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13702
COMMIT WORK;
 
13703
ROLLBACK WORK;
 
13704
        
 
13705
# check transactions-4 success:         1
 
13706
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13707
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13708
FROM t0_template source_tab
 
13709
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13710
        
 
13711
# check transactions-5 success:         1
 
13712
ROLLBACK WORK;
 
13713
        
 
13714
# check transactions-6 success:         1
 
13715
# INFO: Storage engine used for t1 seems to be transactional.
 
13716
COMMIT;
 
13717
        
 
13718
# check transactions-7 success:         1
 
13719
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13720
COMMIT WORK;
 
13721
SET @@session.sql_mode = 'traditional';
 
13722
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13723
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13724
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13725
'', '', 'was inserted' FROM t0_template
 
13726
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13727
ERROR 22012: Division by 0
 
13728
COMMIT;
 
13729
        
 
13730
# check transactions-8 success:         1
 
13731
# INFO: Storage engine used for t1 seems to be able to revert
 
13732
#       changes made by the failing statement.
 
13733
SET @@session.sql_mode = '';
 
13734
SET AUTOCOMMIT= 1;
 
13735
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13736
COMMIT WORK;
 
13737
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13738
        
 
13739
# check special-1 success:      1
 
13740
UPDATE t1 SET f_charbig = '';
 
13741
        
 
13742
# check special-2 success:      1
 
13743
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13744
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13745
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13747
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13748
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13749
'just inserted' FROM t0_template
 
13750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13751
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13752
BEGIN
 
13753
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13754
f_charbig = 'updated by trigger'
 
13755
      WHERE f_int1 = new.f_int1;
 
13756
END|
 
13757
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13758
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13759
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13760
        
 
13761
# check trigger-1 success:      1
 
13762
DROP TRIGGER trg_1;
 
13763
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13764
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13765
f_charbig = 'just inserted'
 
13766
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13767
DELETE FROM t0_aux
 
13768
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13769
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13770
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13771
'just inserted' FROM t0_template
 
13772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13773
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13774
BEGIN
 
13775
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13776
f_charbig = 'updated by trigger'
 
13777
      WHERE f_int1 = new.f_int1;
 
13778
END|
 
13779
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13780
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13781
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13782
        
 
13783
# check trigger-2 success:      1
 
13784
DROP TRIGGER trg_1;
 
13785
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13786
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13787
f_charbig = 'just inserted'
 
13788
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13789
DELETE FROM t0_aux
 
13790
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13791
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13792
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13793
'just inserted' FROM t0_template
 
13794
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13795
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13796
BEGIN
 
13797
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13798
f_charbig = 'updated by trigger'
 
13799
      WHERE f_int1 = new.f_int1;
 
13800
END|
 
13801
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13802
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13803
        
 
13804
# check trigger-3 success:      1
 
13805
DROP TRIGGER trg_1;
 
13806
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13807
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13808
f_charbig = 'just inserted'
 
13809
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13810
DELETE FROM t0_aux
 
13811
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13812
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13813
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13814
'just inserted' FROM t0_template
 
13815
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13816
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13817
BEGIN
 
13818
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13819
f_charbig = 'updated by trigger'
 
13820
      WHERE f_int1 = - old.f_int1;
 
13821
END|
 
13822
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13823
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13824
        
 
13825
# check trigger-4 success:      1
 
13826
DROP TRIGGER trg_1;
 
13827
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13828
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13829
f_charbig = 'just inserted'
 
13830
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13831
DELETE FROM t0_aux
 
13832
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13833
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13834
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13835
'just inserted' FROM t0_template
 
13836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13837
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13838
BEGIN
 
13839
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13840
f_charbig = 'updated by trigger'
 
13841
      WHERE f_int1 = new.f_int1;
 
13842
END|
 
13843
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13844
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13845
        
 
13846
# check trigger-5 success:      1
 
13847
DROP TRIGGER trg_1;
 
13848
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13849
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13850
f_charbig = 'just inserted'
 
13851
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13852
DELETE FROM t0_aux
 
13853
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13854
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13855
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13856
'just inserted' FROM t0_template
 
13857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13858
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13859
BEGIN
 
13860
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13861
f_charbig = 'updated by trigger'
 
13862
      WHERE f_int1 = - old.f_int1;
 
13863
END|
 
13864
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13865
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13866
        
 
13867
# check trigger-6 success:      1
 
13868
DROP TRIGGER trg_1;
 
13869
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13870
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13871
f_charbig = 'just inserted'
 
13872
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13873
DELETE FROM t0_aux
 
13874
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13875
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13876
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13877
'just inserted' FROM t0_template
 
13878
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13879
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13880
BEGIN
 
13881
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13882
f_charbig = 'updated by trigger'
 
13883
      WHERE f_int1 = - old.f_int1;
 
13884
END|
 
13885
DELETE FROM t0_aux
 
13886
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13887
        
 
13888
# check trigger-7 success:      1
 
13889
DROP TRIGGER trg_1;
 
13890
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13891
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13892
f_charbig = 'just inserted'
 
13893
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13894
DELETE FROM t0_aux
 
13895
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13896
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13897
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13898
'just inserted' FROM t0_template
 
13899
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13900
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13901
BEGIN
 
13902
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13903
f_charbig = 'updated by trigger'
 
13904
      WHERE f_int1 = - old.f_int1;
 
13905
END|
 
13906
DELETE FROM t0_aux
 
13907
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13908
        
 
13909
# check trigger-8 success:      1
 
13910
DROP TRIGGER trg_1;
 
13911
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13912
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13913
f_charbig = 'just inserted'
 
13914
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13915
DELETE FROM t0_aux
 
13916
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13917
DELETE FROM t1
 
13918
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13919
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13920
BEGIN
 
13921
SET new.f_int1 = old.f_int1 + @max_row,
 
13922
new.f_int2 = old.f_int2 - @max_row,
 
13923
new.f_charbig = '####updated per update trigger####';
 
13924
END|
 
13925
UPDATE t1
 
13926
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13927
f_charbig = '####updated per update statement itself####';
 
13928
        
 
13929
# check trigger-9 success:      1
 
13930
DROP TRIGGER trg_2;
 
13931
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13932
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13933
f_charbig = CONCAT('===',f_char1,'===');
 
13934
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13935
BEGIN
 
13936
SET new.f_int1 = new.f_int1 + @max_row,
 
13937
new.f_int2 = new.f_int2 - @max_row,
 
13938
new.f_charbig = '####updated per update trigger####';
 
13939
END|
 
13940
UPDATE t1
 
13941
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13942
f_charbig = '####updated per update statement itself####';
 
13943
        
 
13944
# check trigger-10 success:     1
 
13945
DROP TRIGGER trg_2;
 
13946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13948
f_charbig = CONCAT('===',f_char1,'===');
 
13949
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13950
BEGIN
 
13951
SET new.f_int1 = @my_max1 + @counter,
 
13952
new.f_int2 = @my_min2 - @counter,
 
13953
new.f_charbig = '####updated per insert trigger####';
 
13954
SET @counter = @counter + 1;
 
13955
END|
 
13956
SET @counter = 1;
 
13957
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13958
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13959
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13960
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13961
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13962
ORDER BY f_int1;
 
13963
DROP TRIGGER trg_3;
 
13964
        
 
13965
# check trigger-11 success:     1
 
13966
DELETE FROM t1
 
13967
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13968
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13969
AND f_charbig = '####updated per insert trigger####';
 
13970
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13971
BEGIN
 
13972
SET new.f_int1 = @my_max1 + @counter,
 
13973
new.f_int2 = @my_min2 - @counter,
 
13974
new.f_charbig = '####updated per insert trigger####';
 
13975
SET @counter = @counter + 1;
 
13976
END|
 
13977
SET @counter = 1;
 
13978
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13979
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13980
SELECT CAST(f_int1 AS CHAR),
 
13981
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13982
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13983
ORDER BY f_int1;
 
13984
DROP TRIGGER trg_3;
 
13985
        
 
13986
# check trigger-12 success:     1
 
13987
DELETE FROM t1
 
13988
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13989
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13990
AND f_charbig = '####updated per insert trigger####';
 
13991
ANALYZE  TABLE t1;
 
13992
Table   Op      Msg_type        Msg_text
 
13993
test.t1 analyze status  OK
 
13994
CHECK    TABLE t1 EXTENDED;
 
13995
Table   Op      Msg_type        Msg_text
 
13996
test.t1 check   status  OK
 
13997
CHECKSUM TABLE t1 EXTENDED;
 
13998
Table   Checksum
 
13999
test.t1 <some_value>
 
14000
OPTIMIZE TABLE t1;
 
14001
Table   Op      Msg_type        Msg_text
 
14002
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
14003
test.t1 optimize        status  OK
 
14004
# check layout success:    1
 
14005
REPAIR   TABLE t1 EXTENDED;
 
14006
Table   Op      Msg_type        Msg_text
 
14007
test.t1 repair  note    The storage engine for the table doesn't support repair
 
14008
# check layout success:    1
 
14009
TRUNCATE t1;
 
14010
        
 
14011
# check TRUNCATE success:       1
 
14012
# check layout success:    1
 
14013
# End usability test (inc/partition_check.inc)
 
14014
DROP TABLE t1;
 
14015
CREATE TABLE t1 (
 
14016
f_int1 INTEGER,
 
14017
f_int2 INTEGER,
 
14018
f_char1 CHAR(20),
 
14019
f_char2 CHAR(20),
 
14020
f_charbig VARCHAR(1000)
 
14021
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
14022
)
 
14023
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
14024
(PARTITION part1 VALUES LESS THAN (0)
 
14025
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
14026
PARTITION part2 VALUES LESS THAN (5)
 
14027
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
14028
PARTITION part3 VALUES LESS THAN (10)
 
14029
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
14030
PARTITION part4 VALUES LESS THAN (2147483646)
 
14031
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
14032
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14033
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
14034
# Start usability test (inc/partition_check.inc)
 
14035
create_command
 
14036
SHOW CREATE TABLE t1;
 
14037
Table   Create Table
 
14038
t1      CREATE TABLE `t1` (
 
14039
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
14040
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
14041
  `f_char1` char(20) DEFAULT NULL,
 
14042
  `f_char2` char(20) DEFAULT NULL,
 
14043
  `f_charbig` varchar(1000) DEFAULT NULL,
 
14044
  PRIMARY KEY (`f_int1`,`f_int2`),
 
14045
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
14046
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
14047
/*!50100 PARTITION BY RANGE (f_int1)
 
14048
SUBPARTITION BY KEY (f_int1)
 
14049
(PARTITION part1 VALUES LESS THAN (0)
 
14050
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
14051
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
14052
 PARTITION part2 VALUES LESS THAN (5)
 
14053
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
14054
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
14055
 PARTITION part3 VALUES LESS THAN (10)
 
14056
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
14057
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
14058
 PARTITION part4 VALUES LESS THAN (2147483646)
 
14059
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
14060
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
14061
 
 
14062
unified filelist
 
14063
t1.frm
 
14064
t1.par
 
14065
 
 
14066
# check prerequisites-1 success:    1
 
14067
# check COUNT(*) success:    1
 
14068
# check MIN/MAX(f_int1) success:    1
 
14069
# check MIN/MAX(f_int2) success:    1
 
14070
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14071
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14072
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14073
WHERE f_int1 IN (2,3);
 
14074
ERROR 23000: Can't write; duplicate key in table 't1'
 
14075
# check prerequisites-3 success:    1
 
14076
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
14077
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14078
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14079
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14080
WHERE f_int1 IN (2,3);
 
14081
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14082
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14083
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14084
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14085
WHERE f_int1 IN (2,3);
 
14086
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14087
# check read via f_int1 success: 1
 
14088
# check read via f_int2 success: 1
 
14089
        
 
14090
# check multiple-1 success:     1
 
14091
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14092
        
 
14093
# check multiple-2 success:     1
 
14094
INSERT INTO t1 SELECT * FROM t0_template
 
14095
WHERE MOD(f_int1,3) = 0;
 
14096
        
 
14097
# check multiple-3 success:     1
 
14098
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14099
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14100
AND @max_row_div2 + @max_row_div4;
 
14101
        
 
14102
# check multiple-4 success:     1
 
14103
DELETE FROM t1
 
14104
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14105
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14106
        
 
14107
# check multiple-5 success:     1
 
14108
SELECT COUNT(*) INTO @try_count FROM t0_template
 
14109
WHERE MOD(f_int1,3) = 0
 
14110
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14111
SELECT COUNT(*) INTO @clash_count
 
14112
FROM t1 INNER JOIN t0_template USING(f_int1)
 
14113
WHERE MOD(f_int1,3) = 0
 
14114
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14115
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14116
INSERT INTO t1
 
14117
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14118
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14119
f_charbig = '#SINGLE#';
 
14120
        
 
14121
# check single-1 success:       1
 
14122
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14123
INSERT INTO t1
 
14124
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14125
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14126
f_charbig = '#SINGLE#';
 
14127
        
 
14128
# check single-2 success:       1
 
14129
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14130
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14131
UPDATE t1 SET f_int1 = @cur_value2
 
14132
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14133
        
 
14134
# check single-3 success:       1
 
14135
SET @cur_value1= -1;
 
14136
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14137
UPDATE t1 SET f_int1 = @cur_value1
 
14138
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14139
        
 
14140
# check single-4 success:       1
 
14141
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14142
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14143
        
 
14144
# check single-5 success:       1
 
14145
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14146
        
 
14147
# check single-6 success:       1
 
14148
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14149
ERROR HY000: Table has no partition for value 2147483647
 
14150
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14151
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14152
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14153
f_charbig = '#NULL#';
 
14154
INSERT INTO t1
 
14155
SET f_int1 = NULL , f_int2 = -@max_row,
 
14156
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14157
f_charbig = '#NULL#';
 
14158
ERROR 23000: Column 'f_int1' cannot be null
 
14159
# check null success:    1
 
14160
DELETE FROM t1
 
14161
WHERE f_int1 = 0 AND f_int2 = 0
 
14162
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14163
AND f_charbig = '#NULL#';
 
14164
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14165
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14166
   FROM t0_template source_tab
 
14167
WHERE MOD(f_int1,3) = 0
 
14168
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
14169
ON DUPLICATE KEY
 
14170
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
14171
f_int2 = 2 * @max_row + source_tab.f_int1,
 
14172
f_charbig = 'was updated';
 
14173
        
 
14174
# check unique-1-a success:     1
 
14175
        
 
14176
# check unique-1-b success:     1
 
14177
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14178
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14179
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14180
f_charbig = CONCAT('===',f_char1,'===')
 
14181
WHERE f_charbig = 'was updated';
 
14182
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14183
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
14184
   FROM t0_template source_tab
 
14185
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14186
        
 
14187
# check replace success:        1
 
14188
DELETE FROM t1
 
14189
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
14190
DELETE FROM t1
 
14191
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
14192
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
14193
UPDATE t1 SET f_int2 = f_int1,
 
14194
f_char1 = CAST(f_int1 AS CHAR),
 
14195
f_char2 = CAST(f_int1 AS CHAR),
 
14196
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
14197
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
14198
SET AUTOCOMMIT= 0;
 
14199
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14200
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14201
FROM t0_template source_tab
 
14202
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14203
        
 
14204
# check transactions-1 success:         1
 
14205
COMMIT WORK;
 
14206
        
 
14207
# check transactions-2 success:         1
 
14208
ROLLBACK WORK;
 
14209
        
 
14210
# check transactions-3 success:         1
 
14211
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14212
COMMIT WORK;
 
14213
ROLLBACK WORK;
 
14214
        
 
14215
# check transactions-4 success:         1
 
14216
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14217
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14218
FROM t0_template source_tab
 
14219
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14220
        
 
14221
# check transactions-5 success:         1
 
14222
ROLLBACK WORK;
 
14223
        
 
14224
# check transactions-6 success:         1
 
14225
# INFO: Storage engine used for t1 seems to be transactional.
 
14226
COMMIT;
 
14227
        
 
14228
# check transactions-7 success:         1
 
14229
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14230
COMMIT WORK;
 
14231
SET @@session.sql_mode = 'traditional';
 
14232
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14233
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14234
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14235
'', '', 'was inserted' FROM t0_template
 
14236
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14237
ERROR 22012: Division by 0
 
14238
COMMIT;
 
14239
        
 
14240
# check transactions-8 success:         1
 
14241
# INFO: Storage engine used for t1 seems to be able to revert
 
14242
#       changes made by the failing statement.
 
14243
SET @@session.sql_mode = '';
 
14244
SET AUTOCOMMIT= 1;
 
14245
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14246
COMMIT WORK;
 
14247
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14248
        
 
14249
# check special-1 success:      1
 
14250
UPDATE t1 SET f_charbig = '';
 
14251
        
 
14252
# check special-2 success:      1
 
14253
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14254
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14255
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14257
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14258
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14259
'just inserted' FROM t0_template
 
14260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14261
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14262
BEGIN
 
14263
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14264
f_charbig = 'updated by trigger'
 
14265
      WHERE f_int1 = new.f_int1;
 
14266
END|
 
14267
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14268
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14269
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14270
        
 
14271
# check trigger-1 success:      1
 
14272
DROP TRIGGER trg_1;
 
14273
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14274
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14275
f_charbig = 'just inserted'
 
14276
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14277
DELETE FROM t0_aux
 
14278
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14279
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14280
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14281
'just inserted' FROM t0_template
 
14282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14283
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14284
BEGIN
 
14285
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14286
f_charbig = 'updated by trigger'
 
14287
      WHERE f_int1 = new.f_int1;
 
14288
END|
 
14289
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14290
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14291
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14292
        
 
14293
# check trigger-2 success:      1
 
14294
DROP TRIGGER trg_1;
 
14295
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14296
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14297
f_charbig = 'just inserted'
 
14298
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14299
DELETE FROM t0_aux
 
14300
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14301
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14302
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14303
'just inserted' FROM t0_template
 
14304
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14305
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14306
BEGIN
 
14307
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14308
f_charbig = 'updated by trigger'
 
14309
      WHERE f_int1 = new.f_int1;
 
14310
END|
 
14311
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14312
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14313
        
 
14314
# check trigger-3 success:      1
 
14315
DROP TRIGGER trg_1;
 
14316
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14317
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14318
f_charbig = 'just inserted'
 
14319
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14320
DELETE FROM t0_aux
 
14321
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14322
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14323
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14324
'just inserted' FROM t0_template
 
14325
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14326
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14327
BEGIN
 
14328
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14329
f_charbig = 'updated by trigger'
 
14330
      WHERE f_int1 = - old.f_int1;
 
14331
END|
 
14332
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14333
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14334
        
 
14335
# check trigger-4 success:      1
 
14336
DROP TRIGGER trg_1;
 
14337
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14338
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14339
f_charbig = 'just inserted'
 
14340
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14341
DELETE FROM t0_aux
 
14342
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14343
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14344
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14345
'just inserted' FROM t0_template
 
14346
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14347
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14348
BEGIN
 
14349
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14350
f_charbig = 'updated by trigger'
 
14351
      WHERE f_int1 = new.f_int1;
 
14352
END|
 
14353
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14354
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14355
        
 
14356
# check trigger-5 success:      1
 
14357
DROP TRIGGER trg_1;
 
14358
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14359
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14360
f_charbig = 'just inserted'
 
14361
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14362
DELETE FROM t0_aux
 
14363
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14364
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14365
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14366
'just inserted' FROM t0_template
 
14367
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14368
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14369
BEGIN
 
14370
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14371
f_charbig = 'updated by trigger'
 
14372
      WHERE f_int1 = - old.f_int1;
 
14373
END|
 
14374
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14375
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14376
        
 
14377
# check trigger-6 success:      1
 
14378
DROP TRIGGER trg_1;
 
14379
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14380
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14381
f_charbig = 'just inserted'
 
14382
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14383
DELETE FROM t0_aux
 
14384
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14385
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14386
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14387
'just inserted' FROM t0_template
 
14388
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14389
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14390
BEGIN
 
14391
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14392
f_charbig = 'updated by trigger'
 
14393
      WHERE f_int1 = - old.f_int1;
 
14394
END|
 
14395
DELETE FROM t0_aux
 
14396
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14397
        
 
14398
# check trigger-7 success:      1
 
14399
DROP TRIGGER trg_1;
 
14400
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14401
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14402
f_charbig = 'just inserted'
 
14403
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14404
DELETE FROM t0_aux
 
14405
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14406
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14407
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14408
'just inserted' FROM t0_template
 
14409
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14410
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14411
BEGIN
 
14412
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14413
f_charbig = 'updated by trigger'
 
14414
      WHERE f_int1 = - old.f_int1;
 
14415
END|
 
14416
DELETE FROM t0_aux
 
14417
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14418
        
 
14419
# check trigger-8 success:      1
 
14420
DROP TRIGGER trg_1;
 
14421
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14422
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14423
f_charbig = 'just inserted'
 
14424
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14425
DELETE FROM t0_aux
 
14426
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14427
DELETE FROM t1
 
14428
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14429
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14430
BEGIN
 
14431
SET new.f_int1 = old.f_int1 + @max_row,
 
14432
new.f_int2 = old.f_int2 - @max_row,
 
14433
new.f_charbig = '####updated per update trigger####';
 
14434
END|
 
14435
UPDATE t1
 
14436
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14437
f_charbig = '####updated per update statement itself####';
 
14438
        
 
14439
# check trigger-9 success:      1
 
14440
DROP TRIGGER trg_2;
 
14441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14443
f_charbig = CONCAT('===',f_char1,'===');
 
14444
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14445
BEGIN
 
14446
SET new.f_int1 = new.f_int1 + @max_row,
 
14447
new.f_int2 = new.f_int2 - @max_row,
 
14448
new.f_charbig = '####updated per update trigger####';
 
14449
END|
 
14450
UPDATE t1
 
14451
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14452
f_charbig = '####updated per update statement itself####';
 
14453
        
 
14454
# check trigger-10 success:     1
 
14455
DROP TRIGGER trg_2;
 
14456
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14457
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14458
f_charbig = CONCAT('===',f_char1,'===');
 
14459
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14460
BEGIN
 
14461
SET new.f_int1 = @my_max1 + @counter,
 
14462
new.f_int2 = @my_min2 - @counter,
 
14463
new.f_charbig = '####updated per insert trigger####';
 
14464
SET @counter = @counter + 1;
 
14465
END|
 
14466
SET @counter = 1;
 
14467
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14468
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14469
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14470
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14472
ORDER BY f_int1;
 
14473
DROP TRIGGER trg_3;
 
14474
        
 
14475
# check trigger-11 success:     1
 
14476
DELETE FROM t1
 
14477
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14478
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14479
AND f_charbig = '####updated per insert trigger####';
 
14480
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14481
BEGIN
 
14482
SET new.f_int1 = @my_max1 + @counter,
 
14483
new.f_int2 = @my_min2 - @counter,
 
14484
new.f_charbig = '####updated per insert trigger####';
 
14485
SET @counter = @counter + 1;
 
14486
END|
 
14487
SET @counter = 1;
 
14488
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14489
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14490
SELECT CAST(f_int1 AS CHAR),
 
14491
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14493
ORDER BY f_int1;
 
14494
DROP TRIGGER trg_3;
 
14495
        
 
14496
# check trigger-12 success:     1
 
14497
DELETE FROM t1
 
14498
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14499
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14500
AND f_charbig = '####updated per insert trigger####';
 
14501
ANALYZE  TABLE t1;
 
14502
Table   Op      Msg_type        Msg_text
 
14503
test.t1 analyze status  OK
 
14504
CHECK    TABLE t1 EXTENDED;
 
14505
Table   Op      Msg_type        Msg_text
 
14506
test.t1 check   status  OK
 
14507
CHECKSUM TABLE t1 EXTENDED;
 
14508
Table   Checksum
 
14509
test.t1 <some_value>
 
14510
OPTIMIZE TABLE t1;
 
14511
Table   Op      Msg_type        Msg_text
 
14512
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
14513
test.t1 optimize        status  OK
 
14514
# check layout success:    1
 
14515
REPAIR   TABLE t1 EXTENDED;
 
14516
Table   Op      Msg_type        Msg_text
 
14517
test.t1 repair  note    The storage engine for the table doesn't support repair
 
14518
# check layout success:    1
 
14519
TRUNCATE t1;
 
14520
        
 
14521
# check TRUNCATE success:       1
 
14522
# check layout success:    1
 
14523
# End usability test (inc/partition_check.inc)
 
14524
DROP TABLE t1;
 
14525
CREATE TABLE t1 (
 
14526
f_int1 INTEGER,
 
14527
f_int2 INTEGER,
 
14528
f_char1 CHAR(20),
 
14529
f_char2 CHAR(20),
 
14530
f_charbig VARCHAR(1000)
 
14531
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
14532
)
 
14533
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
14534
(PARTITION part1 VALUES IN (0)
 
14535
(SUBPARTITION sp11,
 
14536
SUBPARTITION sp12),
 
14537
PARTITION part2 VALUES IN (1)
 
14538
(SUBPARTITION sp21,
 
14539
SUBPARTITION sp22),
 
14540
PARTITION part3 VALUES IN (2)
 
14541
(SUBPARTITION sp31, 
 
14542
SUBPARTITION sp32),
 
14543
PARTITION part4 VALUES IN (NULL)
 
14544
(SUBPARTITION sp41,
 
14545
SUBPARTITION sp42));
 
14546
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14547
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
14548
# Start usability test (inc/partition_check.inc)
 
14549
create_command
 
14550
SHOW CREATE TABLE t1;
 
14551
Table   Create Table
 
14552
t1      CREATE TABLE `t1` (
 
14553
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
14554
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
14555
  `f_char1` char(20) DEFAULT NULL,
 
14556
  `f_char2` char(20) DEFAULT NULL,
 
14557
  `f_charbig` varchar(1000) DEFAULT NULL,
 
14558
  PRIMARY KEY (`f_int1`,`f_int2`),
 
14559
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
14560
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
14561
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
14562
SUBPARTITION BY HASH (f_int1 + 1)
 
14563
(PARTITION part1 VALUES IN (0)
 
14564
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
14565
  SUBPARTITION sp12 ENGINE = InnoDB),
 
14566
 PARTITION part2 VALUES IN (1)
 
14567
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
14568
  SUBPARTITION sp22 ENGINE = InnoDB),
 
14569
 PARTITION part3 VALUES IN (2)
 
14570
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
14571
  SUBPARTITION sp32 ENGINE = InnoDB),
 
14572
 PARTITION part4 VALUES IN (NULL)
 
14573
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
14574
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
14575
 
 
14576
unified filelist
 
14577
t1.frm
 
14578
t1.par
 
14579
 
 
14580
# check prerequisites-1 success:    1
 
14581
# check COUNT(*) success:    1
 
14582
# check MIN/MAX(f_int1) success:    1
 
14583
# check MIN/MAX(f_int2) success:    1
 
14584
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14585
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14586
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14587
WHERE f_int1 IN (2,3);
 
14588
ERROR 23000: Can't write; duplicate key in table 't1'
 
14589
# check prerequisites-3 success:    1
 
14590
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
14591
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14592
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14593
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14594
WHERE f_int1 IN (2,3);
 
14595
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14596
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14597
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
14598
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
14599
WHERE f_int1 IN (2,3);
 
14600
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14601
# check read via f_int1 success: 1
 
14602
# check read via f_int2 success: 1
 
14603
        
 
14604
# check multiple-1 success:     1
 
14605
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14606
        
 
14607
# check multiple-2 success:     1
 
14608
INSERT INTO t1 SELECT * FROM t0_template
 
14609
WHERE MOD(f_int1,3) = 0;
 
14610
        
 
14611
# check multiple-3 success:     1
 
14612
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14613
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14614
AND @max_row_div2 + @max_row_div4;
 
14615
        
 
14616
# check multiple-4 success:     1
 
14617
DELETE FROM t1
 
14618
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14619
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14620
        
 
14621
# check multiple-5 success:     1
 
14622
SELECT COUNT(*) INTO @try_count FROM t0_template
 
14623
WHERE MOD(f_int1,3) = 0
 
14624
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14625
SELECT COUNT(*) INTO @clash_count
 
14626
FROM t1 INNER JOIN t0_template USING(f_int1)
 
14627
WHERE MOD(f_int1,3) = 0
 
14628
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14629
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14630
INSERT INTO t1
 
14631
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14632
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14633
f_charbig = '#SINGLE#';
 
14634
        
 
14635
# check single-1 success:       1
 
14636
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14637
INSERT INTO t1
 
14638
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14639
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14640
f_charbig = '#SINGLE#';
 
14641
        
 
14642
# check single-2 success:       1
 
14643
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14644
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14645
UPDATE t1 SET f_int1 = @cur_value2
 
14646
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14647
        
 
14648
# check single-3 success:       1
 
14649
SET @cur_value1= -1;
 
14650
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14651
UPDATE t1 SET f_int1 = @cur_value1
 
14652
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14653
        
 
14654
# check single-4 success:       1
 
14655
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14656
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14657
        
 
14658
# check single-5 success:       1
 
14659
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14660
        
 
14661
# check single-6 success:       1
 
14662
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14663
        
 
14664
# check single-7 success:       1
 
14665
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
14666
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14667
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14668
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14669
f_charbig = '#NULL#';
 
14670
INSERT INTO t1
 
14671
SET f_int1 = NULL , f_int2 = -@max_row,
 
14672
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14673
f_charbig = '#NULL#';
 
14674
ERROR 23000: Column 'f_int1' cannot be null
 
14675
# check null success:    1
 
14676
DELETE FROM t1
 
14677
WHERE f_int1 = 0 AND f_int2 = 0
 
14678
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14679
AND f_charbig = '#NULL#';
 
14680
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14681
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14682
   FROM t0_template source_tab
 
14683
WHERE MOD(f_int1,3) = 0
 
14684
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
14685
ON DUPLICATE KEY
 
14686
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
14687
f_int2 = 2 * @max_row + source_tab.f_int1,
 
14688
f_charbig = 'was updated';
 
14689
        
 
14690
# check unique-1-a success:     1
 
14691
        
 
14692
# check unique-1-b success:     1
 
14693
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14694
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14695
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14696
f_charbig = CONCAT('===',f_char1,'===')
 
14697
WHERE f_charbig = 'was updated';
 
14698
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14699
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
14700
   FROM t0_template source_tab
 
14701
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14702
        
 
14703
# check replace success:        1
 
14704
DELETE FROM t1
 
14705
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
14706
DELETE FROM t1
 
14707
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
14708
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
14709
UPDATE t1 SET f_int2 = f_int1,
 
14710
f_char1 = CAST(f_int1 AS CHAR),
 
14711
f_char2 = CAST(f_int1 AS CHAR),
 
14712
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
14713
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
14714
SET AUTOCOMMIT= 0;
 
14715
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14716
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14717
FROM t0_template source_tab
 
14718
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14719
        
 
14720
# check transactions-1 success:         1
 
14721
COMMIT WORK;
 
14722
        
 
14723
# check transactions-2 success:         1
 
14724
ROLLBACK WORK;
 
14725
        
 
14726
# check transactions-3 success:         1
 
14727
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14728
COMMIT WORK;
 
14729
ROLLBACK WORK;
 
14730
        
 
14731
# check transactions-4 success:         1
 
14732
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14733
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14734
FROM t0_template source_tab
 
14735
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14736
        
 
14737
# check transactions-5 success:         1
 
14738
ROLLBACK WORK;
 
14739
        
 
14740
# check transactions-6 success:         1
 
14741
# INFO: Storage engine used for t1 seems to be transactional.
 
14742
COMMIT;
 
14743
        
 
14744
# check transactions-7 success:         1
 
14745
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14746
COMMIT WORK;
 
14747
SET @@session.sql_mode = 'traditional';
 
14748
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14749
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14750
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14751
'', '', 'was inserted' FROM t0_template
 
14752
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14753
ERROR 22012: Division by 0
 
14754
COMMIT;
 
14755
        
 
14756
# check transactions-8 success:         1
 
14757
# INFO: Storage engine used for t1 seems to be able to revert
 
14758
#       changes made by the failing statement.
 
14759
SET @@session.sql_mode = '';
 
14760
SET AUTOCOMMIT= 1;
 
14761
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14762
COMMIT WORK;
 
14763
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14764
        
 
14765
# check special-1 success:      1
 
14766
UPDATE t1 SET f_charbig = '';
 
14767
        
 
14768
# check special-2 success:      1
 
14769
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14770
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14771
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14773
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14774
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14775
'just inserted' FROM t0_template
 
14776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14777
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14778
BEGIN
 
14779
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14780
f_charbig = 'updated by trigger'
 
14781
      WHERE f_int1 = new.f_int1;
 
14782
END|
 
14783
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14784
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14786
        
 
14787
# check trigger-1 success:      1
 
14788
DROP TRIGGER trg_1;
 
14789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14791
f_charbig = 'just inserted'
 
14792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14793
DELETE FROM t0_aux
 
14794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14797
'just inserted' FROM t0_template
 
14798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14799
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14800
BEGIN
 
14801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14802
f_charbig = 'updated by trigger'
 
14803
      WHERE f_int1 = new.f_int1;
 
14804
END|
 
14805
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14806
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14807
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14808
        
 
14809
# check trigger-2 success:      1
 
14810
DROP TRIGGER trg_1;
 
14811
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14812
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14813
f_charbig = 'just inserted'
 
14814
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14815
DELETE FROM t0_aux
 
14816
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14817
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14818
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14819
'just inserted' FROM t0_template
 
14820
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14821
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14822
BEGIN
 
14823
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14824
f_charbig = 'updated by trigger'
 
14825
      WHERE f_int1 = new.f_int1;
 
14826
END|
 
14827
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14828
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14829
        
 
14830
# check trigger-3 success:      1
 
14831
DROP TRIGGER trg_1;
 
14832
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14833
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14834
f_charbig = 'just inserted'
 
14835
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14836
DELETE FROM t0_aux
 
14837
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14838
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14839
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14840
'just inserted' FROM t0_template
 
14841
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14842
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14843
BEGIN
 
14844
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14845
f_charbig = 'updated by trigger'
 
14846
      WHERE f_int1 = - old.f_int1;
 
14847
END|
 
14848
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14849
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14850
        
 
14851
# check trigger-4 success:      1
 
14852
DROP TRIGGER trg_1;
 
14853
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14854
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14855
f_charbig = 'just inserted'
 
14856
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14857
DELETE FROM t0_aux
 
14858
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14859
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14860
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14861
'just inserted' FROM t0_template
 
14862
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14863
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14864
BEGIN
 
14865
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14866
f_charbig = 'updated by trigger'
 
14867
      WHERE f_int1 = new.f_int1;
 
14868
END|
 
14869
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14870
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14871
        
 
14872
# check trigger-5 success:      1
 
14873
DROP TRIGGER trg_1;
 
14874
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14875
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14876
f_charbig = 'just inserted'
 
14877
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14878
DELETE FROM t0_aux
 
14879
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14880
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14881
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14882
'just inserted' FROM t0_template
 
14883
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14884
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14885
BEGIN
 
14886
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14887
f_charbig = 'updated by trigger'
 
14888
      WHERE f_int1 = - old.f_int1;
 
14889
END|
 
14890
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14891
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14892
        
 
14893
# check trigger-6 success:      1
 
14894
DROP TRIGGER trg_1;
 
14895
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14896
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14897
f_charbig = 'just inserted'
 
14898
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14899
DELETE FROM t0_aux
 
14900
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14901
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14902
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14903
'just inserted' FROM t0_template
 
14904
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14905
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14906
BEGIN
 
14907
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14908
f_charbig = 'updated by trigger'
 
14909
      WHERE f_int1 = - old.f_int1;
 
14910
END|
 
14911
DELETE FROM t0_aux
 
14912
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14913
        
 
14914
# check trigger-7 success:      1
 
14915
DROP TRIGGER trg_1;
 
14916
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14917
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14918
f_charbig = 'just inserted'
 
14919
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14920
DELETE FROM t0_aux
 
14921
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14922
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14923
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14924
'just inserted' FROM t0_template
 
14925
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14926
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14927
BEGIN
 
14928
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14929
f_charbig = 'updated by trigger'
 
14930
      WHERE f_int1 = - old.f_int1;
 
14931
END|
 
14932
DELETE FROM t0_aux
 
14933
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14934
        
 
14935
# check trigger-8 success:      1
 
14936
DROP TRIGGER trg_1;
 
14937
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14938
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14939
f_charbig = 'just inserted'
 
14940
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14941
DELETE FROM t0_aux
 
14942
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14943
DELETE FROM t1
 
14944
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14945
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14946
BEGIN
 
14947
SET new.f_int1 = old.f_int1 + @max_row,
 
14948
new.f_int2 = old.f_int2 - @max_row,
 
14949
new.f_charbig = '####updated per update trigger####';
 
14950
END|
 
14951
UPDATE t1
 
14952
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14953
f_charbig = '####updated per update statement itself####';
 
14954
        
 
14955
# check trigger-9 success:      1
 
14956
DROP TRIGGER trg_2;
 
14957
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14958
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14959
f_charbig = CONCAT('===',f_char1,'===');
 
14960
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14961
BEGIN
 
14962
SET new.f_int1 = new.f_int1 + @max_row,
 
14963
new.f_int2 = new.f_int2 - @max_row,
 
14964
new.f_charbig = '####updated per update trigger####';
 
14965
END|
 
14966
UPDATE t1
 
14967
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14968
f_charbig = '####updated per update statement itself####';
 
14969
        
 
14970
# check trigger-10 success:     1
 
14971
DROP TRIGGER trg_2;
 
14972
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14973
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14974
f_charbig = CONCAT('===',f_char1,'===');
 
14975
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14976
BEGIN
 
14977
SET new.f_int1 = @my_max1 + @counter,
 
14978
new.f_int2 = @my_min2 - @counter,
 
14979
new.f_charbig = '####updated per insert trigger####';
 
14980
SET @counter = @counter + 1;
 
14981
END|
 
14982
SET @counter = 1;
 
14983
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14984
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14985
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14986
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14987
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14988
ORDER BY f_int1;
 
14989
DROP TRIGGER trg_3;
 
14990
        
 
14991
# check trigger-11 success:     1
 
14992
DELETE FROM t1
 
14993
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14994
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14995
AND f_charbig = '####updated per insert trigger####';
 
14996
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14997
BEGIN
 
14998
SET new.f_int1 = @my_max1 + @counter,
 
14999
new.f_int2 = @my_min2 - @counter,
 
15000
new.f_charbig = '####updated per insert trigger####';
 
15001
SET @counter = @counter + 1;
 
15002
END|
 
15003
SET @counter = 1;
 
15004
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15005
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15006
SELECT CAST(f_int1 AS CHAR),
 
15007
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15008
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15009
ORDER BY f_int1;
 
15010
DROP TRIGGER trg_3;
 
15011
        
 
15012
# check trigger-12 success:     1
 
15013
DELETE FROM t1
 
15014
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15015
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15016
AND f_charbig = '####updated per insert trigger####';
 
15017
ANALYZE  TABLE t1;
 
15018
Table   Op      Msg_type        Msg_text
 
15019
test.t1 analyze status  OK
 
15020
CHECK    TABLE t1 EXTENDED;
 
15021
Table   Op      Msg_type        Msg_text
 
15022
test.t1 check   status  OK
 
15023
CHECKSUM TABLE t1 EXTENDED;
 
15024
Table   Checksum
 
15025
test.t1 <some_value>
 
15026
OPTIMIZE TABLE t1;
 
15027
Table   Op      Msg_type        Msg_text
 
15028
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
15029
test.t1 optimize        status  OK
 
15030
# check layout success:    1
 
15031
REPAIR   TABLE t1 EXTENDED;
 
15032
Table   Op      Msg_type        Msg_text
 
15033
test.t1 repair  note    The storage engine for the table doesn't support repair
 
15034
# check layout success:    1
 
15035
TRUNCATE t1;
 
15036
        
 
15037
# check TRUNCATE success:       1
 
15038
# check layout success:    1
 
15039
# End usability test (inc/partition_check.inc)
 
15040
DROP TABLE t1;
 
15041
CREATE TABLE t1 (
 
15042
f_int1 INTEGER,
 
15043
f_int2 INTEGER,
 
15044
f_char1 CHAR(20),
 
15045
f_char2 CHAR(20),
 
15046
f_charbig VARCHAR(1000)
 
15047
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
15048
)
 
15049
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15050
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15051
(PARTITION part1 VALUES IN (0),
 
15052
PARTITION part2 VALUES IN (1),
 
15053
PARTITION part3 VALUES IN (NULL));
 
15054
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15055
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
15056
# Start usability test (inc/partition_check.inc)
 
15057
create_command
 
15058
SHOW CREATE TABLE t1;
 
15059
Table   Create Table
 
15060
t1      CREATE TABLE `t1` (
 
15061
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
15062
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
15063
  `f_char1` char(20) DEFAULT NULL,
 
15064
  `f_char2` char(20) DEFAULT NULL,
 
15065
  `f_charbig` varchar(1000) DEFAULT NULL,
 
15066
  PRIMARY KEY (`f_int1`,`f_int2`),
 
15067
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
15068
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
15069
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
15070
SUBPARTITION BY KEY (f_int1)
 
15071
SUBPARTITIONS 3
 
15072
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
15073
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
15074
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
15075
 
 
15076
unified filelist
 
15077
t1.frm
 
15078
t1.par
 
15079
 
 
15080
# check prerequisites-1 success:    1
 
15081
# check COUNT(*) success:    1
 
15082
# check MIN/MAX(f_int1) success:    1
 
15083
# check MIN/MAX(f_int2) success:    1
 
15084
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15085
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15086
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15087
WHERE f_int1 IN (2,3);
 
15088
ERROR 23000: Can't write; duplicate key in table 't1'
 
15089
# check prerequisites-3 success:    1
 
15090
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
15091
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15092
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15093
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15094
WHERE f_int1 IN (2,3);
 
15095
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15096
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15097
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15098
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15099
WHERE f_int1 IN (2,3);
 
15100
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15101
# check read via f_int1 success: 1
 
15102
# check read via f_int2 success: 1
 
15103
        
 
15104
# check multiple-1 success:     1
 
15105
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15106
        
 
15107
# check multiple-2 success:     1
 
15108
INSERT INTO t1 SELECT * FROM t0_template
 
15109
WHERE MOD(f_int1,3) = 0;
 
15110
        
 
15111
# check multiple-3 success:     1
 
15112
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15113
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15114
AND @max_row_div2 + @max_row_div4;
 
15115
        
 
15116
# check multiple-4 success:     1
 
15117
DELETE FROM t1
 
15118
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15119
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15120
        
 
15121
# check multiple-5 success:     1
 
15122
SELECT COUNT(*) INTO @try_count FROM t0_template
 
15123
WHERE MOD(f_int1,3) = 0
 
15124
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15125
SELECT COUNT(*) INTO @clash_count
 
15126
FROM t1 INNER JOIN t0_template USING(f_int1)
 
15127
WHERE MOD(f_int1,3) = 0
 
15128
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15129
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15130
INSERT INTO t1
 
15131
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15132
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15133
f_charbig = '#SINGLE#';
 
15134
        
 
15135
# check single-1 success:       1
 
15136
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15137
INSERT INTO t1
 
15138
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15139
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15140
f_charbig = '#SINGLE#';
 
15141
        
 
15142
# check single-2 success:       1
 
15143
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15144
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15145
UPDATE t1 SET f_int1 = @cur_value2
 
15146
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15147
        
 
15148
# check single-3 success:       1
 
15149
SET @cur_value1= -1;
 
15150
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15151
UPDATE t1 SET f_int1 = @cur_value1
 
15152
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15153
        
 
15154
# check single-4 success:       1
 
15155
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15156
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15157
        
 
15158
# check single-5 success:       1
 
15159
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15160
        
 
15161
# check single-6 success:       1
 
15162
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15163
        
 
15164
# check single-7 success:       1
 
15165
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
15166
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15167
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15168
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15169
f_charbig = '#NULL#';
 
15170
INSERT INTO t1
 
15171
SET f_int1 = NULL , f_int2 = -@max_row,
 
15172
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15173
f_charbig = '#NULL#';
 
15174
ERROR 23000: Column 'f_int1' cannot be null
 
15175
# check null success:    1
 
15176
DELETE FROM t1
 
15177
WHERE f_int1 = 0 AND f_int2 = 0
 
15178
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15179
AND f_charbig = '#NULL#';
 
15180
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15181
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15182
   FROM t0_template source_tab
 
15183
WHERE MOD(f_int1,3) = 0
 
15184
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
15185
ON DUPLICATE KEY
 
15186
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
15187
f_int2 = 2 * @max_row + source_tab.f_int1,
 
15188
f_charbig = 'was updated';
 
15189
        
 
15190
# check unique-1-a success:     1
 
15191
        
 
15192
# check unique-1-b success:     1
 
15193
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15194
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15195
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15196
f_charbig = CONCAT('===',f_char1,'===')
 
15197
WHERE f_charbig = 'was updated';
 
15198
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15199
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
15200
   FROM t0_template source_tab
 
15201
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15202
        
 
15203
# check replace success:        1
 
15204
DELETE FROM t1
 
15205
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
15206
DELETE FROM t1
 
15207
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
15208
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
15209
UPDATE t1 SET f_int2 = f_int1,
 
15210
f_char1 = CAST(f_int1 AS CHAR),
 
15211
f_char2 = CAST(f_int1 AS CHAR),
 
15212
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
15213
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
15214
SET AUTOCOMMIT= 0;
 
15215
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15216
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15217
FROM t0_template source_tab
 
15218
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15219
        
 
15220
# check transactions-1 success:         1
 
15221
COMMIT WORK;
 
15222
        
 
15223
# check transactions-2 success:         1
 
15224
ROLLBACK WORK;
 
15225
        
 
15226
# check transactions-3 success:         1
 
15227
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15228
COMMIT WORK;
 
15229
ROLLBACK WORK;
 
15230
        
 
15231
# check transactions-4 success:         1
 
15232
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15233
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15234
FROM t0_template source_tab
 
15235
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15236
        
 
15237
# check transactions-5 success:         1
 
15238
ROLLBACK WORK;
 
15239
        
 
15240
# check transactions-6 success:         1
 
15241
# INFO: Storage engine used for t1 seems to be transactional.
 
15242
COMMIT;
 
15243
        
 
15244
# check transactions-7 success:         1
 
15245
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15246
COMMIT WORK;
 
15247
SET @@session.sql_mode = 'traditional';
 
15248
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15249
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15250
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15251
'', '', 'was inserted' FROM t0_template
 
15252
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15253
ERROR 22012: Division by 0
 
15254
COMMIT;
 
15255
        
 
15256
# check transactions-8 success:         1
 
15257
# INFO: Storage engine used for t1 seems to be able to revert
 
15258
#       changes made by the failing statement.
 
15259
SET @@session.sql_mode = '';
 
15260
SET AUTOCOMMIT= 1;
 
15261
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15262
COMMIT WORK;
 
15263
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15264
        
 
15265
# check special-1 success:      1
 
15266
UPDATE t1 SET f_charbig = '';
 
15267
        
 
15268
# check special-2 success:      1
 
15269
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15270
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15271
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15272
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15273
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15274
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15275
'just inserted' FROM t0_template
 
15276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15277
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15278
BEGIN
 
15279
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15280
f_charbig = 'updated by trigger'
 
15281
      WHERE f_int1 = new.f_int1;
 
15282
END|
 
15283
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15284
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15285
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15286
        
 
15287
# check trigger-1 success:      1
 
15288
DROP TRIGGER trg_1;
 
15289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15291
f_charbig = 'just inserted'
 
15292
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15293
DELETE FROM t0_aux
 
15294
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15295
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15296
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15297
'just inserted' FROM t0_template
 
15298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15299
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15300
BEGIN
 
15301
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15302
f_charbig = 'updated by trigger'
 
15303
      WHERE f_int1 = new.f_int1;
 
15304
END|
 
15305
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15306
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15308
        
 
15309
# check trigger-2 success:      1
 
15310
DROP TRIGGER trg_1;
 
15311
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15312
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15313
f_charbig = 'just inserted'
 
15314
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15315
DELETE FROM t0_aux
 
15316
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15317
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15318
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15319
'just inserted' FROM t0_template
 
15320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15321
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15322
BEGIN
 
15323
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15324
f_charbig = 'updated by trigger'
 
15325
      WHERE f_int1 = new.f_int1;
 
15326
END|
 
15327
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15328
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15329
        
 
15330
# check trigger-3 success:      1
 
15331
DROP TRIGGER trg_1;
 
15332
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15333
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15334
f_charbig = 'just inserted'
 
15335
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15336
DELETE FROM t0_aux
 
15337
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15338
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15339
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15340
'just inserted' FROM t0_template
 
15341
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15342
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15343
BEGIN
 
15344
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15345
f_charbig = 'updated by trigger'
 
15346
      WHERE f_int1 = - old.f_int1;
 
15347
END|
 
15348
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15349
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15350
        
 
15351
# check trigger-4 success:      1
 
15352
DROP TRIGGER trg_1;
 
15353
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15354
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15355
f_charbig = 'just inserted'
 
15356
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15357
DELETE FROM t0_aux
 
15358
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15359
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15360
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15361
'just inserted' FROM t0_template
 
15362
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15363
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15364
BEGIN
 
15365
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15366
f_charbig = 'updated by trigger'
 
15367
      WHERE f_int1 = new.f_int1;
 
15368
END|
 
15369
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15370
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15371
        
 
15372
# check trigger-5 success:      1
 
15373
DROP TRIGGER trg_1;
 
15374
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15375
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15376
f_charbig = 'just inserted'
 
15377
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15378
DELETE FROM t0_aux
 
15379
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15380
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15381
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15382
'just inserted' FROM t0_template
 
15383
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15384
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15385
BEGIN
 
15386
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15387
f_charbig = 'updated by trigger'
 
15388
      WHERE f_int1 = - old.f_int1;
 
15389
END|
 
15390
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15391
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15392
        
 
15393
# check trigger-6 success:      1
 
15394
DROP TRIGGER trg_1;
 
15395
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15396
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15397
f_charbig = 'just inserted'
 
15398
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15399
DELETE FROM t0_aux
 
15400
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15401
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15402
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15403
'just inserted' FROM t0_template
 
15404
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15405
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15406
BEGIN
 
15407
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15408
f_charbig = 'updated by trigger'
 
15409
      WHERE f_int1 = - old.f_int1;
 
15410
END|
 
15411
DELETE FROM t0_aux
 
15412
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15413
        
 
15414
# check trigger-7 success:      1
 
15415
DROP TRIGGER trg_1;
 
15416
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15417
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15418
f_charbig = 'just inserted'
 
15419
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15420
DELETE FROM t0_aux
 
15421
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15422
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15423
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15424
'just inserted' FROM t0_template
 
15425
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15426
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15427
BEGIN
 
15428
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15429
f_charbig = 'updated by trigger'
 
15430
      WHERE f_int1 = - old.f_int1;
 
15431
END|
 
15432
DELETE FROM t0_aux
 
15433
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15434
        
 
15435
# check trigger-8 success:      1
 
15436
DROP TRIGGER trg_1;
 
15437
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15438
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15439
f_charbig = 'just inserted'
 
15440
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15441
DELETE FROM t0_aux
 
15442
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15443
DELETE FROM t1
 
15444
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15445
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15446
BEGIN
 
15447
SET new.f_int1 = old.f_int1 + @max_row,
 
15448
new.f_int2 = old.f_int2 - @max_row,
 
15449
new.f_charbig = '####updated per update trigger####';
 
15450
END|
 
15451
UPDATE t1
 
15452
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15453
f_charbig = '####updated per update statement itself####';
 
15454
        
 
15455
# check trigger-9 success:      1
 
15456
DROP TRIGGER trg_2;
 
15457
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15458
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15459
f_charbig = CONCAT('===',f_char1,'===');
 
15460
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15461
BEGIN
 
15462
SET new.f_int1 = new.f_int1 + @max_row,
 
15463
new.f_int2 = new.f_int2 - @max_row,
 
15464
new.f_charbig = '####updated per update trigger####';
 
15465
END|
 
15466
UPDATE t1
 
15467
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15468
f_charbig = '####updated per update statement itself####';
 
15469
        
 
15470
# check trigger-10 success:     1
 
15471
DROP TRIGGER trg_2;
 
15472
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15473
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15474
f_charbig = CONCAT('===',f_char1,'===');
 
15475
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15476
BEGIN
 
15477
SET new.f_int1 = @my_max1 + @counter,
 
15478
new.f_int2 = @my_min2 - @counter,
 
15479
new.f_charbig = '####updated per insert trigger####';
 
15480
SET @counter = @counter + 1;
 
15481
END|
 
15482
SET @counter = 1;
 
15483
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15484
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15485
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15486
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15487
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15488
ORDER BY f_int1;
 
15489
DROP TRIGGER trg_3;
 
15490
        
 
15491
# check trigger-11 success:     1
 
15492
DELETE FROM t1
 
15493
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15494
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15495
AND f_charbig = '####updated per insert trigger####';
 
15496
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15497
BEGIN
 
15498
SET new.f_int1 = @my_max1 + @counter,
 
15499
new.f_int2 = @my_min2 - @counter,
 
15500
new.f_charbig = '####updated per insert trigger####';
 
15501
SET @counter = @counter + 1;
 
15502
END|
 
15503
SET @counter = 1;
 
15504
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15505
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15506
SELECT CAST(f_int1 AS CHAR),
 
15507
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15509
ORDER BY f_int1;
 
15510
DROP TRIGGER trg_3;
 
15511
        
 
15512
# check trigger-12 success:     1
 
15513
DELETE FROM t1
 
15514
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15515
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15516
AND f_charbig = '####updated per insert trigger####';
 
15517
ANALYZE  TABLE t1;
 
15518
Table   Op      Msg_type        Msg_text
 
15519
test.t1 analyze status  OK
 
15520
CHECK    TABLE t1 EXTENDED;
 
15521
Table   Op      Msg_type        Msg_text
 
15522
test.t1 check   status  OK
 
15523
CHECKSUM TABLE t1 EXTENDED;
 
15524
Table   Checksum
 
15525
test.t1 <some_value>
 
15526
OPTIMIZE TABLE t1;
 
15527
Table   Op      Msg_type        Msg_text
 
15528
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
15529
test.t1 optimize        status  OK
 
15530
# check layout success:    1
 
15531
REPAIR   TABLE t1 EXTENDED;
 
15532
Table   Op      Msg_type        Msg_text
 
15533
test.t1 repair  note    The storage engine for the table doesn't support repair
 
15534
# check layout success:    1
 
15535
TRUNCATE t1;
 
15536
        
 
15537
# check TRUNCATE success:       1
 
15538
# check layout success:    1
 
15539
# End usability test (inc/partition_check.inc)
 
15540
DROP TABLE t1;
 
15541
DROP TABLE IF EXISTS t1;
 
15542
CREATE TABLE t1 (
 
15543
f_int1 INTEGER,
 
15544
f_int2 INTEGER,
 
15545
f_char1 CHAR(20),
 
15546
f_char2 CHAR(20),
 
15547
f_charbig VARCHAR(1000)
 
15548
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
15549
)
 
15550
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
15551
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15552
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
15553
# Start usability test (inc/partition_check.inc)
 
15554
create_command
 
15555
SHOW CREATE TABLE t1;
 
15556
Table   Create Table
 
15557
t1      CREATE TABLE `t1` (
 
15558
  `f_int1` int(11) DEFAULT NULL,
 
15559
  `f_int2` int(11) DEFAULT NULL,
 
15560
  `f_char1` char(20) DEFAULT NULL,
 
15561
  `f_char2` char(20) DEFAULT NULL,
 
15562
  `f_charbig` varchar(1000) DEFAULT NULL,
 
15563
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
15564
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
15565
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
15566
/*!50100 PARTITION BY HASH (f_int1)
 
15567
PARTITIONS 2 */
 
15568
 
 
15569
unified filelist
 
15570
t1.frm
 
15571
t1.par
 
15572
 
 
15573
# check prerequisites-1 success:    1
 
15574
# check COUNT(*) success:    1
 
15575
# check MIN/MAX(f_int1) success:    1
 
15576
# check MIN/MAX(f_int2) success:    1
 
15577
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15578
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15579
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15580
WHERE f_int1 IN (2,3);
 
15581
ERROR 23000: Can't write; duplicate key in table 't1'
 
15582
# check prerequisites-3 success:    1
 
15583
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
15584
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15585
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15586
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15587
WHERE f_int1 IN (2,3);
 
15588
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15589
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15590
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
15591
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
15592
WHERE f_int1 IN (2,3);
 
15593
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15594
# check read via f_int1 success: 1
 
15595
# check read via f_int2 success: 1
 
15596
        
 
15597
# check multiple-1 success:     1
 
15598
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15599
        
 
15600
# check multiple-2 success:     1
 
15601
INSERT INTO t1 SELECT * FROM t0_template
 
15602
WHERE MOD(f_int1,3) = 0;
 
15603
        
 
15604
# check multiple-3 success:     1
 
15605
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15606
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15607
AND @max_row_div2 + @max_row_div4;
 
15608
        
 
15609
# check multiple-4 success:     1
 
15610
DELETE FROM t1
 
15611
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15612
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15613
        
 
15614
# check multiple-5 success:     1
 
15615
SELECT COUNT(*) INTO @try_count FROM t0_template
 
15616
WHERE MOD(f_int1,3) = 0
 
15617
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15618
SELECT COUNT(*) INTO @clash_count
 
15619
FROM t1 INNER JOIN t0_template USING(f_int1)
 
15620
WHERE MOD(f_int1,3) = 0
 
15621
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15622
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15623
INSERT INTO t1
 
15624
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15625
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15626
f_charbig = '#SINGLE#';
 
15627
        
 
15628
# check single-1 success:       1
 
15629
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15630
INSERT INTO t1
 
15631
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15632
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15633
f_charbig = '#SINGLE#';
 
15634
        
 
15635
# check single-2 success:       1
 
15636
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15637
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15638
UPDATE t1 SET f_int1 = @cur_value2
 
15639
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15640
        
 
15641
# check single-3 success:       1
 
15642
SET @cur_value1= -1;
 
15643
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15644
UPDATE t1 SET f_int1 = @cur_value1
 
15645
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15646
        
 
15647
# check single-4 success:       1
 
15648
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15649
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15650
        
 
15651
# check single-5 success:       1
 
15652
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15653
        
 
15654
# check single-6 success:       1
 
15655
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15656
        
 
15657
# check single-7 success:       1
 
15658
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
15659
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15660
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15661
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15662
f_charbig = '#NULL#';
 
15663
INSERT INTO t1
 
15664
SET f_int1 = NULL , f_int2 = -@max_row,
 
15665
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15666
f_charbig = '#NULL#';
 
15667
# check null success:    1
 
15668
        
 
15669
# check null-1 success:         1
 
15670
UPDATE t1 SET f_int1 = -@max_row
 
15671
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15672
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15673
        
 
15674
# check null-2 success:         1
 
15675
UPDATE t1 SET f_int1 = NULL
 
15676
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15677
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15678
        
 
15679
# check null-3 success:         1
 
15680
DELETE FROM t1
 
15681
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15682
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15683
        
 
15684
# check null-4 success:         1
 
15685
DELETE FROM t1
 
15686
WHERE f_int1 = 0 AND f_int2 = 0
 
15687
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15688
AND f_charbig = '#NULL#';
 
15689
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15690
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15691
   FROM t0_template source_tab
 
15692
WHERE MOD(f_int1,3) = 0
 
15693
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
15694
ON DUPLICATE KEY
 
15695
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
15696
f_int2 = 2 * @max_row + source_tab.f_int1,
 
15697
f_charbig = 'was updated';
 
15698
        
 
15699
# check unique-1-a success:     1
 
15700
        
 
15701
# check unique-1-b success:     1
 
15702
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15703
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15704
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15705
f_charbig = CONCAT('===',f_char1,'===')
 
15706
WHERE f_charbig = 'was updated';
 
15707
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15708
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
15709
   FROM t0_template source_tab
 
15710
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15711
        
 
15712
# check replace success:        1
 
15713
DELETE FROM t1
 
15714
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
15715
DELETE FROM t1
 
15716
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
15717
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
15718
UPDATE t1 SET f_int2 = f_int1,
 
15719
f_char1 = CAST(f_int1 AS CHAR),
 
15720
f_char2 = CAST(f_int1 AS CHAR),
 
15721
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
15722
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
15723
SET AUTOCOMMIT= 0;
 
15724
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15725
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15726
FROM t0_template source_tab
 
15727
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15728
        
 
15729
# check transactions-1 success:         1
 
15730
COMMIT WORK;
 
15731
        
 
15732
# check transactions-2 success:         1
 
15733
ROLLBACK WORK;
 
15734
        
 
15735
# check transactions-3 success:         1
 
15736
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15737
COMMIT WORK;
 
15738
ROLLBACK WORK;
 
15739
        
 
15740
# check transactions-4 success:         1
 
15741
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15742
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15743
FROM t0_template source_tab
 
15744
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15745
        
 
15746
# check transactions-5 success:         1
 
15747
ROLLBACK WORK;
 
15748
        
 
15749
# check transactions-6 success:         1
 
15750
# INFO: Storage engine used for t1 seems to be transactional.
 
15751
COMMIT;
 
15752
        
 
15753
# check transactions-7 success:         1
 
15754
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15755
COMMIT WORK;
 
15756
SET @@session.sql_mode = 'traditional';
 
15757
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15758
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15759
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15760
'', '', 'was inserted' FROM t0_template
 
15761
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15762
ERROR 22012: Division by 0
 
15763
COMMIT;
 
15764
        
 
15765
# check transactions-8 success:         1
 
15766
# INFO: Storage engine used for t1 seems to be able to revert
 
15767
#       changes made by the failing statement.
 
15768
SET @@session.sql_mode = '';
 
15769
SET AUTOCOMMIT= 1;
 
15770
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15771
COMMIT WORK;
 
15772
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15773
        
 
15774
# check special-1 success:      1
 
15775
UPDATE t1 SET f_charbig = '';
 
15776
        
 
15777
# check special-2 success:      1
 
15778
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15779
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15780
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15781
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15782
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15783
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15784
'just inserted' FROM t0_template
 
15785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15786
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15787
BEGIN
 
15788
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15789
f_charbig = 'updated by trigger'
 
15790
      WHERE f_int1 = new.f_int1;
 
15791
END|
 
15792
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15793
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15794
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15795
        
 
15796
# check trigger-1 success:      1
 
15797
DROP TRIGGER trg_1;
 
15798
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15799
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15800
f_charbig = 'just inserted'
 
15801
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15802
DELETE FROM t0_aux
 
15803
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15804
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15805
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15806
'just inserted' FROM t0_template
 
15807
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15808
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15809
BEGIN
 
15810
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15811
f_charbig = 'updated by trigger'
 
15812
      WHERE f_int1 = new.f_int1;
 
15813
END|
 
15814
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15815
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15816
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15817
        
 
15818
# check trigger-2 success:      1
 
15819
DROP TRIGGER trg_1;
 
15820
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15821
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15822
f_charbig = 'just inserted'
 
15823
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15824
DELETE FROM t0_aux
 
15825
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15826
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15827
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15828
'just inserted' FROM t0_template
 
15829
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15830
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15831
BEGIN
 
15832
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15833
f_charbig = 'updated by trigger'
 
15834
      WHERE f_int1 = new.f_int1;
 
15835
END|
 
15836
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15837
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15838
        
 
15839
# check trigger-3 success:      1
 
15840
DROP TRIGGER trg_1;
 
15841
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15842
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15843
f_charbig = 'just inserted'
 
15844
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15845
DELETE FROM t0_aux
 
15846
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15847
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15848
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15849
'just inserted' FROM t0_template
 
15850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15851
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15852
BEGIN
 
15853
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15854
f_charbig = 'updated by trigger'
 
15855
      WHERE f_int1 = - old.f_int1;
 
15856
END|
 
15857
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15858
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15859
        
 
15860
# check trigger-4 success:      1
 
15861
DROP TRIGGER trg_1;
 
15862
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15863
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15864
f_charbig = 'just inserted'
 
15865
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15866
DELETE FROM t0_aux
 
15867
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15868
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15869
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15870
'just inserted' FROM t0_template
 
15871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15872
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15873
BEGIN
 
15874
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15875
f_charbig = 'updated by trigger'
 
15876
      WHERE f_int1 = new.f_int1;
 
15877
END|
 
15878
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15879
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15880
        
 
15881
# check trigger-5 success:      1
 
15882
DROP TRIGGER trg_1;
 
15883
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15884
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15885
f_charbig = 'just inserted'
 
15886
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15887
DELETE FROM t0_aux
 
15888
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15889
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15890
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15891
'just inserted' FROM t0_template
 
15892
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15893
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15894
BEGIN
 
15895
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15896
f_charbig = 'updated by trigger'
 
15897
      WHERE f_int1 = - old.f_int1;
 
15898
END|
 
15899
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15900
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15901
        
 
15902
# check trigger-6 success:      1
 
15903
DROP TRIGGER trg_1;
 
15904
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15905
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15906
f_charbig = 'just inserted'
 
15907
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15908
DELETE FROM t0_aux
 
15909
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15910
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15911
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15912
'just inserted' FROM t0_template
 
15913
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15914
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15915
BEGIN
 
15916
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15917
f_charbig = 'updated by trigger'
 
15918
      WHERE f_int1 = - old.f_int1;
 
15919
END|
 
15920
DELETE FROM t0_aux
 
15921
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15922
        
 
15923
# check trigger-7 success:      1
 
15924
DROP TRIGGER trg_1;
 
15925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15927
f_charbig = 'just inserted'
 
15928
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15929
DELETE FROM t0_aux
 
15930
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15932
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15933
'just inserted' FROM t0_template
 
15934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15935
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15936
BEGIN
 
15937
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15938
f_charbig = 'updated by trigger'
 
15939
      WHERE f_int1 = - old.f_int1;
 
15940
END|
 
15941
DELETE FROM t0_aux
 
15942
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15943
        
 
15944
# check trigger-8 success:      1
 
15945
DROP TRIGGER trg_1;
 
15946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15948
f_charbig = 'just inserted'
 
15949
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15950
DELETE FROM t0_aux
 
15951
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15952
DELETE FROM t1
 
15953
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15954
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15955
BEGIN
 
15956
SET new.f_int1 = old.f_int1 + @max_row,
 
15957
new.f_int2 = old.f_int2 - @max_row,
 
15958
new.f_charbig = '####updated per update trigger####';
 
15959
END|
 
15960
UPDATE t1
 
15961
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15962
f_charbig = '####updated per update statement itself####';
 
15963
        
 
15964
# check trigger-9 success:      1
 
15965
DROP TRIGGER trg_2;
 
15966
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15967
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15968
f_charbig = CONCAT('===',f_char1,'===');
 
15969
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15970
BEGIN
 
15971
SET new.f_int1 = new.f_int1 + @max_row,
 
15972
new.f_int2 = new.f_int2 - @max_row,
 
15973
new.f_charbig = '####updated per update trigger####';
 
15974
END|
 
15975
UPDATE t1
 
15976
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15977
f_charbig = '####updated per update statement itself####';
 
15978
        
 
15979
# check trigger-10 success:     1
 
15980
DROP TRIGGER trg_2;
 
15981
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15982
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15983
f_charbig = CONCAT('===',f_char1,'===');
 
15984
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15985
BEGIN
 
15986
SET new.f_int1 = @my_max1 + @counter,
 
15987
new.f_int2 = @my_min2 - @counter,
 
15988
new.f_charbig = '####updated per insert trigger####';
 
15989
SET @counter = @counter + 1;
 
15990
END|
 
15991
SET @counter = 1;
 
15992
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15993
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15994
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15995
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15996
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15997
ORDER BY f_int1;
 
15998
DROP TRIGGER trg_3;
 
15999
        
 
16000
# check trigger-11 success:     1
 
16001
DELETE FROM t1
 
16002
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16003
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16004
AND f_charbig = '####updated per insert trigger####';
 
16005
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16006
BEGIN
 
16007
SET new.f_int1 = @my_max1 + @counter,
 
16008
new.f_int2 = @my_min2 - @counter,
 
16009
new.f_charbig = '####updated per insert trigger####';
 
16010
SET @counter = @counter + 1;
 
16011
END|
 
16012
SET @counter = 1;
 
16013
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16014
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16015
SELECT CAST(f_int1 AS CHAR),
 
16016
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16017
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16018
ORDER BY f_int1;
 
16019
DROP TRIGGER trg_3;
 
16020
        
 
16021
# check trigger-12 success:     1
 
16022
DELETE FROM t1
 
16023
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16024
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16025
AND f_charbig = '####updated per insert trigger####';
 
16026
ANALYZE  TABLE t1;
 
16027
Table   Op      Msg_type        Msg_text
 
16028
test.t1 analyze status  OK
 
16029
CHECK    TABLE t1 EXTENDED;
 
16030
Table   Op      Msg_type        Msg_text
 
16031
test.t1 check   status  OK
 
16032
CHECKSUM TABLE t1 EXTENDED;
 
16033
Table   Checksum
 
16034
test.t1 <some_value>
 
16035
OPTIMIZE TABLE t1;
 
16036
Table   Op      Msg_type        Msg_text
 
16037
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
16038
test.t1 optimize        status  OK
 
16039
# check layout success:    1
 
16040
REPAIR   TABLE t1 EXTENDED;
 
16041
Table   Op      Msg_type        Msg_text
 
16042
test.t1 repair  note    The storage engine for the table doesn't support repair
 
16043
# check layout success:    1
 
16044
TRUNCATE t1;
 
16045
        
 
16046
# check TRUNCATE success:       1
 
16047
# check layout success:    1
 
16048
# End usability test (inc/partition_check.inc)
 
16049
DROP TABLE t1;
 
16050
CREATE TABLE t1 (
 
16051
f_int1 INTEGER,
 
16052
f_int2 INTEGER,
 
16053
f_char1 CHAR(20),
 
16054
f_char2 CHAR(20),
 
16055
f_charbig VARCHAR(1000)
 
16056
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
16057
)
 
16058
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
16059
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16060
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
16061
# Start usability test (inc/partition_check.inc)
 
16062
create_command
 
16063
SHOW CREATE TABLE t1;
 
16064
Table   Create Table
 
16065
t1      CREATE TABLE `t1` (
 
16066
  `f_int1` int(11) DEFAULT NULL,
 
16067
  `f_int2` int(11) DEFAULT NULL,
 
16068
  `f_char1` char(20) DEFAULT NULL,
 
16069
  `f_char2` char(20) DEFAULT NULL,
 
16070
  `f_charbig` varchar(1000) DEFAULT NULL,
 
16071
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
16072
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
16073
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
16074
/*!50100 PARTITION BY KEY (f_int1)
 
16075
PARTITIONS 5 */
 
16076
 
 
16077
unified filelist
 
16078
t1.frm
 
16079
t1.par
 
16080
 
 
16081
# check prerequisites-1 success:    1
 
16082
# check COUNT(*) success:    1
 
16083
# check MIN/MAX(f_int1) success:    1
 
16084
# check MIN/MAX(f_int2) success:    1
 
16085
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16086
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16087
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16088
WHERE f_int1 IN (2,3);
 
16089
ERROR 23000: Can't write; duplicate key in table 't1'
 
16090
# check prerequisites-3 success:    1
 
16091
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
16092
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16093
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16094
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16095
WHERE f_int1 IN (2,3);
 
16096
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16097
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16098
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16099
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16100
WHERE f_int1 IN (2,3);
 
16101
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16102
# check read via f_int1 success: 1
 
16103
# check read via f_int2 success: 1
 
16104
        
 
16105
# check multiple-1 success:     1
 
16106
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16107
        
 
16108
# check multiple-2 success:     1
 
16109
INSERT INTO t1 SELECT * FROM t0_template
 
16110
WHERE MOD(f_int1,3) = 0;
 
16111
        
 
16112
# check multiple-3 success:     1
 
16113
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16114
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16115
AND @max_row_div2 + @max_row_div4;
 
16116
        
 
16117
# check multiple-4 success:     1
 
16118
DELETE FROM t1
 
16119
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16120
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16121
        
 
16122
# check multiple-5 success:     1
 
16123
SELECT COUNT(*) INTO @try_count FROM t0_template
 
16124
WHERE MOD(f_int1,3) = 0
 
16125
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16126
SELECT COUNT(*) INTO @clash_count
 
16127
FROM t1 INNER JOIN t0_template USING(f_int1)
 
16128
WHERE MOD(f_int1,3) = 0
 
16129
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16130
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16131
INSERT INTO t1
 
16132
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16133
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16134
f_charbig = '#SINGLE#';
 
16135
        
 
16136
# check single-1 success:       1
 
16137
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16138
INSERT INTO t1
 
16139
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16140
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16141
f_charbig = '#SINGLE#';
 
16142
        
 
16143
# check single-2 success:       1
 
16144
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16145
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16146
UPDATE t1 SET f_int1 = @cur_value2
 
16147
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16148
        
 
16149
# check single-3 success:       1
 
16150
SET @cur_value1= -1;
 
16151
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16152
UPDATE t1 SET f_int1 = @cur_value1
 
16153
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16154
        
 
16155
# check single-4 success:       1
 
16156
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16157
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16158
        
 
16159
# check single-5 success:       1
 
16160
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16161
        
 
16162
# check single-6 success:       1
 
16163
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16164
        
 
16165
# check single-7 success:       1
 
16166
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16167
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16168
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16169
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16170
f_charbig = '#NULL#';
 
16171
INSERT INTO t1
 
16172
SET f_int1 = NULL , f_int2 = -@max_row,
 
16173
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16174
f_charbig = '#NULL#';
 
16175
# check null success:    1
 
16176
        
 
16177
# check null-1 success:         1
 
16178
UPDATE t1 SET f_int1 = -@max_row
 
16179
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16180
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16181
        
 
16182
# check null-2 success:         1
 
16183
UPDATE t1 SET f_int1 = NULL
 
16184
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16185
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16186
        
 
16187
# check null-3 success:         1
 
16188
DELETE FROM t1
 
16189
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16190
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16191
        
 
16192
# check null-4 success:         1
 
16193
DELETE FROM t1
 
16194
WHERE f_int1 = 0 AND f_int2 = 0
 
16195
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16196
AND f_charbig = '#NULL#';
 
16197
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16198
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16199
   FROM t0_template source_tab
 
16200
WHERE MOD(f_int1,3) = 0
 
16201
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
16202
ON DUPLICATE KEY
 
16203
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
16204
f_int2 = 2 * @max_row + source_tab.f_int1,
 
16205
f_charbig = 'was updated';
 
16206
        
 
16207
# check unique-1-a success:     1
 
16208
        
 
16209
# check unique-1-b success:     1
 
16210
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16213
f_charbig = CONCAT('===',f_char1,'===')
 
16214
WHERE f_charbig = 'was updated';
 
16215
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16216
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
16217
   FROM t0_template source_tab
 
16218
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16219
        
 
16220
# check replace success:        1
 
16221
DELETE FROM t1
 
16222
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
16223
DELETE FROM t1
 
16224
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
16225
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
16226
UPDATE t1 SET f_int2 = f_int1,
 
16227
f_char1 = CAST(f_int1 AS CHAR),
 
16228
f_char2 = CAST(f_int1 AS CHAR),
 
16229
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
16230
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
16231
SET AUTOCOMMIT= 0;
 
16232
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16233
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16234
FROM t0_template source_tab
 
16235
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16236
        
 
16237
# check transactions-1 success:         1
 
16238
COMMIT WORK;
 
16239
        
 
16240
# check transactions-2 success:         1
 
16241
ROLLBACK WORK;
 
16242
        
 
16243
# check transactions-3 success:         1
 
16244
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16245
COMMIT WORK;
 
16246
ROLLBACK WORK;
 
16247
        
 
16248
# check transactions-4 success:         1
 
16249
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16250
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16251
FROM t0_template source_tab
 
16252
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16253
        
 
16254
# check transactions-5 success:         1
 
16255
ROLLBACK WORK;
 
16256
        
 
16257
# check transactions-6 success:         1
 
16258
# INFO: Storage engine used for t1 seems to be transactional.
 
16259
COMMIT;
 
16260
        
 
16261
# check transactions-7 success:         1
 
16262
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16263
COMMIT WORK;
 
16264
SET @@session.sql_mode = 'traditional';
 
16265
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16266
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16267
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16268
'', '', 'was inserted' FROM t0_template
 
16269
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16270
ERROR 22012: Division by 0
 
16271
COMMIT;
 
16272
        
 
16273
# check transactions-8 success:         1
 
16274
# INFO: Storage engine used for t1 seems to be able to revert
 
16275
#       changes made by the failing statement.
 
16276
SET @@session.sql_mode = '';
 
16277
SET AUTOCOMMIT= 1;
 
16278
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16279
COMMIT WORK;
 
16280
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16281
        
 
16282
# check special-1 success:      1
 
16283
UPDATE t1 SET f_charbig = '';
 
16284
        
 
16285
# check special-2 success:      1
 
16286
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16287
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16288
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16290
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16291
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16292
'just inserted' FROM t0_template
 
16293
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16294
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16295
BEGIN
 
16296
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16297
f_charbig = 'updated by trigger'
 
16298
      WHERE f_int1 = new.f_int1;
 
16299
END|
 
16300
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16301
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16302
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16303
        
 
16304
# check trigger-1 success:      1
 
16305
DROP TRIGGER trg_1;
 
16306
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16307
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16308
f_charbig = 'just inserted'
 
16309
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16310
DELETE FROM t0_aux
 
16311
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16312
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16313
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16314
'just inserted' FROM t0_template
 
16315
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16316
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16317
BEGIN
 
16318
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16319
f_charbig = 'updated by trigger'
 
16320
      WHERE f_int1 = new.f_int1;
 
16321
END|
 
16322
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16323
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16325
        
 
16326
# check trigger-2 success:      1
 
16327
DROP TRIGGER trg_1;
 
16328
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16329
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16330
f_charbig = 'just inserted'
 
16331
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16332
DELETE FROM t0_aux
 
16333
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16334
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16335
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16336
'just inserted' FROM t0_template
 
16337
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16338
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16339
BEGIN
 
16340
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16341
f_charbig = 'updated by trigger'
 
16342
      WHERE f_int1 = new.f_int1;
 
16343
END|
 
16344
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16345
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16346
        
 
16347
# check trigger-3 success:      1
 
16348
DROP TRIGGER trg_1;
 
16349
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16350
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16351
f_charbig = 'just inserted'
 
16352
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16353
DELETE FROM t0_aux
 
16354
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16355
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16356
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16357
'just inserted' FROM t0_template
 
16358
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16359
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16360
BEGIN
 
16361
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16362
f_charbig = 'updated by trigger'
 
16363
      WHERE f_int1 = - old.f_int1;
 
16364
END|
 
16365
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16366
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16367
        
 
16368
# check trigger-4 success:      1
 
16369
DROP TRIGGER trg_1;
 
16370
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16371
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16372
f_charbig = 'just inserted'
 
16373
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16374
DELETE FROM t0_aux
 
16375
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16376
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16377
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16378
'just inserted' FROM t0_template
 
16379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16380
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16381
BEGIN
 
16382
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16383
f_charbig = 'updated by trigger'
 
16384
      WHERE f_int1 = new.f_int1;
 
16385
END|
 
16386
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16387
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16388
        
 
16389
# check trigger-5 success:      1
 
16390
DROP TRIGGER trg_1;
 
16391
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16392
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16393
f_charbig = 'just inserted'
 
16394
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16395
DELETE FROM t0_aux
 
16396
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16397
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16398
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16399
'just inserted' FROM t0_template
 
16400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16401
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16402
BEGIN
 
16403
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16404
f_charbig = 'updated by trigger'
 
16405
      WHERE f_int1 = - old.f_int1;
 
16406
END|
 
16407
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16408
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16409
        
 
16410
# check trigger-6 success:      1
 
16411
DROP TRIGGER trg_1;
 
16412
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16413
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16414
f_charbig = 'just inserted'
 
16415
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16416
DELETE FROM t0_aux
 
16417
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16418
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16419
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16420
'just inserted' FROM t0_template
 
16421
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16422
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16423
BEGIN
 
16424
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16425
f_charbig = 'updated by trigger'
 
16426
      WHERE f_int1 = - old.f_int1;
 
16427
END|
 
16428
DELETE FROM t0_aux
 
16429
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16430
        
 
16431
# check trigger-7 success:      1
 
16432
DROP TRIGGER trg_1;
 
16433
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16434
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16435
f_charbig = 'just inserted'
 
16436
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16437
DELETE FROM t0_aux
 
16438
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16439
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16440
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16441
'just inserted' FROM t0_template
 
16442
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16443
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16444
BEGIN
 
16445
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16446
f_charbig = 'updated by trigger'
 
16447
      WHERE f_int1 = - old.f_int1;
 
16448
END|
 
16449
DELETE FROM t0_aux
 
16450
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16451
        
 
16452
# check trigger-8 success:      1
 
16453
DROP TRIGGER trg_1;
 
16454
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16455
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16456
f_charbig = 'just inserted'
 
16457
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16458
DELETE FROM t0_aux
 
16459
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16460
DELETE FROM t1
 
16461
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16462
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16463
BEGIN
 
16464
SET new.f_int1 = old.f_int1 + @max_row,
 
16465
new.f_int2 = old.f_int2 - @max_row,
 
16466
new.f_charbig = '####updated per update trigger####';
 
16467
END|
 
16468
UPDATE t1
 
16469
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16470
f_charbig = '####updated per update statement itself####';
 
16471
        
 
16472
# check trigger-9 success:      1
 
16473
DROP TRIGGER trg_2;
 
16474
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16475
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16476
f_charbig = CONCAT('===',f_char1,'===');
 
16477
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16478
BEGIN
 
16479
SET new.f_int1 = new.f_int1 + @max_row,
 
16480
new.f_int2 = new.f_int2 - @max_row,
 
16481
new.f_charbig = '####updated per update trigger####';
 
16482
END|
 
16483
UPDATE t1
 
16484
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16485
f_charbig = '####updated per update statement itself####';
 
16486
        
 
16487
# check trigger-10 success:     1
 
16488
DROP TRIGGER trg_2;
 
16489
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16490
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16491
f_charbig = CONCAT('===',f_char1,'===');
 
16492
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16493
BEGIN
 
16494
SET new.f_int1 = @my_max1 + @counter,
 
16495
new.f_int2 = @my_min2 - @counter,
 
16496
new.f_charbig = '####updated per insert trigger####';
 
16497
SET @counter = @counter + 1;
 
16498
END|
 
16499
SET @counter = 1;
 
16500
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16501
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16502
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16503
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16504
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16505
ORDER BY f_int1;
 
16506
DROP TRIGGER trg_3;
 
16507
        
 
16508
# check trigger-11 success:     1
 
16509
DELETE FROM t1
 
16510
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16511
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16512
AND f_charbig = '####updated per insert trigger####';
 
16513
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16514
BEGIN
 
16515
SET new.f_int1 = @my_max1 + @counter,
 
16516
new.f_int2 = @my_min2 - @counter,
 
16517
new.f_charbig = '####updated per insert trigger####';
 
16518
SET @counter = @counter + 1;
 
16519
END|
 
16520
SET @counter = 1;
 
16521
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16522
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16523
SELECT CAST(f_int1 AS CHAR),
 
16524
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16525
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16526
ORDER BY f_int1;
 
16527
DROP TRIGGER trg_3;
 
16528
        
 
16529
# check trigger-12 success:     1
 
16530
DELETE FROM t1
 
16531
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16532
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16533
AND f_charbig = '####updated per insert trigger####';
 
16534
ANALYZE  TABLE t1;
 
16535
Table   Op      Msg_type        Msg_text
 
16536
test.t1 analyze status  OK
 
16537
CHECK    TABLE t1 EXTENDED;
 
16538
Table   Op      Msg_type        Msg_text
 
16539
test.t1 check   status  OK
 
16540
CHECKSUM TABLE t1 EXTENDED;
 
16541
Table   Checksum
 
16542
test.t1 <some_value>
 
16543
OPTIMIZE TABLE t1;
 
16544
Table   Op      Msg_type        Msg_text
 
16545
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
16546
test.t1 optimize        status  OK
 
16547
# check layout success:    1
 
16548
REPAIR   TABLE t1 EXTENDED;
 
16549
Table   Op      Msg_type        Msg_text
 
16550
test.t1 repair  note    The storage engine for the table doesn't support repair
 
16551
# check layout success:    1
 
16552
TRUNCATE t1;
 
16553
        
 
16554
# check TRUNCATE success:       1
 
16555
# check layout success:    1
 
16556
# End usability test (inc/partition_check.inc)
 
16557
DROP TABLE t1;
 
16558
CREATE TABLE t1 (
 
16559
f_int1 INTEGER,
 
16560
f_int2 INTEGER,
 
16561
f_char1 CHAR(20),
 
16562
f_char2 CHAR(20),
 
16563
f_charbig VARCHAR(1000)
 
16564
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
16565
)
 
16566
PARTITION BY LIST(MOD(f_int1,4))
 
16567
(PARTITION part_3 VALUES IN (-3),
 
16568
PARTITION part_2 VALUES IN (-2),
 
16569
PARTITION part_1 VALUES IN (-1),
 
16570
PARTITION part_N VALUES IN (NULL),
 
16571
PARTITION part0 VALUES IN (0),
 
16572
PARTITION part1 VALUES IN (1),
 
16573
PARTITION part2 VALUES IN (2),
 
16574
PARTITION part3 VALUES IN (3));
 
16575
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16576
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
16577
# Start usability test (inc/partition_check.inc)
 
16578
create_command
 
16579
SHOW CREATE TABLE t1;
 
16580
Table   Create Table
 
16581
t1      CREATE TABLE `t1` (
 
16582
  `f_int1` int(11) DEFAULT NULL,
 
16583
  `f_int2` int(11) DEFAULT NULL,
 
16584
  `f_char1` char(20) DEFAULT NULL,
 
16585
  `f_char2` char(20) DEFAULT NULL,
 
16586
  `f_charbig` varchar(1000) DEFAULT NULL,
 
16587
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
16588
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
16589
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
16590
/*!50100 PARTITION BY LIST (MOD(f_int1,4))
 
16591
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
16592
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
16593
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
16594
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
16595
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
16596
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
16597
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
16598
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
16599
 
 
16600
unified filelist
 
16601
t1.frm
 
16602
t1.par
 
16603
 
 
16604
# check prerequisites-1 success:    1
 
16605
# check COUNT(*) success:    1
 
16606
# check MIN/MAX(f_int1) success:    1
 
16607
# check MIN/MAX(f_int2) success:    1
 
16608
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16609
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16610
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16611
WHERE f_int1 IN (2,3);
 
16612
ERROR 23000: Can't write; duplicate key in table 't1'
 
16613
# check prerequisites-3 success:    1
 
16614
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
16615
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16616
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16617
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16618
WHERE f_int1 IN (2,3);
 
16619
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16620
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16621
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
16622
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
16623
WHERE f_int1 IN (2,3);
 
16624
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16625
# check read via f_int1 success: 1
 
16626
# check read via f_int2 success: 1
 
16627
        
 
16628
# check multiple-1 success:     1
 
16629
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16630
        
 
16631
# check multiple-2 success:     1
 
16632
INSERT INTO t1 SELECT * FROM t0_template
 
16633
WHERE MOD(f_int1,3) = 0;
 
16634
        
 
16635
# check multiple-3 success:     1
 
16636
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16637
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16638
AND @max_row_div2 + @max_row_div4;
 
16639
        
 
16640
# check multiple-4 success:     1
 
16641
DELETE FROM t1
 
16642
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16643
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16644
        
 
16645
# check multiple-5 success:     1
 
16646
SELECT COUNT(*) INTO @try_count FROM t0_template
 
16647
WHERE MOD(f_int1,3) = 0
 
16648
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16649
SELECT COUNT(*) INTO @clash_count
 
16650
FROM t1 INNER JOIN t0_template USING(f_int1)
 
16651
WHERE MOD(f_int1,3) = 0
 
16652
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16653
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16654
INSERT INTO t1
 
16655
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16656
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16657
f_charbig = '#SINGLE#';
 
16658
        
 
16659
# check single-1 success:       1
 
16660
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16661
INSERT INTO t1
 
16662
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16663
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16664
f_charbig = '#SINGLE#';
 
16665
        
 
16666
# check single-2 success:       1
 
16667
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16668
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16669
UPDATE t1 SET f_int1 = @cur_value2
 
16670
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16671
        
 
16672
# check single-3 success:       1
 
16673
SET @cur_value1= -1;
 
16674
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16675
UPDATE t1 SET f_int1 = @cur_value1
 
16676
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16677
        
 
16678
# check single-4 success:       1
 
16679
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16680
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16681
        
 
16682
# check single-5 success:       1
 
16683
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16684
        
 
16685
# check single-6 success:       1
 
16686
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16687
        
 
16688
# check single-7 success:       1
 
16689
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16690
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16691
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16692
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16693
f_charbig = '#NULL#';
 
16694
INSERT INTO t1
 
16695
SET f_int1 = NULL , f_int2 = -@max_row,
 
16696
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16697
f_charbig = '#NULL#';
 
16698
# check null success:    1
 
16699
        
 
16700
# check null-1 success:         1
 
16701
UPDATE t1 SET f_int1 = -@max_row
 
16702
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16703
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16704
        
 
16705
# check null-2 success:         1
 
16706
UPDATE t1 SET f_int1 = NULL
 
16707
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16708
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16709
        
 
16710
# check null-3 success:         1
 
16711
DELETE FROM t1
 
16712
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16713
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16714
        
 
16715
# check null-4 success:         1
 
16716
DELETE FROM t1
 
16717
WHERE f_int1 = 0 AND f_int2 = 0
 
16718
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16719
AND f_charbig = '#NULL#';
 
16720
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16721
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16722
   FROM t0_template source_tab
 
16723
WHERE MOD(f_int1,3) = 0
 
16724
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
16725
ON DUPLICATE KEY
 
16726
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
16727
f_int2 = 2 * @max_row + source_tab.f_int1,
 
16728
f_charbig = 'was updated';
 
16729
        
 
16730
# check unique-1-a success:     1
 
16731
        
 
16732
# check unique-1-b success:     1
 
16733
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16734
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16735
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16736
f_charbig = CONCAT('===',f_char1,'===')
 
16737
WHERE f_charbig = 'was updated';
 
16738
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16739
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
16740
   FROM t0_template source_tab
 
16741
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16742
        
 
16743
# check replace success:        1
 
16744
DELETE FROM t1
 
16745
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
16746
DELETE FROM t1
 
16747
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
16748
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
16749
UPDATE t1 SET f_int2 = f_int1,
 
16750
f_char1 = CAST(f_int1 AS CHAR),
 
16751
f_char2 = CAST(f_int1 AS CHAR),
 
16752
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
16753
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
16754
SET AUTOCOMMIT= 0;
 
16755
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16756
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16757
FROM t0_template source_tab
 
16758
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16759
        
 
16760
# check transactions-1 success:         1
 
16761
COMMIT WORK;
 
16762
        
 
16763
# check transactions-2 success:         1
 
16764
ROLLBACK WORK;
 
16765
        
 
16766
# check transactions-3 success:         1
 
16767
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16768
COMMIT WORK;
 
16769
ROLLBACK WORK;
 
16770
        
 
16771
# check transactions-4 success:         1
 
16772
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16773
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16774
FROM t0_template source_tab
 
16775
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16776
        
 
16777
# check transactions-5 success:         1
 
16778
ROLLBACK WORK;
 
16779
        
 
16780
# check transactions-6 success:         1
 
16781
# INFO: Storage engine used for t1 seems to be transactional.
 
16782
COMMIT;
 
16783
        
 
16784
# check transactions-7 success:         1
 
16785
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16786
COMMIT WORK;
 
16787
SET @@session.sql_mode = 'traditional';
 
16788
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16789
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16790
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16791
'', '', 'was inserted' FROM t0_template
 
16792
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16793
ERROR 22012: Division by 0
 
16794
COMMIT;
 
16795
        
 
16796
# check transactions-8 success:         1
 
16797
# INFO: Storage engine used for t1 seems to be able to revert
 
16798
#       changes made by the failing statement.
 
16799
SET @@session.sql_mode = '';
 
16800
SET AUTOCOMMIT= 1;
 
16801
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16802
COMMIT WORK;
 
16803
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16804
        
 
16805
# check special-1 success:      1
 
16806
UPDATE t1 SET f_charbig = '';
 
16807
        
 
16808
# check special-2 success:      1
 
16809
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16810
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16811
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16812
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16813
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16814
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16815
'just inserted' FROM t0_template
 
16816
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16817
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16818
BEGIN
 
16819
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16820
f_charbig = 'updated by trigger'
 
16821
      WHERE f_int1 = new.f_int1;
 
16822
END|
 
16823
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16824
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16825
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16826
        
 
16827
# check trigger-1 success:      1
 
16828
DROP TRIGGER trg_1;
 
16829
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16830
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16831
f_charbig = 'just inserted'
 
16832
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16833
DELETE FROM t0_aux
 
16834
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16835
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16836
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16837
'just inserted' FROM t0_template
 
16838
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16839
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16840
BEGIN
 
16841
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16842
f_charbig = 'updated by trigger'
 
16843
      WHERE f_int1 = new.f_int1;
 
16844
END|
 
16845
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16846
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16847
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16848
        
 
16849
# check trigger-2 success:      1
 
16850
DROP TRIGGER trg_1;
 
16851
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16852
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16853
f_charbig = 'just inserted'
 
16854
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16855
DELETE FROM t0_aux
 
16856
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16857
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16858
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16859
'just inserted' FROM t0_template
 
16860
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16861
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16862
BEGIN
 
16863
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16864
f_charbig = 'updated by trigger'
 
16865
      WHERE f_int1 = new.f_int1;
 
16866
END|
 
16867
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16868
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16869
        
 
16870
# check trigger-3 success:      1
 
16871
DROP TRIGGER trg_1;
 
16872
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16873
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16874
f_charbig = 'just inserted'
 
16875
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16876
DELETE FROM t0_aux
 
16877
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16878
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16879
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16880
'just inserted' FROM t0_template
 
16881
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16882
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16883
BEGIN
 
16884
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16885
f_charbig = 'updated by trigger'
 
16886
      WHERE f_int1 = - old.f_int1;
 
16887
END|
 
16888
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16889
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16890
        
 
16891
# check trigger-4 success:      1
 
16892
DROP TRIGGER trg_1;
 
16893
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16894
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16895
f_charbig = 'just inserted'
 
16896
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16897
DELETE FROM t0_aux
 
16898
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16899
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16900
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16901
'just inserted' FROM t0_template
 
16902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16903
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16904
BEGIN
 
16905
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16906
f_charbig = 'updated by trigger'
 
16907
      WHERE f_int1 = new.f_int1;
 
16908
END|
 
16909
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16910
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16911
        
 
16912
# check trigger-5 success:      1
 
16913
DROP TRIGGER trg_1;
 
16914
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16915
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16916
f_charbig = 'just inserted'
 
16917
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16918
DELETE FROM t0_aux
 
16919
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16920
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16921
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16922
'just inserted' FROM t0_template
 
16923
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16924
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16925
BEGIN
 
16926
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16927
f_charbig = 'updated by trigger'
 
16928
      WHERE f_int1 = - old.f_int1;
 
16929
END|
 
16930
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16931
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16932
        
 
16933
# check trigger-6 success:      1
 
16934
DROP TRIGGER trg_1;
 
16935
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16936
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16937
f_charbig = 'just inserted'
 
16938
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16939
DELETE FROM t0_aux
 
16940
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16941
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16942
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16943
'just inserted' FROM t0_template
 
16944
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16945
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16946
BEGIN
 
16947
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16948
f_charbig = 'updated by trigger'
 
16949
      WHERE f_int1 = - old.f_int1;
 
16950
END|
 
16951
DELETE FROM t0_aux
 
16952
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16953
        
 
16954
# check trigger-7 success:      1
 
16955
DROP TRIGGER trg_1;
 
16956
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16957
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16958
f_charbig = 'just inserted'
 
16959
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16960
DELETE FROM t0_aux
 
16961
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16962
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16963
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16964
'just inserted' FROM t0_template
 
16965
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16966
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16967
BEGIN
 
16968
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16969
f_charbig = 'updated by trigger'
 
16970
      WHERE f_int1 = - old.f_int1;
 
16971
END|
 
16972
DELETE FROM t0_aux
 
16973
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16974
        
 
16975
# check trigger-8 success:      1
 
16976
DROP TRIGGER trg_1;
 
16977
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16978
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16979
f_charbig = 'just inserted'
 
16980
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16981
DELETE FROM t0_aux
 
16982
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16983
DELETE FROM t1
 
16984
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16985
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16986
BEGIN
 
16987
SET new.f_int1 = old.f_int1 + @max_row,
 
16988
new.f_int2 = old.f_int2 - @max_row,
 
16989
new.f_charbig = '####updated per update trigger####';
 
16990
END|
 
16991
UPDATE t1
 
16992
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16993
f_charbig = '####updated per update statement itself####';
 
16994
        
 
16995
# check trigger-9 success:      1
 
16996
DROP TRIGGER trg_2;
 
16997
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16998
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16999
f_charbig = CONCAT('===',f_char1,'===');
 
17000
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17001
BEGIN
 
17002
SET new.f_int1 = new.f_int1 + @max_row,
 
17003
new.f_int2 = new.f_int2 - @max_row,
 
17004
new.f_charbig = '####updated per update trigger####';
 
17005
END|
 
17006
UPDATE t1
 
17007
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17008
f_charbig = '####updated per update statement itself####';
 
17009
        
 
17010
# check trigger-10 success:     1
 
17011
DROP TRIGGER trg_2;
 
17012
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17013
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17014
f_charbig = CONCAT('===',f_char1,'===');
 
17015
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17016
BEGIN
 
17017
SET new.f_int1 = @my_max1 + @counter,
 
17018
new.f_int2 = @my_min2 - @counter,
 
17019
new.f_charbig = '####updated per insert trigger####';
 
17020
SET @counter = @counter + 1;
 
17021
END|
 
17022
SET @counter = 1;
 
17023
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17024
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17025
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17026
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17028
ORDER BY f_int1;
 
17029
DROP TRIGGER trg_3;
 
17030
        
 
17031
# check trigger-11 success:     1
 
17032
DELETE FROM t1
 
17033
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17034
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17035
AND f_charbig = '####updated per insert trigger####';
 
17036
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17037
BEGIN
 
17038
SET new.f_int1 = @my_max1 + @counter,
 
17039
new.f_int2 = @my_min2 - @counter,
 
17040
new.f_charbig = '####updated per insert trigger####';
 
17041
SET @counter = @counter + 1;
 
17042
END|
 
17043
SET @counter = 1;
 
17044
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17045
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17046
SELECT CAST(f_int1 AS CHAR),
 
17047
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17048
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17049
ORDER BY f_int1;
 
17050
DROP TRIGGER trg_3;
 
17051
        
 
17052
# check trigger-12 success:     1
 
17053
DELETE FROM t1
 
17054
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17055
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17056
AND f_charbig = '####updated per insert trigger####';
 
17057
ANALYZE  TABLE t1;
 
17058
Table   Op      Msg_type        Msg_text
 
17059
test.t1 analyze status  OK
 
17060
CHECK    TABLE t1 EXTENDED;
 
17061
Table   Op      Msg_type        Msg_text
 
17062
test.t1 check   status  OK
 
17063
CHECKSUM TABLE t1 EXTENDED;
 
17064
Table   Checksum
 
17065
test.t1 <some_value>
 
17066
OPTIMIZE TABLE t1;
 
17067
Table   Op      Msg_type        Msg_text
 
17068
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
17069
test.t1 optimize        status  OK
 
17070
# check layout success:    1
 
17071
REPAIR   TABLE t1 EXTENDED;
 
17072
Table   Op      Msg_type        Msg_text
 
17073
test.t1 repair  note    The storage engine for the table doesn't support repair
 
17074
# check layout success:    1
 
17075
TRUNCATE t1;
 
17076
        
 
17077
# check TRUNCATE success:       1
 
17078
# check layout success:    1
 
17079
# End usability test (inc/partition_check.inc)
 
17080
DROP TABLE t1;
 
17081
CREATE TABLE t1 (
 
17082
f_int1 INTEGER,
 
17083
f_int2 INTEGER,
 
17084
f_char1 CHAR(20),
 
17085
f_char2 CHAR(20),
 
17086
f_charbig VARCHAR(1000)
 
17087
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
17088
)
 
17089
PARTITION BY RANGE(f_int1)
 
17090
(PARTITION parta VALUES LESS THAN (0),
 
17091
PARTITION partb VALUES LESS THAN (5),
 
17092
PARTITION partc VALUES LESS THAN (10),
 
17093
PARTITION partd VALUES LESS THAN (10 + 5),
 
17094
PARTITION parte VALUES LESS THAN (20),
 
17095
PARTITION partf VALUES LESS THAN (2147483646));
 
17096
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17097
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
17098
# Start usability test (inc/partition_check.inc)
 
17099
create_command
 
17100
SHOW CREATE TABLE t1;
 
17101
Table   Create Table
 
17102
t1      CREATE TABLE `t1` (
 
17103
  `f_int1` int(11) DEFAULT NULL,
 
17104
  `f_int2` int(11) DEFAULT NULL,
 
17105
  `f_char1` char(20) DEFAULT NULL,
 
17106
  `f_char2` char(20) DEFAULT NULL,
 
17107
  `f_charbig` varchar(1000) DEFAULT NULL,
 
17108
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
17109
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
17110
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
17111
/*!50100 PARTITION BY RANGE (f_int1)
 
17112
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
17113
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
17114
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
17115
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
17116
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
17117
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
17118
 
 
17119
unified filelist
 
17120
t1.frm
 
17121
t1.par
 
17122
 
 
17123
# check prerequisites-1 success:    1
 
17124
# check COUNT(*) success:    1
 
17125
# check MIN/MAX(f_int1) success:    1
 
17126
# check MIN/MAX(f_int2) success:    1
 
17127
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17128
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17129
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17130
WHERE f_int1 IN (2,3);
 
17131
ERROR 23000: Can't write; duplicate key in table 't1'
 
17132
# check prerequisites-3 success:    1
 
17133
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
17134
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17135
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
17136
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
17137
WHERE f_int1 IN (2,3);
 
17138
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17139
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17140
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
17141
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
17142
WHERE f_int1 IN (2,3);
 
17143
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17144
# check read via f_int1 success: 1
 
17145
# check read via f_int2 success: 1
 
17146
        
 
17147
# check multiple-1 success:     1
 
17148
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17149
        
 
17150
# check multiple-2 success:     1
 
17151
INSERT INTO t1 SELECT * FROM t0_template
 
17152
WHERE MOD(f_int1,3) = 0;
 
17153
        
 
17154
# check multiple-3 success:     1
 
17155
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17156
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17157
AND @max_row_div2 + @max_row_div4;
 
17158
        
 
17159
# check multiple-4 success:     1
 
17160
DELETE FROM t1
 
17161
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17162
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17163
        
 
17164
# check multiple-5 success:     1
 
17165
SELECT COUNT(*) INTO @try_count FROM t0_template
 
17166
WHERE MOD(f_int1,3) = 0
 
17167
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17168
SELECT COUNT(*) INTO @clash_count
 
17169
FROM t1 INNER JOIN t0_template USING(f_int1)
 
17170
WHERE MOD(f_int1,3) = 0
 
17171
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17172
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17173
INSERT INTO t1
 
17174
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17175
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17176
f_charbig = '#SINGLE#';
 
17177
        
 
17178
# check single-1 success:       1
 
17179
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17180
INSERT INTO t1
 
17181
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17182
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17183
f_charbig = '#SINGLE#';
 
17184
        
 
17185
# check single-2 success:       1
 
17186
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17187
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17188
UPDATE t1 SET f_int1 = @cur_value2
 
17189
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17190
        
 
17191
# check single-3 success:       1
 
17192
SET @cur_value1= -1;
 
17193
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17194
UPDATE t1 SET f_int1 = @cur_value1
 
17195
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17196
        
 
17197
# check single-4 success:       1
 
17198
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17199
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17200
        
 
17201
# check single-5 success:       1
 
17202
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17203
        
 
17204
# check single-6 success:       1
 
17205
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17206
ERROR HY000: Table has no partition for value 2147483647
 
17207
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17208
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17209
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17210
f_charbig = '#NULL#';
 
17211
INSERT INTO t1
 
17212
SET f_int1 = NULL , f_int2 = -@max_row,
 
17213
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17214
f_charbig = '#NULL#';
 
17215
# check null success:    1
 
17216
        
 
17217
# check null-1 success:         1
 
17218
UPDATE t1 SET f_int1 = -@max_row
 
17219
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17220
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17221
        
 
17222
# check null-2 success:         1
 
17223
UPDATE t1 SET f_int1 = NULL
 
17224
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17225
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17226
        
 
17227
# check null-3 success:         1
 
17228
DELETE FROM t1
 
17229
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17230
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17231
        
 
17232
# check null-4 success:         1
 
17233
DELETE FROM t1
 
17234
WHERE f_int1 = 0 AND f_int2 = 0
 
17235
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17236
AND f_charbig = '#NULL#';
 
17237
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17238
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17239
   FROM t0_template source_tab
 
17240
WHERE MOD(f_int1,3) = 0
 
17241
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
17242
ON DUPLICATE KEY
 
17243
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
17244
f_int2 = 2 * @max_row + source_tab.f_int1,
 
17245
f_charbig = 'was updated';
 
17246
        
 
17247
# check unique-1-a success:     1
 
17248
        
 
17249
# check unique-1-b success:     1
 
17250
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17251
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17252
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17253
f_charbig = CONCAT('===',f_char1,'===')
 
17254
WHERE f_charbig = 'was updated';
 
17255
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17256
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
17257
   FROM t0_template source_tab
 
17258
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17259
        
 
17260
# check replace success:        1
 
17261
DELETE FROM t1
 
17262
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
17263
DELETE FROM t1
 
17264
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
17265
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
17266
UPDATE t1 SET f_int2 = f_int1,
 
17267
f_char1 = CAST(f_int1 AS CHAR),
 
17268
f_char2 = CAST(f_int1 AS CHAR),
 
17269
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
17270
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
17271
SET AUTOCOMMIT= 0;
 
17272
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17273
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17274
FROM t0_template source_tab
 
17275
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17276
        
 
17277
# check transactions-1 success:         1
 
17278
COMMIT WORK;
 
17279
        
 
17280
# check transactions-2 success:         1
 
17281
ROLLBACK WORK;
 
17282
        
 
17283
# check transactions-3 success:         1
 
17284
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17285
COMMIT WORK;
 
17286
ROLLBACK WORK;
 
17287
        
 
17288
# check transactions-4 success:         1
 
17289
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17290
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17291
FROM t0_template source_tab
 
17292
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17293
        
 
17294
# check transactions-5 success:         1
 
17295
ROLLBACK WORK;
 
17296
        
 
17297
# check transactions-6 success:         1
 
17298
# INFO: Storage engine used for t1 seems to be transactional.
 
17299
COMMIT;
 
17300
        
 
17301
# check transactions-7 success:         1
 
17302
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17303
COMMIT WORK;
 
17304
SET @@session.sql_mode = 'traditional';
 
17305
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17306
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17307
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17308
'', '', 'was inserted' FROM t0_template
 
17309
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17310
ERROR 22012: Division by 0
 
17311
COMMIT;
 
17312
        
 
17313
# check transactions-8 success:         1
 
17314
# INFO: Storage engine used for t1 seems to be able to revert
 
17315
#       changes made by the failing statement.
 
17316
SET @@session.sql_mode = '';
 
17317
SET AUTOCOMMIT= 1;
 
17318
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17319
COMMIT WORK;
 
17320
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17321
        
 
17322
# check special-1 success:      1
 
17323
UPDATE t1 SET f_charbig = '';
 
17324
        
 
17325
# check special-2 success:      1
 
17326
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17327
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17328
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17329
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17330
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17331
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17332
'just inserted' FROM t0_template
 
17333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17334
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17335
BEGIN
 
17336
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17337
f_charbig = 'updated by trigger'
 
17338
      WHERE f_int1 = new.f_int1;
 
17339
END|
 
17340
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17341
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17342
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17343
        
 
17344
# check trigger-1 success:      1
 
17345
DROP TRIGGER trg_1;
 
17346
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17347
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17348
f_charbig = 'just inserted'
 
17349
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17350
DELETE FROM t0_aux
 
17351
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17352
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17353
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17354
'just inserted' FROM t0_template
 
17355
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17356
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17357
BEGIN
 
17358
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17359
f_charbig = 'updated by trigger'
 
17360
      WHERE f_int1 = new.f_int1;
 
17361
END|
 
17362
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17363
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17364
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17365
        
 
17366
# check trigger-2 success:      1
 
17367
DROP TRIGGER trg_1;
 
17368
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17369
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17370
f_charbig = 'just inserted'
 
17371
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17372
DELETE FROM t0_aux
 
17373
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17374
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17375
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17376
'just inserted' FROM t0_template
 
17377
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17378
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17379
BEGIN
 
17380
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17381
f_charbig = 'updated by trigger'
 
17382
      WHERE f_int1 = new.f_int1;
 
17383
END|
 
17384
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17385
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17386
        
 
17387
# check trigger-3 success:      1
 
17388
DROP TRIGGER trg_1;
 
17389
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17390
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17391
f_charbig = 'just inserted'
 
17392
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17393
DELETE FROM t0_aux
 
17394
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17395
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17396
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17397
'just inserted' FROM t0_template
 
17398
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17399
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17400
BEGIN
 
17401
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17402
f_charbig = 'updated by trigger'
 
17403
      WHERE f_int1 = - old.f_int1;
 
17404
END|
 
17405
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17406
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17407
        
 
17408
# check trigger-4 success:      1
 
17409
DROP TRIGGER trg_1;
 
17410
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17411
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17412
f_charbig = 'just inserted'
 
17413
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17414
DELETE FROM t0_aux
 
17415
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17416
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17417
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17418
'just inserted' FROM t0_template
 
17419
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17420
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17421
BEGIN
 
17422
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17423
f_charbig = 'updated by trigger'
 
17424
      WHERE f_int1 = new.f_int1;
 
17425
END|
 
17426
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17427
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17428
        
 
17429
# check trigger-5 success:      1
 
17430
DROP TRIGGER trg_1;
 
17431
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17432
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17433
f_charbig = 'just inserted'
 
17434
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17435
DELETE FROM t0_aux
 
17436
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17437
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17438
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17439
'just inserted' FROM t0_template
 
17440
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17441
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17442
BEGIN
 
17443
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17444
f_charbig = 'updated by trigger'
 
17445
      WHERE f_int1 = - old.f_int1;
 
17446
END|
 
17447
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17448
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17449
        
 
17450
# check trigger-6 success:      1
 
17451
DROP TRIGGER trg_1;
 
17452
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17453
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17454
f_charbig = 'just inserted'
 
17455
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17456
DELETE FROM t0_aux
 
17457
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17458
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17459
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17460
'just inserted' FROM t0_template
 
17461
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17462
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17463
BEGIN
 
17464
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17465
f_charbig = 'updated by trigger'
 
17466
      WHERE f_int1 = - old.f_int1;
 
17467
END|
 
17468
DELETE FROM t0_aux
 
17469
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17470
        
 
17471
# check trigger-7 success:      1
 
17472
DROP TRIGGER trg_1;
 
17473
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17474
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17475
f_charbig = 'just inserted'
 
17476
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17477
DELETE FROM t0_aux
 
17478
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17479
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17480
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17481
'just inserted' FROM t0_template
 
17482
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17483
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17484
BEGIN
 
17485
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17486
f_charbig = 'updated by trigger'
 
17487
      WHERE f_int1 = - old.f_int1;
 
17488
END|
 
17489
DELETE FROM t0_aux
 
17490
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17491
        
 
17492
# check trigger-8 success:      1
 
17493
DROP TRIGGER trg_1;
 
17494
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17495
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17496
f_charbig = 'just inserted'
 
17497
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17498
DELETE FROM t0_aux
 
17499
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17500
DELETE FROM t1
 
17501
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17502
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17503
BEGIN
 
17504
SET new.f_int1 = old.f_int1 + @max_row,
 
17505
new.f_int2 = old.f_int2 - @max_row,
 
17506
new.f_charbig = '####updated per update trigger####';
 
17507
END|
 
17508
UPDATE t1
 
17509
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17510
f_charbig = '####updated per update statement itself####';
 
17511
        
 
17512
# check trigger-9 success:      1
 
17513
DROP TRIGGER trg_2;
 
17514
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17515
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17516
f_charbig = CONCAT('===',f_char1,'===');
 
17517
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17518
BEGIN
 
17519
SET new.f_int1 = new.f_int1 + @max_row,
 
17520
new.f_int2 = new.f_int2 - @max_row,
 
17521
new.f_charbig = '####updated per update trigger####';
 
17522
END|
 
17523
UPDATE t1
 
17524
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17525
f_charbig = '####updated per update statement itself####';
 
17526
        
 
17527
# check trigger-10 success:     1
 
17528
DROP TRIGGER trg_2;
 
17529
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17530
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17531
f_charbig = CONCAT('===',f_char1,'===');
 
17532
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17533
BEGIN
 
17534
SET new.f_int1 = @my_max1 + @counter,
 
17535
new.f_int2 = @my_min2 - @counter,
 
17536
new.f_charbig = '####updated per insert trigger####';
 
17537
SET @counter = @counter + 1;
 
17538
END|
 
17539
SET @counter = 1;
 
17540
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17541
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17542
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17543
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17544
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17545
ORDER BY f_int1;
 
17546
DROP TRIGGER trg_3;
 
17547
        
 
17548
# check trigger-11 success:     1
 
17549
DELETE FROM t1
 
17550
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17551
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17552
AND f_charbig = '####updated per insert trigger####';
 
17553
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17554
BEGIN
 
17555
SET new.f_int1 = @my_max1 + @counter,
 
17556
new.f_int2 = @my_min2 - @counter,
 
17557
new.f_charbig = '####updated per insert trigger####';
 
17558
SET @counter = @counter + 1;
 
17559
END|
 
17560
SET @counter = 1;
 
17561
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17562
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17563
SELECT CAST(f_int1 AS CHAR),
 
17564
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17565
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17566
ORDER BY f_int1;
 
17567
DROP TRIGGER trg_3;
 
17568
        
 
17569
# check trigger-12 success:     1
 
17570
DELETE FROM t1
 
17571
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17572
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17573
AND f_charbig = '####updated per insert trigger####';
 
17574
ANALYZE  TABLE t1;
 
17575
Table   Op      Msg_type        Msg_text
 
17576
test.t1 analyze status  OK
 
17577
CHECK    TABLE t1 EXTENDED;
 
17578
Table   Op      Msg_type        Msg_text
 
17579
test.t1 check   status  OK
 
17580
CHECKSUM TABLE t1 EXTENDED;
 
17581
Table   Checksum
 
17582
test.t1 <some_value>
 
17583
OPTIMIZE TABLE t1;
 
17584
Table   Op      Msg_type        Msg_text
 
17585
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
17586
test.t1 optimize        status  OK
 
17587
# check layout success:    1
 
17588
REPAIR   TABLE t1 EXTENDED;
 
17589
Table   Op      Msg_type        Msg_text
 
17590
test.t1 repair  note    The storage engine for the table doesn't support repair
 
17591
# check layout success:    1
 
17592
TRUNCATE t1;
 
17593
        
 
17594
# check TRUNCATE success:       1
 
17595
# check layout success:    1
 
17596
# End usability test (inc/partition_check.inc)
 
17597
DROP TABLE t1;
 
17598
CREATE TABLE t1 (
 
17599
f_int1 INTEGER,
 
17600
f_int2 INTEGER,
 
17601
f_char1 CHAR(20),
 
17602
f_char2 CHAR(20),
 
17603
f_charbig VARCHAR(1000)
 
17604
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
17605
)
 
17606
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
17607
(PARTITION parta VALUES LESS THAN (0),
 
17608
PARTITION partb VALUES LESS THAN (5),
 
17609
PARTITION partc VALUES LESS THAN (10),
 
17610
PARTITION partd VALUES LESS THAN (2147483646));
 
17611
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17612
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
17613
# Start usability test (inc/partition_check.inc)
 
17614
create_command
 
17615
SHOW CREATE TABLE t1;
 
17616
Table   Create Table
 
17617
t1      CREATE TABLE `t1` (
 
17618
  `f_int1` int(11) DEFAULT NULL,
 
17619
  `f_int2` int(11) DEFAULT NULL,
 
17620
  `f_char1` char(20) DEFAULT NULL,
 
17621
  `f_char2` char(20) DEFAULT NULL,
 
17622
  `f_charbig` varchar(1000) DEFAULT NULL,
 
17623
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
17624
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
17625
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
17626
/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
 
17627
SUBPARTITION BY HASH (f_int1)
 
17628
SUBPARTITIONS 2
 
17629
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
17630
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
17631
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
17632
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
17633
 
 
17634
unified filelist
 
17635
t1.frm
 
17636
t1.par
 
17637
 
 
17638
# check prerequisites-1 success:    1
 
17639
# check COUNT(*) success:    1
 
17640
# check MIN/MAX(f_int1) success:    1
 
17641
# check MIN/MAX(f_int2) success:    1
 
17642
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17643
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17644
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17645
WHERE f_int1 IN (2,3);
 
17646
ERROR 23000: Can't write; duplicate key in table 't1'
 
17647
# check prerequisites-3 success:    1
 
17648
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
17649
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17650
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
17651
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
17652
WHERE f_int1 IN (2,3);
 
17653
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17654
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17655
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
17656
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
17657
WHERE f_int1 IN (2,3);
 
17658
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17659
# check read via f_int1 success: 1
 
17660
# check read via f_int2 success: 1
 
17661
        
 
17662
# check multiple-1 success:     1
 
17663
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17664
        
 
17665
# check multiple-2 success:     1
 
17666
INSERT INTO t1 SELECT * FROM t0_template
 
17667
WHERE MOD(f_int1,3) = 0;
 
17668
        
 
17669
# check multiple-3 success:     1
 
17670
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17671
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17672
AND @max_row_div2 + @max_row_div4;
 
17673
        
 
17674
# check multiple-4 success:     1
 
17675
DELETE FROM t1
 
17676
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17677
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17678
        
 
17679
# check multiple-5 success:     1
 
17680
SELECT COUNT(*) INTO @try_count FROM t0_template
 
17681
WHERE MOD(f_int1,3) = 0
 
17682
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17683
SELECT COUNT(*) INTO @clash_count
 
17684
FROM t1 INNER JOIN t0_template USING(f_int1)
 
17685
WHERE MOD(f_int1,3) = 0
 
17686
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17687
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17688
INSERT INTO t1
 
17689
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17690
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17691
f_charbig = '#SINGLE#';
 
17692
        
 
17693
# check single-1 success:       1
 
17694
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17695
INSERT INTO t1
 
17696
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17697
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17698
f_charbig = '#SINGLE#';
 
17699
        
 
17700
# check single-2 success:       1
 
17701
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17702
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17703
UPDATE t1 SET f_int1 = @cur_value2
 
17704
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17705
        
 
17706
# check single-3 success:       1
 
17707
SET @cur_value1= -1;
 
17708
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17709
UPDATE t1 SET f_int1 = @cur_value1
 
17710
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17711
        
 
17712
# check single-4 success:       1
 
17713
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17714
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17715
        
 
17716
# check single-5 success:       1
 
17717
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17718
        
 
17719
# check single-6 success:       1
 
17720
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17721
        
 
17722
# check single-7 success:       1
 
17723
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
17724
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17725
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17726
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17727
f_charbig = '#NULL#';
 
17728
INSERT INTO t1
 
17729
SET f_int1 = NULL , f_int2 = -@max_row,
 
17730
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17731
f_charbig = '#NULL#';
 
17732
# check null success:    1
 
17733
        
 
17734
# check null-1 success:         1
 
17735
UPDATE t1 SET f_int1 = -@max_row
 
17736
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17737
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17738
        
 
17739
# check null-2 success:         1
 
17740
UPDATE t1 SET f_int1 = NULL
 
17741
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17742
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17743
        
 
17744
# check null-3 success:         1
 
17745
DELETE FROM t1
 
17746
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17747
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17748
        
 
17749
# check null-4 success:         1
 
17750
DELETE FROM t1
 
17751
WHERE f_int1 = 0 AND f_int2 = 0
 
17752
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17753
AND f_charbig = '#NULL#';
 
17754
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17755
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17756
   FROM t0_template source_tab
 
17757
WHERE MOD(f_int1,3) = 0
 
17758
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
17759
ON DUPLICATE KEY
 
17760
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
17761
f_int2 = 2 * @max_row + source_tab.f_int1,
 
17762
f_charbig = 'was updated';
 
17763
        
 
17764
# check unique-1-a success:     1
 
17765
        
 
17766
# check unique-1-b success:     1
 
17767
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17770
f_charbig = CONCAT('===',f_char1,'===')
 
17771
WHERE f_charbig = 'was updated';
 
17772
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17773
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
17774
   FROM t0_template source_tab
 
17775
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17776
        
 
17777
# check replace success:        1
 
17778
DELETE FROM t1
 
17779
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
17780
DELETE FROM t1
 
17781
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
17782
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
17783
UPDATE t1 SET f_int2 = f_int1,
 
17784
f_char1 = CAST(f_int1 AS CHAR),
 
17785
f_char2 = CAST(f_int1 AS CHAR),
 
17786
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
17787
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
17788
SET AUTOCOMMIT= 0;
 
17789
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17790
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17791
FROM t0_template source_tab
 
17792
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17793
        
 
17794
# check transactions-1 success:         1
 
17795
COMMIT WORK;
 
17796
        
 
17797
# check transactions-2 success:         1
 
17798
ROLLBACK WORK;
 
17799
        
 
17800
# check transactions-3 success:         1
 
17801
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17802
COMMIT WORK;
 
17803
ROLLBACK WORK;
 
17804
        
 
17805
# check transactions-4 success:         1
 
17806
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17807
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17808
FROM t0_template source_tab
 
17809
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17810
        
 
17811
# check transactions-5 success:         1
 
17812
ROLLBACK WORK;
 
17813
        
 
17814
# check transactions-6 success:         1
 
17815
# INFO: Storage engine used for t1 seems to be transactional.
 
17816
COMMIT;
 
17817
        
 
17818
# check transactions-7 success:         1
 
17819
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17820
COMMIT WORK;
 
17821
SET @@session.sql_mode = 'traditional';
 
17822
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17823
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17824
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17825
'', '', 'was inserted' FROM t0_template
 
17826
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17827
ERROR 22012: Division by 0
 
17828
COMMIT;
 
17829
        
 
17830
# check transactions-8 success:         1
 
17831
# INFO: Storage engine used for t1 seems to be able to revert
 
17832
#       changes made by the failing statement.
 
17833
SET @@session.sql_mode = '';
 
17834
SET AUTOCOMMIT= 1;
 
17835
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17836
COMMIT WORK;
 
17837
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17838
        
 
17839
# check special-1 success:      1
 
17840
UPDATE t1 SET f_charbig = '';
 
17841
        
 
17842
# check special-2 success:      1
 
17843
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17844
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17845
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17846
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17847
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17848
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17849
'just inserted' FROM t0_template
 
17850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17851
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17852
BEGIN
 
17853
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17854
f_charbig = 'updated by trigger'
 
17855
      WHERE f_int1 = new.f_int1;
 
17856
END|
 
17857
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17858
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17859
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17860
        
 
17861
# check trigger-1 success:      1
 
17862
DROP TRIGGER trg_1;
 
17863
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17864
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17865
f_charbig = 'just inserted'
 
17866
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17867
DELETE FROM t0_aux
 
17868
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17869
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17870
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17871
'just inserted' FROM t0_template
 
17872
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17873
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17874
BEGIN
 
17875
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17876
f_charbig = 'updated by trigger'
 
17877
      WHERE f_int1 = new.f_int1;
 
17878
END|
 
17879
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17880
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17881
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17882
        
 
17883
# check trigger-2 success:      1
 
17884
DROP TRIGGER trg_1;
 
17885
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17886
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17887
f_charbig = 'just inserted'
 
17888
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17889
DELETE FROM t0_aux
 
17890
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17891
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17892
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17893
'just inserted' FROM t0_template
 
17894
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17895
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17896
BEGIN
 
17897
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17898
f_charbig = 'updated by trigger'
 
17899
      WHERE f_int1 = new.f_int1;
 
17900
END|
 
17901
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17902
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17903
        
 
17904
# check trigger-3 success:      1
 
17905
DROP TRIGGER trg_1;
 
17906
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17907
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17908
f_charbig = 'just inserted'
 
17909
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17910
DELETE FROM t0_aux
 
17911
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17912
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17913
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17914
'just inserted' FROM t0_template
 
17915
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17916
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17917
BEGIN
 
17918
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17919
f_charbig = 'updated by trigger'
 
17920
      WHERE f_int1 = - old.f_int1;
 
17921
END|
 
17922
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17923
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17924
        
 
17925
# check trigger-4 success:      1
 
17926
DROP TRIGGER trg_1;
 
17927
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17928
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17929
f_charbig = 'just inserted'
 
17930
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17931
DELETE FROM t0_aux
 
17932
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17933
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17934
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17935
'just inserted' FROM t0_template
 
17936
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17937
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17938
BEGIN
 
17939
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17940
f_charbig = 'updated by trigger'
 
17941
      WHERE f_int1 = new.f_int1;
 
17942
END|
 
17943
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17944
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17945
        
 
17946
# check trigger-5 success:      1
 
17947
DROP TRIGGER trg_1;
 
17948
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17949
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17950
f_charbig = 'just inserted'
 
17951
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17952
DELETE FROM t0_aux
 
17953
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17954
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17955
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17956
'just inserted' FROM t0_template
 
17957
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17958
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17959
BEGIN
 
17960
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17961
f_charbig = 'updated by trigger'
 
17962
      WHERE f_int1 = - old.f_int1;
 
17963
END|
 
17964
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17965
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17966
        
 
17967
# check trigger-6 success:      1
 
17968
DROP TRIGGER trg_1;
 
17969
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17970
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17971
f_charbig = 'just inserted'
 
17972
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17973
DELETE FROM t0_aux
 
17974
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17975
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17976
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17977
'just inserted' FROM t0_template
 
17978
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17979
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17980
BEGIN
 
17981
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17982
f_charbig = 'updated by trigger'
 
17983
      WHERE f_int1 = - old.f_int1;
 
17984
END|
 
17985
DELETE FROM t0_aux
 
17986
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17987
        
 
17988
# check trigger-7 success:      1
 
17989
DROP TRIGGER trg_1;
 
17990
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17991
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17992
f_charbig = 'just inserted'
 
17993
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17994
DELETE FROM t0_aux
 
17995
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17996
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17997
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17998
'just inserted' FROM t0_template
 
17999
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18000
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18001
BEGIN
 
18002
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18003
f_charbig = 'updated by trigger'
 
18004
      WHERE f_int1 = - old.f_int1;
 
18005
END|
 
18006
DELETE FROM t0_aux
 
18007
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18008
        
 
18009
# check trigger-8 success:      1
 
18010
DROP TRIGGER trg_1;
 
18011
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18012
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18013
f_charbig = 'just inserted'
 
18014
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18015
DELETE FROM t0_aux
 
18016
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18017
DELETE FROM t1
 
18018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18019
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18020
BEGIN
 
18021
SET new.f_int1 = old.f_int1 + @max_row,
 
18022
new.f_int2 = old.f_int2 - @max_row,
 
18023
new.f_charbig = '####updated per update trigger####';
 
18024
END|
 
18025
UPDATE t1
 
18026
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18027
f_charbig = '####updated per update statement itself####';
 
18028
        
 
18029
# check trigger-9 success:      1
 
18030
DROP TRIGGER trg_2;
 
18031
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18032
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18033
f_charbig = CONCAT('===',f_char1,'===');
 
18034
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18035
BEGIN
 
18036
SET new.f_int1 = new.f_int1 + @max_row,
 
18037
new.f_int2 = new.f_int2 - @max_row,
 
18038
new.f_charbig = '####updated per update trigger####';
 
18039
END|
 
18040
UPDATE t1
 
18041
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18042
f_charbig = '####updated per update statement itself####';
 
18043
        
 
18044
# check trigger-10 success:     1
 
18045
DROP TRIGGER trg_2;
 
18046
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18047
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18048
f_charbig = CONCAT('===',f_char1,'===');
 
18049
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18050
BEGIN
 
18051
SET new.f_int1 = @my_max1 + @counter,
 
18052
new.f_int2 = @my_min2 - @counter,
 
18053
new.f_charbig = '####updated per insert trigger####';
 
18054
SET @counter = @counter + 1;
 
18055
END|
 
18056
SET @counter = 1;
 
18057
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18058
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18059
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18060
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18061
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18062
ORDER BY f_int1;
 
18063
DROP TRIGGER trg_3;
 
18064
        
 
18065
# check trigger-11 success:     1
 
18066
DELETE FROM t1
 
18067
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18068
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18069
AND f_charbig = '####updated per insert trigger####';
 
18070
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18071
BEGIN
 
18072
SET new.f_int1 = @my_max1 + @counter,
 
18073
new.f_int2 = @my_min2 - @counter,
 
18074
new.f_charbig = '####updated per insert trigger####';
 
18075
SET @counter = @counter + 1;
 
18076
END|
 
18077
SET @counter = 1;
 
18078
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18079
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18080
SELECT CAST(f_int1 AS CHAR),
 
18081
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18083
ORDER BY f_int1;
 
18084
DROP TRIGGER trg_3;
 
18085
        
 
18086
# check trigger-12 success:     1
 
18087
DELETE FROM t1
 
18088
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18089
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18090
AND f_charbig = '####updated per insert trigger####';
 
18091
ANALYZE  TABLE t1;
 
18092
Table   Op      Msg_type        Msg_text
 
18093
test.t1 analyze status  OK
 
18094
CHECK    TABLE t1 EXTENDED;
 
18095
Table   Op      Msg_type        Msg_text
 
18096
test.t1 check   status  OK
 
18097
CHECKSUM TABLE t1 EXTENDED;
 
18098
Table   Checksum
 
18099
test.t1 <some_value>
 
18100
OPTIMIZE TABLE t1;
 
18101
Table   Op      Msg_type        Msg_text
 
18102
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
18103
test.t1 optimize        status  OK
 
18104
# check layout success:    1
 
18105
REPAIR   TABLE t1 EXTENDED;
 
18106
Table   Op      Msg_type        Msg_text
 
18107
test.t1 repair  note    The storage engine for the table doesn't support repair
 
18108
# check layout success:    1
 
18109
TRUNCATE t1;
 
18110
        
 
18111
# check TRUNCATE success:       1
 
18112
# check layout success:    1
 
18113
# End usability test (inc/partition_check.inc)
 
18114
DROP TABLE t1;
 
18115
CREATE TABLE t1 (
 
18116
f_int1 INTEGER,
 
18117
f_int2 INTEGER,
 
18118
f_char1 CHAR(20),
 
18119
f_char2 CHAR(20),
 
18120
f_charbig VARCHAR(1000)
 
18121
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
18122
)
 
18123
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
18124
(PARTITION part1 VALUES LESS THAN (0)
 
18125
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
18126
PARTITION part2 VALUES LESS THAN (5)
 
18127
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
18128
PARTITION part3 VALUES LESS THAN (10)
 
18129
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
18130
PARTITION part4 VALUES LESS THAN (2147483646)
 
18131
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
18132
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18133
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
18134
# Start usability test (inc/partition_check.inc)
 
18135
create_command
 
18136
SHOW CREATE TABLE t1;
 
18137
Table   Create Table
 
18138
t1      CREATE TABLE `t1` (
 
18139
  `f_int1` int(11) DEFAULT NULL,
 
18140
  `f_int2` int(11) DEFAULT NULL,
 
18141
  `f_char1` char(20) DEFAULT NULL,
 
18142
  `f_char2` char(20) DEFAULT NULL,
 
18143
  `f_charbig` varchar(1000) DEFAULT NULL,
 
18144
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
18145
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
18146
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
18147
/*!50100 PARTITION BY RANGE (f_int1)
 
18148
SUBPARTITION BY KEY (f_int1)
 
18149
(PARTITION part1 VALUES LESS THAN (0)
 
18150
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
18151
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
18152
 PARTITION part2 VALUES LESS THAN (5)
 
18153
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
18154
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
18155
 PARTITION part3 VALUES LESS THAN (10)
 
18156
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
18157
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
18158
 PARTITION part4 VALUES LESS THAN (2147483646)
 
18159
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
18160
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
18161
 
 
18162
unified filelist
 
18163
t1.frm
 
18164
t1.par
 
18165
 
 
18166
# check prerequisites-1 success:    1
 
18167
# check COUNT(*) success:    1
 
18168
# check MIN/MAX(f_int1) success:    1
 
18169
# check MIN/MAX(f_int2) success:    1
 
18170
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18171
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18172
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18173
WHERE f_int1 IN (2,3);
 
18174
ERROR 23000: Can't write; duplicate key in table 't1'
 
18175
# check prerequisites-3 success:    1
 
18176
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
18177
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18178
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
18179
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
18180
WHERE f_int1 IN (2,3);
 
18181
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18182
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18183
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
18184
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
18185
WHERE f_int1 IN (2,3);
 
18186
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18187
# check read via f_int1 success: 1
 
18188
# check read via f_int2 success: 1
 
18189
        
 
18190
# check multiple-1 success:     1
 
18191
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18192
        
 
18193
# check multiple-2 success:     1
 
18194
INSERT INTO t1 SELECT * FROM t0_template
 
18195
WHERE MOD(f_int1,3) = 0;
 
18196
        
 
18197
# check multiple-3 success:     1
 
18198
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18199
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18200
AND @max_row_div2 + @max_row_div4;
 
18201
        
 
18202
# check multiple-4 success:     1
 
18203
DELETE FROM t1
 
18204
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18205
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18206
        
 
18207
# check multiple-5 success:     1
 
18208
SELECT COUNT(*) INTO @try_count FROM t0_template
 
18209
WHERE MOD(f_int1,3) = 0
 
18210
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18211
SELECT COUNT(*) INTO @clash_count
 
18212
FROM t1 INNER JOIN t0_template USING(f_int1)
 
18213
WHERE MOD(f_int1,3) = 0
 
18214
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18215
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18216
INSERT INTO t1
 
18217
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18218
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18219
f_charbig = '#SINGLE#';
 
18220
        
 
18221
# check single-1 success:       1
 
18222
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18223
INSERT INTO t1
 
18224
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18225
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18226
f_charbig = '#SINGLE#';
 
18227
        
 
18228
# check single-2 success:       1
 
18229
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18230
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18231
UPDATE t1 SET f_int1 = @cur_value2
 
18232
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18233
        
 
18234
# check single-3 success:       1
 
18235
SET @cur_value1= -1;
 
18236
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18237
UPDATE t1 SET f_int1 = @cur_value1
 
18238
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18239
        
 
18240
# check single-4 success:       1
 
18241
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18242
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18243
        
 
18244
# check single-5 success:       1
 
18245
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18246
        
 
18247
# check single-6 success:       1
 
18248
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18249
ERROR HY000: Table has no partition for value 2147483647
 
18250
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18251
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18252
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18253
f_charbig = '#NULL#';
 
18254
INSERT INTO t1
 
18255
SET f_int1 = NULL , f_int2 = -@max_row,
 
18256
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18257
f_charbig = '#NULL#';
 
18258
# check null success:    1
 
18259
        
 
18260
# check null-1 success:         1
 
18261
UPDATE t1 SET f_int1 = -@max_row
 
18262
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18263
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18264
        
 
18265
# check null-2 success:         1
 
18266
UPDATE t1 SET f_int1 = NULL
 
18267
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18268
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18269
        
 
18270
# check null-3 success:         1
 
18271
DELETE FROM t1
 
18272
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18273
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18274
        
 
18275
# check null-4 success:         1
 
18276
DELETE FROM t1
 
18277
WHERE f_int1 = 0 AND f_int2 = 0
 
18278
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18279
AND f_charbig = '#NULL#';
 
18280
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18281
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18282
   FROM t0_template source_tab
 
18283
WHERE MOD(f_int1,3) = 0
 
18284
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
18285
ON DUPLICATE KEY
 
18286
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
18287
f_int2 = 2 * @max_row + source_tab.f_int1,
 
18288
f_charbig = 'was updated';
 
18289
        
 
18290
# check unique-1-a success:     1
 
18291
        
 
18292
# check unique-1-b success:     1
 
18293
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18294
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18295
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18296
f_charbig = CONCAT('===',f_char1,'===')
 
18297
WHERE f_charbig = 'was updated';
 
18298
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18299
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
18300
   FROM t0_template source_tab
 
18301
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18302
        
 
18303
# check replace success:        1
 
18304
DELETE FROM t1
 
18305
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
18306
DELETE FROM t1
 
18307
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
18308
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
18309
UPDATE t1 SET f_int2 = f_int1,
 
18310
f_char1 = CAST(f_int1 AS CHAR),
 
18311
f_char2 = CAST(f_int1 AS CHAR),
 
18312
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
18313
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
18314
SET AUTOCOMMIT= 0;
 
18315
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18316
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18317
FROM t0_template source_tab
 
18318
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18319
        
 
18320
# check transactions-1 success:         1
 
18321
COMMIT WORK;
 
18322
        
 
18323
# check transactions-2 success:         1
 
18324
ROLLBACK WORK;
 
18325
        
 
18326
# check transactions-3 success:         1
 
18327
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18328
COMMIT WORK;
 
18329
ROLLBACK WORK;
 
18330
        
 
18331
# check transactions-4 success:         1
 
18332
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18333
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18334
FROM t0_template source_tab
 
18335
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18336
        
 
18337
# check transactions-5 success:         1
 
18338
ROLLBACK WORK;
 
18339
        
 
18340
# check transactions-6 success:         1
 
18341
# INFO: Storage engine used for t1 seems to be transactional.
 
18342
COMMIT;
 
18343
        
 
18344
# check transactions-7 success:         1
 
18345
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18346
COMMIT WORK;
 
18347
SET @@session.sql_mode = 'traditional';
 
18348
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18349
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18350
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18351
'', '', 'was inserted' FROM t0_template
 
18352
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18353
ERROR 22012: Division by 0
 
18354
COMMIT;
 
18355
        
 
18356
# check transactions-8 success:         1
 
18357
# INFO: Storage engine used for t1 seems to be able to revert
 
18358
#       changes made by the failing statement.
 
18359
SET @@session.sql_mode = '';
 
18360
SET AUTOCOMMIT= 1;
 
18361
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18362
COMMIT WORK;
 
18363
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18364
        
 
18365
# check special-1 success:      1
 
18366
UPDATE t1 SET f_charbig = '';
 
18367
        
 
18368
# check special-2 success:      1
 
18369
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18370
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18371
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18372
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18373
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18374
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18375
'just inserted' FROM t0_template
 
18376
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18377
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18378
BEGIN
 
18379
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18380
f_charbig = 'updated by trigger'
 
18381
      WHERE f_int1 = new.f_int1;
 
18382
END|
 
18383
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18384
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18385
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18386
        
 
18387
# check trigger-1 success:      1
 
18388
DROP TRIGGER trg_1;
 
18389
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18390
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18391
f_charbig = 'just inserted'
 
18392
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18393
DELETE FROM t0_aux
 
18394
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18395
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18396
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18397
'just inserted' FROM t0_template
 
18398
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18399
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18400
BEGIN
 
18401
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18402
f_charbig = 'updated by trigger'
 
18403
      WHERE f_int1 = new.f_int1;
 
18404
END|
 
18405
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18406
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18407
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18408
        
 
18409
# check trigger-2 success:      1
 
18410
DROP TRIGGER trg_1;
 
18411
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18412
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18413
f_charbig = 'just inserted'
 
18414
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18415
DELETE FROM t0_aux
 
18416
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18417
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18418
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18419
'just inserted' FROM t0_template
 
18420
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18421
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18422
BEGIN
 
18423
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18424
f_charbig = 'updated by trigger'
 
18425
      WHERE f_int1 = new.f_int1;
 
18426
END|
 
18427
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18428
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18429
        
 
18430
# check trigger-3 success:      1
 
18431
DROP TRIGGER trg_1;
 
18432
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18433
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18434
f_charbig = 'just inserted'
 
18435
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18436
DELETE FROM t0_aux
 
18437
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18438
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18439
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18440
'just inserted' FROM t0_template
 
18441
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18442
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18443
BEGIN
 
18444
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18445
f_charbig = 'updated by trigger'
 
18446
      WHERE f_int1 = - old.f_int1;
 
18447
END|
 
18448
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18449
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18450
        
 
18451
# check trigger-4 success:      1
 
18452
DROP TRIGGER trg_1;
 
18453
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18454
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18455
f_charbig = 'just inserted'
 
18456
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18457
DELETE FROM t0_aux
 
18458
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18459
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18460
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18461
'just inserted' FROM t0_template
 
18462
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18463
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18464
BEGIN
 
18465
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18466
f_charbig = 'updated by trigger'
 
18467
      WHERE f_int1 = new.f_int1;
 
18468
END|
 
18469
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18470
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18471
        
 
18472
# check trigger-5 success:      1
 
18473
DROP TRIGGER trg_1;
 
18474
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18475
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18476
f_charbig = 'just inserted'
 
18477
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18478
DELETE FROM t0_aux
 
18479
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18480
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18481
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18482
'just inserted' FROM t0_template
 
18483
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18484
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18485
BEGIN
 
18486
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18487
f_charbig = 'updated by trigger'
 
18488
      WHERE f_int1 = - old.f_int1;
 
18489
END|
 
18490
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18491
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18492
        
 
18493
# check trigger-6 success:      1
 
18494
DROP TRIGGER trg_1;
 
18495
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18496
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18497
f_charbig = 'just inserted'
 
18498
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18499
DELETE FROM t0_aux
 
18500
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18501
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18502
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18503
'just inserted' FROM t0_template
 
18504
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18505
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18506
BEGIN
 
18507
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18508
f_charbig = 'updated by trigger'
 
18509
      WHERE f_int1 = - old.f_int1;
 
18510
END|
 
18511
DELETE FROM t0_aux
 
18512
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18513
        
 
18514
# check trigger-7 success:      1
 
18515
DROP TRIGGER trg_1;
 
18516
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18517
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18518
f_charbig = 'just inserted'
 
18519
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18520
DELETE FROM t0_aux
 
18521
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18522
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18523
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18524
'just inserted' FROM t0_template
 
18525
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18526
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18527
BEGIN
 
18528
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18529
f_charbig = 'updated by trigger'
 
18530
      WHERE f_int1 = - old.f_int1;
 
18531
END|
 
18532
DELETE FROM t0_aux
 
18533
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18534
        
 
18535
# check trigger-8 success:      1
 
18536
DROP TRIGGER trg_1;
 
18537
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18538
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18539
f_charbig = 'just inserted'
 
18540
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18541
DELETE FROM t0_aux
 
18542
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18543
DELETE FROM t1
 
18544
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18545
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18546
BEGIN
 
18547
SET new.f_int1 = old.f_int1 + @max_row,
 
18548
new.f_int2 = old.f_int2 - @max_row,
 
18549
new.f_charbig = '####updated per update trigger####';
 
18550
END|
 
18551
UPDATE t1
 
18552
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18553
f_charbig = '####updated per update statement itself####';
 
18554
        
 
18555
# check trigger-9 success:      1
 
18556
DROP TRIGGER trg_2;
 
18557
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18558
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18559
f_charbig = CONCAT('===',f_char1,'===');
 
18560
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18561
BEGIN
 
18562
SET new.f_int1 = new.f_int1 + @max_row,
 
18563
new.f_int2 = new.f_int2 - @max_row,
 
18564
new.f_charbig = '####updated per update trigger####';
 
18565
END|
 
18566
UPDATE t1
 
18567
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18568
f_charbig = '####updated per update statement itself####';
 
18569
        
 
18570
# check trigger-10 success:     1
 
18571
DROP TRIGGER trg_2;
 
18572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18574
f_charbig = CONCAT('===',f_char1,'===');
 
18575
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18576
BEGIN
 
18577
SET new.f_int1 = @my_max1 + @counter,
 
18578
new.f_int2 = @my_min2 - @counter,
 
18579
new.f_charbig = '####updated per insert trigger####';
 
18580
SET @counter = @counter + 1;
 
18581
END|
 
18582
SET @counter = 1;
 
18583
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18584
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18585
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18586
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18587
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18588
ORDER BY f_int1;
 
18589
DROP TRIGGER trg_3;
 
18590
        
 
18591
# check trigger-11 success:     1
 
18592
DELETE FROM t1
 
18593
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18594
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18595
AND f_charbig = '####updated per insert trigger####';
 
18596
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18597
BEGIN
 
18598
SET new.f_int1 = @my_max1 + @counter,
 
18599
new.f_int2 = @my_min2 - @counter,
 
18600
new.f_charbig = '####updated per insert trigger####';
 
18601
SET @counter = @counter + 1;
 
18602
END|
 
18603
SET @counter = 1;
 
18604
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18605
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18606
SELECT CAST(f_int1 AS CHAR),
 
18607
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18608
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18609
ORDER BY f_int1;
 
18610
DROP TRIGGER trg_3;
 
18611
        
 
18612
# check trigger-12 success:     1
 
18613
DELETE FROM t1
 
18614
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18615
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18616
AND f_charbig = '####updated per insert trigger####';
 
18617
ANALYZE  TABLE t1;
 
18618
Table   Op      Msg_type        Msg_text
 
18619
test.t1 analyze status  OK
 
18620
CHECK    TABLE t1 EXTENDED;
 
18621
Table   Op      Msg_type        Msg_text
 
18622
test.t1 check   status  OK
 
18623
CHECKSUM TABLE t1 EXTENDED;
 
18624
Table   Checksum
 
18625
test.t1 <some_value>
 
18626
OPTIMIZE TABLE t1;
 
18627
Table   Op      Msg_type        Msg_text
 
18628
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
18629
test.t1 optimize        status  OK
 
18630
# check layout success:    1
 
18631
REPAIR   TABLE t1 EXTENDED;
 
18632
Table   Op      Msg_type        Msg_text
 
18633
test.t1 repair  note    The storage engine for the table doesn't support repair
 
18634
# check layout success:    1
 
18635
TRUNCATE t1;
 
18636
        
 
18637
# check TRUNCATE success:       1
 
18638
# check layout success:    1
 
18639
# End usability test (inc/partition_check.inc)
 
18640
DROP TABLE t1;
 
18641
CREATE TABLE t1 (
 
18642
f_int1 INTEGER,
 
18643
f_int2 INTEGER,
 
18644
f_char1 CHAR(20),
 
18645
f_char2 CHAR(20),
 
18646
f_charbig VARCHAR(1000)
 
18647
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
18648
)
 
18649
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
18650
(PARTITION part1 VALUES IN (0)
 
18651
(SUBPARTITION sp11,
 
18652
SUBPARTITION sp12),
 
18653
PARTITION part2 VALUES IN (1)
 
18654
(SUBPARTITION sp21,
 
18655
SUBPARTITION sp22),
 
18656
PARTITION part3 VALUES IN (2)
 
18657
(SUBPARTITION sp31, 
 
18658
SUBPARTITION sp32),
 
18659
PARTITION part4 VALUES IN (NULL)
 
18660
(SUBPARTITION sp41,
 
18661
SUBPARTITION sp42));
 
18662
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18663
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
18664
# Start usability test (inc/partition_check.inc)
 
18665
create_command
 
18666
SHOW CREATE TABLE t1;
 
18667
Table   Create Table
 
18668
t1      CREATE TABLE `t1` (
 
18669
  `f_int1` int(11) DEFAULT NULL,
 
18670
  `f_int2` int(11) DEFAULT NULL,
 
18671
  `f_char1` char(20) DEFAULT NULL,
 
18672
  `f_char2` char(20) DEFAULT NULL,
 
18673
  `f_charbig` varchar(1000) DEFAULT NULL,
 
18674
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
18675
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
18676
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
18677
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
18678
SUBPARTITION BY HASH (f_int1 + 1)
 
18679
(PARTITION part1 VALUES IN (0)
 
18680
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
18681
  SUBPARTITION sp12 ENGINE = InnoDB),
 
18682
 PARTITION part2 VALUES IN (1)
 
18683
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
18684
  SUBPARTITION sp22 ENGINE = InnoDB),
 
18685
 PARTITION part3 VALUES IN (2)
 
18686
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
18687
  SUBPARTITION sp32 ENGINE = InnoDB),
 
18688
 PARTITION part4 VALUES IN (NULL)
 
18689
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
18690
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
18691
 
 
18692
unified filelist
 
18693
t1.frm
 
18694
t1.par
 
18695
 
 
18696
# check prerequisites-1 success:    1
 
18697
# check COUNT(*) success:    1
 
18698
# check MIN/MAX(f_int1) success:    1
 
18699
# check MIN/MAX(f_int2) success:    1
 
18700
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18701
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18702
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18703
WHERE f_int1 IN (2,3);
 
18704
ERROR 23000: Can't write; duplicate key in table 't1'
 
18705
# check prerequisites-3 success:    1
 
18706
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
18707
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18708
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
18709
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
18710
WHERE f_int1 IN (2,3);
 
18711
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18712
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18713
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
18714
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
18715
WHERE f_int1 IN (2,3);
 
18716
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18717
# check read via f_int1 success: 1
 
18718
# check read via f_int2 success: 1
 
18719
        
 
18720
# check multiple-1 success:     1
 
18721
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18722
        
 
18723
# check multiple-2 success:     1
 
18724
INSERT INTO t1 SELECT * FROM t0_template
 
18725
WHERE MOD(f_int1,3) = 0;
 
18726
        
 
18727
# check multiple-3 success:     1
 
18728
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18729
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18730
AND @max_row_div2 + @max_row_div4;
 
18731
        
 
18732
# check multiple-4 success:     1
 
18733
DELETE FROM t1
 
18734
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18735
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18736
        
 
18737
# check multiple-5 success:     1
 
18738
SELECT COUNT(*) INTO @try_count FROM t0_template
 
18739
WHERE MOD(f_int1,3) = 0
 
18740
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18741
SELECT COUNT(*) INTO @clash_count
 
18742
FROM t1 INNER JOIN t0_template USING(f_int1)
 
18743
WHERE MOD(f_int1,3) = 0
 
18744
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18745
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18746
INSERT INTO t1
 
18747
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18748
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18749
f_charbig = '#SINGLE#';
 
18750
        
 
18751
# check single-1 success:       1
 
18752
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18753
INSERT INTO t1
 
18754
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18755
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18756
f_charbig = '#SINGLE#';
 
18757
        
 
18758
# check single-2 success:       1
 
18759
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18760
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18761
UPDATE t1 SET f_int1 = @cur_value2
 
18762
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18763
        
 
18764
# check single-3 success:       1
 
18765
SET @cur_value1= -1;
 
18766
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18767
UPDATE t1 SET f_int1 = @cur_value1
 
18768
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18769
        
 
18770
# check single-4 success:       1
 
18771
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18772
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18773
        
 
18774
# check single-5 success:       1
 
18775
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18776
        
 
18777
# check single-6 success:       1
 
18778
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18779
        
 
18780
# check single-7 success:       1
 
18781
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
18782
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18783
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18784
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18785
f_charbig = '#NULL#';
 
18786
INSERT INTO t1
 
18787
SET f_int1 = NULL , f_int2 = -@max_row,
 
18788
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18789
f_charbig = '#NULL#';
 
18790
# check null success:    1
 
18791
        
 
18792
# check null-1 success:         1
 
18793
UPDATE t1 SET f_int1 = -@max_row
 
18794
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18795
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18796
        
 
18797
# check null-2 success:         1
 
18798
UPDATE t1 SET f_int1 = NULL
 
18799
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18800
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18801
        
 
18802
# check null-3 success:         1
 
18803
DELETE FROM t1
 
18804
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18805
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18806
        
 
18807
# check null-4 success:         1
 
18808
DELETE FROM t1
 
18809
WHERE f_int1 = 0 AND f_int2 = 0
 
18810
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18811
AND f_charbig = '#NULL#';
 
18812
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18813
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18814
   FROM t0_template source_tab
 
18815
WHERE MOD(f_int1,3) = 0
 
18816
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
18817
ON DUPLICATE KEY
 
18818
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
18819
f_int2 = 2 * @max_row + source_tab.f_int1,
 
18820
f_charbig = 'was updated';
 
18821
        
 
18822
# check unique-1-a success:     1
 
18823
        
 
18824
# check unique-1-b success:     1
 
18825
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18826
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18827
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18828
f_charbig = CONCAT('===',f_char1,'===')
 
18829
WHERE f_charbig = 'was updated';
 
18830
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18831
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
18832
   FROM t0_template source_tab
 
18833
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18834
        
 
18835
# check replace success:        1
 
18836
DELETE FROM t1
 
18837
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
18838
DELETE FROM t1
 
18839
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
18840
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
18841
UPDATE t1 SET f_int2 = f_int1,
 
18842
f_char1 = CAST(f_int1 AS CHAR),
 
18843
f_char2 = CAST(f_int1 AS CHAR),
 
18844
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
18845
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
18846
SET AUTOCOMMIT= 0;
 
18847
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18848
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18849
FROM t0_template source_tab
 
18850
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18851
        
 
18852
# check transactions-1 success:         1
 
18853
COMMIT WORK;
 
18854
        
 
18855
# check transactions-2 success:         1
 
18856
ROLLBACK WORK;
 
18857
        
 
18858
# check transactions-3 success:         1
 
18859
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18860
COMMIT WORK;
 
18861
ROLLBACK WORK;
 
18862
        
 
18863
# check transactions-4 success:         1
 
18864
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18865
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18866
FROM t0_template source_tab
 
18867
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18868
        
 
18869
# check transactions-5 success:         1
 
18870
ROLLBACK WORK;
 
18871
        
 
18872
# check transactions-6 success:         1
 
18873
# INFO: Storage engine used for t1 seems to be transactional.
 
18874
COMMIT;
 
18875
        
 
18876
# check transactions-7 success:         1
 
18877
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18878
COMMIT WORK;
 
18879
SET @@session.sql_mode = 'traditional';
 
18880
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18881
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18882
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18883
'', '', 'was inserted' FROM t0_template
 
18884
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18885
ERROR 22012: Division by 0
 
18886
COMMIT;
 
18887
        
 
18888
# check transactions-8 success:         1
 
18889
# INFO: Storage engine used for t1 seems to be able to revert
 
18890
#       changes made by the failing statement.
 
18891
SET @@session.sql_mode = '';
 
18892
SET AUTOCOMMIT= 1;
 
18893
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18894
COMMIT WORK;
 
18895
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18896
        
 
18897
# check special-1 success:      1
 
18898
UPDATE t1 SET f_charbig = '';
 
18899
        
 
18900
# check special-2 success:      1
 
18901
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18902
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18903
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18904
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18905
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18906
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18907
'just inserted' FROM t0_template
 
18908
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18909
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18910
BEGIN
 
18911
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18912
f_charbig = 'updated by trigger'
 
18913
      WHERE f_int1 = new.f_int1;
 
18914
END|
 
18915
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18916
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18918
        
 
18919
# check trigger-1 success:      1
 
18920
DROP TRIGGER trg_1;
 
18921
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18922
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18923
f_charbig = 'just inserted'
 
18924
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18925
DELETE FROM t0_aux
 
18926
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18927
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18928
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18929
'just inserted' FROM t0_template
 
18930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18931
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18932
BEGIN
 
18933
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18934
f_charbig = 'updated by trigger'
 
18935
      WHERE f_int1 = new.f_int1;
 
18936
END|
 
18937
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18938
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18939
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18940
        
 
18941
# check trigger-2 success:      1
 
18942
DROP TRIGGER trg_1;
 
18943
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18944
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18945
f_charbig = 'just inserted'
 
18946
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18947
DELETE FROM t0_aux
 
18948
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18949
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18950
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18951
'just inserted' FROM t0_template
 
18952
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18953
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18954
BEGIN
 
18955
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18956
f_charbig = 'updated by trigger'
 
18957
      WHERE f_int1 = new.f_int1;
 
18958
END|
 
18959
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18960
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18961
        
 
18962
# check trigger-3 success:      1
 
18963
DROP TRIGGER trg_1;
 
18964
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18965
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18966
f_charbig = 'just inserted'
 
18967
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18968
DELETE FROM t0_aux
 
18969
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18970
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18971
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18972
'just inserted' FROM t0_template
 
18973
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18974
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18975
BEGIN
 
18976
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18977
f_charbig = 'updated by trigger'
 
18978
      WHERE f_int1 = - old.f_int1;
 
18979
END|
 
18980
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18981
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18982
        
 
18983
# check trigger-4 success:      1
 
18984
DROP TRIGGER trg_1;
 
18985
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18986
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18987
f_charbig = 'just inserted'
 
18988
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18989
DELETE FROM t0_aux
 
18990
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18991
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18992
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18993
'just inserted' FROM t0_template
 
18994
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18995
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18996
BEGIN
 
18997
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18998
f_charbig = 'updated by trigger'
 
18999
      WHERE f_int1 = new.f_int1;
 
19000
END|
 
19001
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19002
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19003
        
 
19004
# check trigger-5 success:      1
 
19005
DROP TRIGGER trg_1;
 
19006
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19007
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19008
f_charbig = 'just inserted'
 
19009
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19010
DELETE FROM t0_aux
 
19011
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19012
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19013
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19014
'just inserted' FROM t0_template
 
19015
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19016
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19017
BEGIN
 
19018
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19019
f_charbig = 'updated by trigger'
 
19020
      WHERE f_int1 = - old.f_int1;
 
19021
END|
 
19022
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19023
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19024
        
 
19025
# check trigger-6 success:      1
 
19026
DROP TRIGGER trg_1;
 
19027
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19028
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19029
f_charbig = 'just inserted'
 
19030
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19031
DELETE FROM t0_aux
 
19032
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19033
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19034
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19035
'just inserted' FROM t0_template
 
19036
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19037
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19038
BEGIN
 
19039
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19040
f_charbig = 'updated by trigger'
 
19041
      WHERE f_int1 = - old.f_int1;
 
19042
END|
 
19043
DELETE FROM t0_aux
 
19044
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19045
        
 
19046
# check trigger-7 success:      1
 
19047
DROP TRIGGER trg_1;
 
19048
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19049
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19050
f_charbig = 'just inserted'
 
19051
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19052
DELETE FROM t0_aux
 
19053
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19054
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19055
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19056
'just inserted' FROM t0_template
 
19057
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19058
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19059
BEGIN
 
19060
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19061
f_charbig = 'updated by trigger'
 
19062
      WHERE f_int1 = - old.f_int1;
 
19063
END|
 
19064
DELETE FROM t0_aux
 
19065
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19066
        
 
19067
# check trigger-8 success:      1
 
19068
DROP TRIGGER trg_1;
 
19069
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19070
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19071
f_charbig = 'just inserted'
 
19072
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19073
DELETE FROM t0_aux
 
19074
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19075
DELETE FROM t1
 
19076
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19077
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19078
BEGIN
 
19079
SET new.f_int1 = old.f_int1 + @max_row,
 
19080
new.f_int2 = old.f_int2 - @max_row,
 
19081
new.f_charbig = '####updated per update trigger####';
 
19082
END|
 
19083
UPDATE t1
 
19084
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19085
f_charbig = '####updated per update statement itself####';
 
19086
        
 
19087
# check trigger-9 success:      1
 
19088
DROP TRIGGER trg_2;
 
19089
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19090
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19091
f_charbig = CONCAT('===',f_char1,'===');
 
19092
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19093
BEGIN
 
19094
SET new.f_int1 = new.f_int1 + @max_row,
 
19095
new.f_int2 = new.f_int2 - @max_row,
 
19096
new.f_charbig = '####updated per update trigger####';
 
19097
END|
 
19098
UPDATE t1
 
19099
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19100
f_charbig = '####updated per update statement itself####';
 
19101
        
 
19102
# check trigger-10 success:     1
 
19103
DROP TRIGGER trg_2;
 
19104
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19105
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19106
f_charbig = CONCAT('===',f_char1,'===');
 
19107
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19108
BEGIN
 
19109
SET new.f_int1 = @my_max1 + @counter,
 
19110
new.f_int2 = @my_min2 - @counter,
 
19111
new.f_charbig = '####updated per insert trigger####';
 
19112
SET @counter = @counter + 1;
 
19113
END|
 
19114
SET @counter = 1;
 
19115
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19116
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19117
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19118
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19119
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19120
ORDER BY f_int1;
 
19121
DROP TRIGGER trg_3;
 
19122
        
 
19123
# check trigger-11 success:     1
 
19124
DELETE FROM t1
 
19125
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19126
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19127
AND f_charbig = '####updated per insert trigger####';
 
19128
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19129
BEGIN
 
19130
SET new.f_int1 = @my_max1 + @counter,
 
19131
new.f_int2 = @my_min2 - @counter,
 
19132
new.f_charbig = '####updated per insert trigger####';
 
19133
SET @counter = @counter + 1;
 
19134
END|
 
19135
SET @counter = 1;
 
19136
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19137
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19138
SELECT CAST(f_int1 AS CHAR),
 
19139
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19140
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19141
ORDER BY f_int1;
 
19142
DROP TRIGGER trg_3;
 
19143
        
 
19144
# check trigger-12 success:     1
 
19145
DELETE FROM t1
 
19146
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19147
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19148
AND f_charbig = '####updated per insert trigger####';
 
19149
ANALYZE  TABLE t1;
 
19150
Table   Op      Msg_type        Msg_text
 
19151
test.t1 analyze status  OK
 
19152
CHECK    TABLE t1 EXTENDED;
 
19153
Table   Op      Msg_type        Msg_text
 
19154
test.t1 check   status  OK
 
19155
CHECKSUM TABLE t1 EXTENDED;
 
19156
Table   Checksum
 
19157
test.t1 <some_value>
 
19158
OPTIMIZE TABLE t1;
 
19159
Table   Op      Msg_type        Msg_text
 
19160
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
19161
test.t1 optimize        status  OK
 
19162
# check layout success:    1
 
19163
REPAIR   TABLE t1 EXTENDED;
 
19164
Table   Op      Msg_type        Msg_text
 
19165
test.t1 repair  note    The storage engine for the table doesn't support repair
 
19166
# check layout success:    1
 
19167
TRUNCATE t1;
 
19168
        
 
19169
# check TRUNCATE success:       1
 
19170
# check layout success:    1
 
19171
# End usability test (inc/partition_check.inc)
 
19172
DROP TABLE t1;
 
19173
CREATE TABLE t1 (
 
19174
f_int1 INTEGER,
 
19175
f_int2 INTEGER,
 
19176
f_char1 CHAR(20),
 
19177
f_char2 CHAR(20),
 
19178
f_charbig VARCHAR(1000)
 
19179
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
19180
)
 
19181
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
19182
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
19183
(PARTITION part1 VALUES IN (0),
 
19184
PARTITION part2 VALUES IN (1),
 
19185
PARTITION part3 VALUES IN (NULL));
 
19186
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19187
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
19188
# Start usability test (inc/partition_check.inc)
 
19189
create_command
 
19190
SHOW CREATE TABLE t1;
 
19191
Table   Create Table
 
19192
t1      CREATE TABLE `t1` (
 
19193
  `f_int1` int(11) DEFAULT NULL,
 
19194
  `f_int2` int(11) DEFAULT NULL,
 
19195
  `f_char1` char(20) DEFAULT NULL,
 
19196
  `f_char2` char(20) DEFAULT NULL,
 
19197
  `f_charbig` varchar(1000) DEFAULT NULL,
 
19198
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
19199
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
19200
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
19201
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
19202
SUBPARTITION BY KEY (f_int1)
 
19203
SUBPARTITIONS 3
 
19204
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
19205
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
19206
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
18902
19207
 
18903
19208
unified filelist
18904
19209
t1.frm
19410
19715
  `f_charbig` varchar(1000) DEFAULT NULL,
19411
19716
  PRIMARY KEY (`f_int2`,`f_int1`),
19412
19717
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
19413
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
19414
 
 
19415
 
unified filelist
19416
 
t1.frm
19417
 
t1.par
19418
 
 
19419
 
# check prerequisites-1 success:    1
19420
 
# check COUNT(*) success:    1
19421
 
# check MIN/MAX(f_int1) success:    1
19422
 
# check MIN/MAX(f_int2) success:    1
19423
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19424
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19425
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19426
 
WHERE f_int1 IN (2,3);
19427
 
ERROR 23000: Can't write; duplicate key in table 't1'
19428
 
# check prerequisites-3 success:    1
19429
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19430
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19431
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19432
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19433
 
WHERE f_int1 IN (2,3);
19434
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
19435
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19436
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19437
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19438
 
WHERE f_int1 IN (2,3);
19439
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
19440
 
# check read via f_int1 success: 1
19441
 
# check read via f_int2 success: 1
19442
 
        
19443
 
# check multiple-1 success:     1
19444
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
19445
 
        
19446
 
# check multiple-2 success:     1
19447
 
INSERT INTO t1 SELECT * FROM t0_template
19448
 
WHERE MOD(f_int1,3) = 0;
19449
 
        
19450
 
# check multiple-3 success:     1
19451
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
19452
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
19453
 
AND @max_row_div2 + @max_row_div4;
19454
 
        
19455
 
# check multiple-4 success:     1
19456
 
DELETE FROM t1
19457
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
19458
 
AND @max_row_div2 + @max_row_div4 + @max_row;
19459
 
        
19460
 
# check multiple-5 success:     1
19461
 
SELECT COUNT(*) INTO @try_count FROM t0_template
19462
 
WHERE MOD(f_int1,3) = 0
19463
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19464
 
SELECT COUNT(*) INTO @clash_count
19465
 
FROM t1 INNER JOIN t0_template USING(f_int1)
19466
 
WHERE MOD(f_int1,3) = 0
19467
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19468
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
19469
 
INSERT INTO t1
19470
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
19471
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19472
 
f_charbig = '#SINGLE#';
19473
 
        
19474
 
# check single-1 success:       1
19475
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
19476
 
INSERT INTO t1
19477
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
19478
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19479
 
f_charbig = '#SINGLE#';
19480
 
        
19481
 
# check single-2 success:       1
19482
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
19483
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
19484
 
UPDATE t1 SET f_int1 = @cur_value2
19485
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
19486
 
        
19487
 
# check single-3 success:       1
19488
 
SET @cur_value1= -1;
19489
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
19490
 
UPDATE t1 SET f_int1 = @cur_value1
19491
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
19492
 
        
19493
 
# check single-4 success:       1
19494
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
19495
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
19496
 
        
19497
 
# check single-5 success:       1
19498
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
19499
 
        
19500
 
# check single-6 success:       1
19501
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
19502
 
        
19503
 
# check single-7 success:       1
19504
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
19505
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
19506
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
19507
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
19508
 
f_charbig = '#NULL#';
19509
 
INSERT INTO t1
19510
 
SET f_int1 = NULL , f_int2 = -@max_row,
19511
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
19512
 
f_charbig = '#NULL#';
19513
 
ERROR 23000: Column 'f_int1' cannot be null
19514
 
# check null success:    1
19515
 
DELETE FROM t1
19516
 
WHERE f_int1 = 0 AND f_int2 = 0
19517
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
19518
 
AND f_charbig = '#NULL#';
19519
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19520
 
SELECT f_int1, f_int1, '', '', 'was inserted'
19521
 
   FROM t0_template source_tab
19522
 
WHERE MOD(f_int1,3) = 0
19523
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
19524
 
ON DUPLICATE KEY
19525
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
19526
 
f_int2 = 2 * @max_row + source_tab.f_int1,
19527
 
f_charbig = 'was updated';
19528
 
        
19529
 
# check unique-1-a success:     1
19530
 
        
19531
 
# check unique-1-b success:     1
19532
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
19533
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19534
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19535
 
f_charbig = CONCAT('===',f_char1,'===')
19536
 
WHERE f_charbig = 'was updated';
19537
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19538
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
19539
 
   FROM t0_template source_tab
19540
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19541
 
        
19542
 
# check replace success:        1
19543
 
DELETE FROM t1
19544
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
19545
 
DELETE FROM t1
19546
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
19547
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
19548
 
UPDATE t1 SET f_int2 = f_int1,
19549
 
f_char1 = CAST(f_int1 AS CHAR),
19550
 
f_char2 = CAST(f_int1 AS CHAR),
19551
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
19552
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
19553
 
SET AUTOCOMMIT= 0;
19554
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19555
 
SELECT f_int1, f_int1, '', '', 'was inserted'
19556
 
FROM t0_template source_tab
19557
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19558
 
        
19559
 
# check transactions-1 success:         1
19560
 
COMMIT WORK;
19561
 
        
19562
 
# check transactions-2 success:         1
19563
 
ROLLBACK WORK;
19564
 
        
19565
 
# check transactions-3 success:         1
19566
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
19567
 
COMMIT WORK;
19568
 
ROLLBACK WORK;
19569
 
        
19570
 
# check transactions-4 success:         1
19571
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19572
 
SELECT f_int1, f_int1, '', '', 'was inserted'
19573
 
FROM t0_template source_tab
19574
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19575
 
        
19576
 
# check transactions-5 success:         1
19577
 
ROLLBACK WORK;
19578
 
        
19579
 
# check transactions-6 success:         1
19580
 
# INFO: Storage engine used for t1 seems to be transactional.
19581
 
COMMIT;
19582
 
        
19583
 
# check transactions-7 success:         1
19584
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
19585
 
COMMIT WORK;
19586
 
SET @@session.sql_mode = 'traditional';
19587
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
19588
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19589
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
19590
 
'', '', 'was inserted' FROM t0_template
19591
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19592
 
ERROR 22012: Division by 0
19593
 
COMMIT;
19594
 
        
19595
 
# check transactions-8 success:         1
19596
 
# INFO: Storage engine used for t1 seems to be able to revert
19597
 
#       changes made by the failing statement.
19598
 
SET @@session.sql_mode = '';
19599
 
SET AUTOCOMMIT= 1;
19600
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
19601
 
COMMIT WORK;
19602
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
19603
 
        
19604
 
# check special-1 success:      1
19605
 
UPDATE t1 SET f_charbig = '';
19606
 
        
19607
 
# check special-2 success:      1
19608
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
19609
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19610
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
19611
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19612
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19613
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19614
 
'just inserted' FROM t0_template
19615
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19616
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
19617
 
BEGIN
19618
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19619
 
f_charbig = 'updated by trigger'
19620
 
      WHERE f_int1 = new.f_int1;
19621
 
END|
19622
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19623
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19624
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19625
 
        
19626
 
# check trigger-1 success:      1
19627
 
DROP TRIGGER trg_1;
19628
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19629
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19630
 
f_charbig = 'just inserted'
19631
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19632
 
DELETE FROM t0_aux
19633
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19634
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19635
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19636
 
'just inserted' FROM t0_template
19637
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19638
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
19639
 
BEGIN
19640
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19641
 
f_charbig = 'updated by trigger'
19642
 
      WHERE f_int1 = new.f_int1;
19643
 
END|
19644
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19645
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19646
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19647
 
        
19648
 
# check trigger-2 success:      1
19649
 
DROP TRIGGER trg_1;
19650
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19651
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19652
 
f_charbig = 'just inserted'
19653
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19654
 
DELETE FROM t0_aux
19655
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19656
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19657
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19658
 
'just inserted' FROM t0_template
19659
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19660
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19661
 
BEGIN
19662
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19663
 
f_charbig = 'updated by trigger'
19664
 
      WHERE f_int1 = new.f_int1;
19665
 
END|
19666
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19667
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19668
 
        
19669
 
# check trigger-3 success:      1
19670
 
DROP TRIGGER trg_1;
19671
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19672
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19673
 
f_charbig = 'just inserted'
19674
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19675
 
DELETE FROM t0_aux
19676
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19677
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19678
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19679
 
'just inserted' FROM t0_template
19680
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19681
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19682
 
BEGIN
19683
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19684
 
f_charbig = 'updated by trigger'
19685
 
      WHERE f_int1 = - old.f_int1;
19686
 
END|
19687
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19688
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19689
 
        
19690
 
# check trigger-4 success:      1
19691
 
DROP TRIGGER trg_1;
19692
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19693
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19694
 
f_charbig = 'just inserted'
19695
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19696
 
DELETE FROM t0_aux
19697
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19698
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19699
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19700
 
'just inserted' FROM t0_template
19701
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19702
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19703
 
BEGIN
19704
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19705
 
f_charbig = 'updated by trigger'
19706
 
      WHERE f_int1 = new.f_int1;
19707
 
END|
19708
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19709
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19710
 
        
19711
 
# check trigger-5 success:      1
19712
 
DROP TRIGGER trg_1;
19713
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19714
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19715
 
f_charbig = 'just inserted'
19716
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19717
 
DELETE FROM t0_aux
19718
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19719
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19720
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19721
 
'just inserted' FROM t0_template
19722
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19723
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19724
 
BEGIN
19725
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19726
 
f_charbig = 'updated by trigger'
19727
 
      WHERE f_int1 = - old.f_int1;
19728
 
END|
19729
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19730
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19731
 
        
19732
 
# check trigger-6 success:      1
19733
 
DROP TRIGGER trg_1;
19734
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19735
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19736
 
f_charbig = 'just inserted'
19737
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19738
 
DELETE FROM t0_aux
19739
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19740
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19741
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19742
 
'just inserted' FROM t0_template
19743
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19744
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
19745
 
BEGIN
19746
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19747
 
f_charbig = 'updated by trigger'
19748
 
      WHERE f_int1 = - old.f_int1;
19749
 
END|
19750
 
DELETE FROM t0_aux
19751
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19752
 
        
19753
 
# check trigger-7 success:      1
19754
 
DROP TRIGGER trg_1;
19755
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19756
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19757
 
f_charbig = 'just inserted'
19758
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19759
 
DELETE FROM t0_aux
19760
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19761
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19762
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19763
 
'just inserted' FROM t0_template
19764
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19765
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
19766
 
BEGIN
19767
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19768
 
f_charbig = 'updated by trigger'
19769
 
      WHERE f_int1 = - old.f_int1;
19770
 
END|
19771
 
DELETE FROM t0_aux
19772
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19773
 
        
19774
 
# check trigger-8 success:      1
19775
 
DROP TRIGGER trg_1;
19776
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19777
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19778
 
f_charbig = 'just inserted'
19779
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19780
 
DELETE FROM t0_aux
19781
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19782
 
DELETE FROM t1
19783
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19784
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19785
 
BEGIN
19786
 
SET new.f_int1 = old.f_int1 + @max_row,
19787
 
new.f_int2 = old.f_int2 - @max_row,
19788
 
new.f_charbig = '####updated per update trigger####';
19789
 
END|
19790
 
UPDATE t1
19791
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19792
 
f_charbig = '####updated per update statement itself####';
19793
 
        
19794
 
# check trigger-9 success:      1
19795
 
DROP TRIGGER trg_2;
19796
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19797
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19798
 
f_charbig = CONCAT('===',f_char1,'===');
19799
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19800
 
BEGIN
19801
 
SET new.f_int1 = new.f_int1 + @max_row,
19802
 
new.f_int2 = new.f_int2 - @max_row,
19803
 
new.f_charbig = '####updated per update trigger####';
19804
 
END|
19805
 
UPDATE t1
19806
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19807
 
f_charbig = '####updated per update statement itself####';
19808
 
        
19809
 
# check trigger-10 success:     1
19810
 
DROP TRIGGER trg_2;
19811
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19812
 
f_int2 = CAST(f_char1 AS SIGNED INT),
19813
 
f_charbig = CONCAT('===',f_char1,'===');
19814
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19815
 
BEGIN
19816
 
SET new.f_int1 = @my_max1 + @counter,
19817
 
new.f_int2 = @my_min2 - @counter,
19818
 
new.f_charbig = '####updated per insert trigger####';
19819
 
SET @counter = @counter + 1;
19820
 
END|
19821
 
SET @counter = 1;
19822
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19823
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19824
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19825
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19826
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19827
 
ORDER BY f_int1;
19828
 
DROP TRIGGER trg_3;
19829
 
        
19830
 
# check trigger-11 success:     1
19831
 
DELETE FROM t1
19832
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19833
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19834
 
AND f_charbig = '####updated per insert trigger####';
19835
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19836
 
BEGIN
19837
 
SET new.f_int1 = @my_max1 + @counter,
19838
 
new.f_int2 = @my_min2 - @counter,
19839
 
new.f_charbig = '####updated per insert trigger####';
19840
 
SET @counter = @counter + 1;
19841
 
END|
19842
 
SET @counter = 1;
19843
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19844
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
19845
 
SELECT CAST(f_int1 AS CHAR),
19846
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19847
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19848
 
ORDER BY f_int1;
19849
 
DROP TRIGGER trg_3;
19850
 
        
19851
 
# check trigger-12 success:     1
19852
 
DELETE FROM t1
19853
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19854
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19855
 
AND f_charbig = '####updated per insert trigger####';
19856
 
ANALYZE  TABLE t1;
19857
 
Table   Op      Msg_type        Msg_text
19858
 
test.t1 analyze status  OK
19859
 
CHECK    TABLE t1 EXTENDED;
19860
 
Table   Op      Msg_type        Msg_text
19861
 
test.t1 check   status  OK
19862
 
CHECKSUM TABLE t1 EXTENDED;
19863
 
Table   Checksum
19864
 
test.t1 <some_value>
19865
 
OPTIMIZE TABLE t1;
19866
 
Table   Op      Msg_type        Msg_text
19867
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
19868
 
test.t1 optimize        status  OK
19869
 
# check layout success:    1
19870
 
REPAIR   TABLE t1 EXTENDED;
19871
 
Table   Op      Msg_type        Msg_text
19872
 
test.t1 repair  note    The storage engine for the table doesn't support repair
19873
 
# check layout success:    1
19874
 
TRUNCATE t1;
19875
 
        
19876
 
# check TRUNCATE success:       1
19877
 
# check layout success:    1
19878
 
# End usability test (inc/partition_check.inc)
19879
 
DROP TABLE t1;
19880
 
CREATE TABLE t1 (
19881
 
f_int1 INTEGER,
19882
 
f_int2 INTEGER,
19883
 
f_char1 CHAR(20),
19884
 
f_char2 CHAR(20),
19885
 
f_charbig VARCHAR(1000)
19886
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
19887
 
)
19888
 
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
19889
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19890
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
19891
 
# Start usability test (inc/partition_check.inc)
19892
 
create_command
19893
 
SHOW CREATE TABLE t1;
19894
 
Table   Create Table
19895
 
t1      CREATE TABLE `t1` (
19896
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
19897
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
19898
 
  `f_char1` char(20) DEFAULT NULL,
19899
 
  `f_char2` char(20) DEFAULT NULL,
19900
 
  `f_charbig` varchar(1000) DEFAULT NULL,
19901
 
  PRIMARY KEY (`f_int2`,`f_int1`),
19902
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
19903
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
19904
 
 
19905
 
unified filelist
19906
 
t1.frm
19907
 
t1.par
19908
 
 
19909
 
# check prerequisites-1 success:    1
19910
 
# check COUNT(*) success:    1
19911
 
# check MIN/MAX(f_int1) success:    1
19912
 
# check MIN/MAX(f_int2) success:    1
19913
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19914
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19915
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19916
 
WHERE f_int1 IN (2,3);
19917
 
ERROR 23000: Can't write; duplicate key in table 't1'
19918
 
# check prerequisites-3 success:    1
19919
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19920
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19921
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19922
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19923
 
WHERE f_int1 IN (2,3);
19924
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
19925
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19926
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19927
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19928
 
WHERE f_int1 IN (2,3);
19929
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
19930
 
# check read via f_int1 success: 1
19931
 
# check read via f_int2 success: 1
19932
 
        
19933
 
# check multiple-1 success:     1
19934
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
19935
 
        
19936
 
# check multiple-2 success:     1
19937
 
INSERT INTO t1 SELECT * FROM t0_template
19938
 
WHERE MOD(f_int1,3) = 0;
19939
 
        
19940
 
# check multiple-3 success:     1
19941
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
19942
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
19943
 
AND @max_row_div2 + @max_row_div4;
19944
 
        
19945
 
# check multiple-4 success:     1
19946
 
DELETE FROM t1
19947
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
19948
 
AND @max_row_div2 + @max_row_div4 + @max_row;
19949
 
        
19950
 
# check multiple-5 success:     1
19951
 
SELECT COUNT(*) INTO @try_count FROM t0_template
19952
 
WHERE MOD(f_int1,3) = 0
19953
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19954
 
SELECT COUNT(*) INTO @clash_count
19955
 
FROM t1 INNER JOIN t0_template USING(f_int1)
19956
 
WHERE MOD(f_int1,3) = 0
19957
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19958
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
19959
 
INSERT INTO t1
19960
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
19961
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19962
 
f_charbig = '#SINGLE#';
19963
 
        
19964
 
# check single-1 success:       1
19965
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
19966
 
INSERT INTO t1
19967
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
19968
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19969
 
f_charbig = '#SINGLE#';
19970
 
        
19971
 
# check single-2 success:       1
19972
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
19973
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
19974
 
UPDATE t1 SET f_int1 = @cur_value2
19975
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
19976
 
        
19977
 
# check single-3 success:       1
19978
 
SET @cur_value1= -1;
19979
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
19980
 
UPDATE t1 SET f_int1 = @cur_value1
19981
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
19982
 
        
19983
 
# check single-4 success:       1
19984
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
19985
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
19986
 
        
19987
 
# check single-5 success:       1
19988
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
19989
 
        
19990
 
# check single-6 success:       1
19991
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
19992
 
        
19993
 
# check single-7 success:       1
19994
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
19995
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
19996
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
19997
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
19998
 
f_charbig = '#NULL#';
19999
 
INSERT INTO t1
20000
 
SET f_int1 = NULL , f_int2 = -@max_row,
20001
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
20002
 
f_charbig = '#NULL#';
20003
 
ERROR 23000: Column 'f_int1' cannot be null
20004
 
# check null success:    1
20005
 
DELETE FROM t1
20006
 
WHERE f_int1 = 0 AND f_int2 = 0
20007
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
20008
 
AND f_charbig = '#NULL#';
20009
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20010
 
SELECT f_int1, f_int1, '', '', 'was inserted'
20011
 
   FROM t0_template source_tab
20012
 
WHERE MOD(f_int1,3) = 0
20013
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
20014
 
ON DUPLICATE KEY
20015
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
20016
 
f_int2 = 2 * @max_row + source_tab.f_int1,
20017
 
f_charbig = 'was updated';
20018
 
        
20019
 
# check unique-1-a success:     1
20020
 
        
20021
 
# check unique-1-b success:     1
20022
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
20023
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20024
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20025
 
f_charbig = CONCAT('===',f_char1,'===')
20026
 
WHERE f_charbig = 'was updated';
20027
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20028
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
20029
 
   FROM t0_template source_tab
20030
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20031
 
        
20032
 
# check replace success:        1
20033
 
DELETE FROM t1
20034
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
20035
 
DELETE FROM t1
20036
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
20037
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
20038
 
UPDATE t1 SET f_int2 = f_int1,
20039
 
f_char1 = CAST(f_int1 AS CHAR),
20040
 
f_char2 = CAST(f_int1 AS CHAR),
20041
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
20042
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
20043
 
SET AUTOCOMMIT= 0;
20044
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20045
 
SELECT f_int1, f_int1, '', '', 'was inserted'
20046
 
FROM t0_template source_tab
20047
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20048
 
        
20049
 
# check transactions-1 success:         1
20050
 
COMMIT WORK;
20051
 
        
20052
 
# check transactions-2 success:         1
20053
 
ROLLBACK WORK;
20054
 
        
20055
 
# check transactions-3 success:         1
20056
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
20057
 
COMMIT WORK;
20058
 
ROLLBACK WORK;
20059
 
        
20060
 
# check transactions-4 success:         1
20061
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20062
 
SELECT f_int1, f_int1, '', '', 'was inserted'
20063
 
FROM t0_template source_tab
20064
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20065
 
        
20066
 
# check transactions-5 success:         1
20067
 
ROLLBACK WORK;
20068
 
        
20069
 
# check transactions-6 success:         1
20070
 
# INFO: Storage engine used for t1 seems to be transactional.
20071
 
COMMIT;
20072
 
        
20073
 
# check transactions-7 success:         1
20074
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
20075
 
COMMIT WORK;
20076
 
SET @@session.sql_mode = 'traditional';
20077
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
20078
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20079
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
20080
 
'', '', 'was inserted' FROM t0_template
20081
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20082
 
ERROR 22012: Division by 0
20083
 
COMMIT;
20084
 
        
20085
 
# check transactions-8 success:         1
20086
 
# INFO: Storage engine used for t1 seems to be able to revert
20087
 
#       changes made by the failing statement.
20088
 
SET @@session.sql_mode = '';
20089
 
SET AUTOCOMMIT= 1;
20090
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
20091
 
COMMIT WORK;
20092
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
20093
 
        
20094
 
# check special-1 success:      1
20095
 
UPDATE t1 SET f_charbig = '';
20096
 
        
20097
 
# check special-2 success:      1
20098
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
20099
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20100
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
20101
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20102
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20103
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20104
 
'just inserted' FROM t0_template
20105
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20106
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
20107
 
BEGIN
20108
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20109
 
f_charbig = 'updated by trigger'
20110
 
      WHERE f_int1 = new.f_int1;
20111
 
END|
20112
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20113
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20114
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20115
 
        
20116
 
# check trigger-1 success:      1
20117
 
DROP TRIGGER trg_1;
20118
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20119
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20120
 
f_charbig = 'just inserted'
20121
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20122
 
DELETE FROM t0_aux
20123
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20124
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20125
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20126
 
'just inserted' FROM t0_template
20127
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20128
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
20129
 
BEGIN
20130
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20131
 
f_charbig = 'updated by trigger'
20132
 
      WHERE f_int1 = new.f_int1;
20133
 
END|
20134
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20135
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20136
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20137
 
        
20138
 
# check trigger-2 success:      1
20139
 
DROP TRIGGER trg_1;
20140
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20141
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20142
 
f_charbig = 'just inserted'
20143
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20144
 
DELETE FROM t0_aux
20145
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20146
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20147
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20148
 
'just inserted' FROM t0_template
20149
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20150
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20151
 
BEGIN
20152
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20153
 
f_charbig = 'updated by trigger'
20154
 
      WHERE f_int1 = new.f_int1;
20155
 
END|
20156
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20157
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20158
 
        
20159
 
# check trigger-3 success:      1
20160
 
DROP TRIGGER trg_1;
20161
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20162
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20163
 
f_charbig = 'just inserted'
20164
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20165
 
DELETE FROM t0_aux
20166
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20167
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20168
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20169
 
'just inserted' FROM t0_template
20170
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20171
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20172
 
BEGIN
20173
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20174
 
f_charbig = 'updated by trigger'
20175
 
      WHERE f_int1 = - old.f_int1;
20176
 
END|
20177
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20178
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20179
 
        
20180
 
# check trigger-4 success:      1
20181
 
DROP TRIGGER trg_1;
20182
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20183
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20184
 
f_charbig = 'just inserted'
20185
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20186
 
DELETE FROM t0_aux
20187
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20188
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20189
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20190
 
'just inserted' FROM t0_template
20191
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20192
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20193
 
BEGIN
20194
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20195
 
f_charbig = 'updated by trigger'
20196
 
      WHERE f_int1 = new.f_int1;
20197
 
END|
20198
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20199
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20200
 
        
20201
 
# check trigger-5 success:      1
20202
 
DROP TRIGGER trg_1;
20203
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20204
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20205
 
f_charbig = 'just inserted'
20206
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20207
 
DELETE FROM t0_aux
20208
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20209
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20210
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20211
 
'just inserted' FROM t0_template
20212
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20213
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20214
 
BEGIN
20215
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20216
 
f_charbig = 'updated by trigger'
20217
 
      WHERE f_int1 = - old.f_int1;
20218
 
END|
20219
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20220
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20221
 
        
20222
 
# check trigger-6 success:      1
20223
 
DROP TRIGGER trg_1;
20224
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20225
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20226
 
f_charbig = 'just inserted'
20227
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20228
 
DELETE FROM t0_aux
20229
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20230
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20231
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20232
 
'just inserted' FROM t0_template
20233
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20234
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
20235
 
BEGIN
20236
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20237
 
f_charbig = 'updated by trigger'
20238
 
      WHERE f_int1 = - old.f_int1;
20239
 
END|
20240
 
DELETE FROM t0_aux
20241
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20242
 
        
20243
 
# check trigger-7 success:      1
20244
 
DROP TRIGGER trg_1;
20245
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20246
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20247
 
f_charbig = 'just inserted'
20248
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20249
 
DELETE FROM t0_aux
20250
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20251
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20252
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20253
 
'just inserted' FROM t0_template
20254
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20255
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
20256
 
BEGIN
20257
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20258
 
f_charbig = 'updated by trigger'
20259
 
      WHERE f_int1 = - old.f_int1;
20260
 
END|
20261
 
DELETE FROM t0_aux
20262
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20263
 
        
20264
 
# check trigger-8 success:      1
20265
 
DROP TRIGGER trg_1;
20266
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20267
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20268
 
f_charbig = 'just inserted'
20269
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20270
 
DELETE FROM t0_aux
20271
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20272
 
DELETE FROM t1
20273
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20274
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20275
 
BEGIN
20276
 
SET new.f_int1 = old.f_int1 + @max_row,
20277
 
new.f_int2 = old.f_int2 - @max_row,
20278
 
new.f_charbig = '####updated per update trigger####';
20279
 
END|
20280
 
UPDATE t1
20281
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20282
 
f_charbig = '####updated per update statement itself####';
20283
 
        
20284
 
# check trigger-9 success:      1
20285
 
DROP TRIGGER trg_2;
20286
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20287
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20288
 
f_charbig = CONCAT('===',f_char1,'===');
20289
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20290
 
BEGIN
20291
 
SET new.f_int1 = new.f_int1 + @max_row,
20292
 
new.f_int2 = new.f_int2 - @max_row,
20293
 
new.f_charbig = '####updated per update trigger####';
20294
 
END|
20295
 
UPDATE t1
20296
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20297
 
f_charbig = '####updated per update statement itself####';
20298
 
        
20299
 
# check trigger-10 success:     1
20300
 
DROP TRIGGER trg_2;
20301
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20302
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20303
 
f_charbig = CONCAT('===',f_char1,'===');
20304
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20305
 
BEGIN
20306
 
SET new.f_int1 = @my_max1 + @counter,
20307
 
new.f_int2 = @my_min2 - @counter,
20308
 
new.f_charbig = '####updated per insert trigger####';
20309
 
SET @counter = @counter + 1;
20310
 
END|
20311
 
SET @counter = 1;
20312
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20313
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20314
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20315
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20316
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20317
 
ORDER BY f_int1;
20318
 
DROP TRIGGER trg_3;
20319
 
        
20320
 
# check trigger-11 success:     1
20321
 
DELETE FROM t1
20322
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20323
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20324
 
AND f_charbig = '####updated per insert trigger####';
20325
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20326
 
BEGIN
20327
 
SET new.f_int1 = @my_max1 + @counter,
20328
 
new.f_int2 = @my_min2 - @counter,
20329
 
new.f_charbig = '####updated per insert trigger####';
20330
 
SET @counter = @counter + 1;
20331
 
END|
20332
 
SET @counter = 1;
20333
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20334
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
20335
 
SELECT CAST(f_int1 AS CHAR),
20336
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20337
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20338
 
ORDER BY f_int1;
20339
 
DROP TRIGGER trg_3;
20340
 
        
20341
 
# check trigger-12 success:     1
20342
 
DELETE FROM t1
20343
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20344
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20345
 
AND f_charbig = '####updated per insert trigger####';
20346
 
ANALYZE  TABLE t1;
20347
 
Table   Op      Msg_type        Msg_text
20348
 
test.t1 analyze status  OK
20349
 
CHECK    TABLE t1 EXTENDED;
20350
 
Table   Op      Msg_type        Msg_text
20351
 
test.t1 check   status  OK
20352
 
CHECKSUM TABLE t1 EXTENDED;
20353
 
Table   Checksum
20354
 
test.t1 <some_value>
20355
 
OPTIMIZE TABLE t1;
20356
 
Table   Op      Msg_type        Msg_text
20357
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
20358
 
test.t1 optimize        status  OK
20359
 
# check layout success:    1
20360
 
REPAIR   TABLE t1 EXTENDED;
20361
 
Table   Op      Msg_type        Msg_text
20362
 
test.t1 repair  note    The storage engine for the table doesn't support repair
20363
 
# check layout success:    1
20364
 
TRUNCATE t1;
20365
 
        
20366
 
# check TRUNCATE success:       1
20367
 
# check layout success:    1
20368
 
# End usability test (inc/partition_check.inc)
20369
 
DROP TABLE t1;
20370
 
CREATE TABLE t1 (
20371
 
f_int1 INTEGER,
20372
 
f_int2 INTEGER,
20373
 
f_char1 CHAR(20),
20374
 
f_char2 CHAR(20),
20375
 
f_charbig VARCHAR(1000)
20376
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
20377
 
)
20378
 
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
20379
 
(PARTITION part_3 VALUES IN (-3),
20380
 
PARTITION part_2 VALUES IN (-2),
20381
 
PARTITION part_1 VALUES IN (-1),
20382
 
PARTITION part_N VALUES IN (NULL),
20383
 
PARTITION part0 VALUES IN (0),
20384
 
PARTITION part1 VALUES IN (1),
20385
 
PARTITION part2 VALUES IN (2),
20386
 
PARTITION part3 VALUES IN (3));
20387
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20388
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
20389
 
# Start usability test (inc/partition_check.inc)
20390
 
create_command
20391
 
SHOW CREATE TABLE t1;
20392
 
Table   Create Table
20393
 
t1      CREATE TABLE `t1` (
20394
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
20395
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
20396
 
  `f_char1` char(20) DEFAULT NULL,
20397
 
  `f_char2` char(20) DEFAULT NULL,
20398
 
  `f_charbig` varchar(1000) DEFAULT NULL,
20399
 
  PRIMARY KEY (`f_int2`,`f_int1`),
20400
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
20401
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
20402
 
 
20403
 
unified filelist
20404
 
t1.frm
20405
 
t1.par
20406
 
 
20407
 
# check prerequisites-1 success:    1
20408
 
# check COUNT(*) success:    1
20409
 
# check MIN/MAX(f_int1) success:    1
20410
 
# check MIN/MAX(f_int2) success:    1
20411
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20412
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20413
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
20414
 
WHERE f_int1 IN (2,3);
20415
 
ERROR 23000: Can't write; duplicate key in table 't1'
20416
 
# check prerequisites-3 success:    1
20417
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
20418
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20419
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
20420
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
20421
 
WHERE f_int1 IN (2,3);
20422
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
20423
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20424
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
20425
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
20426
 
WHERE f_int1 IN (2,3);
20427
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
20428
 
# check read via f_int1 success: 1
20429
 
# check read via f_int2 success: 1
20430
 
        
20431
 
# check multiple-1 success:     1
20432
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
20433
 
        
20434
 
# check multiple-2 success:     1
20435
 
INSERT INTO t1 SELECT * FROM t0_template
20436
 
WHERE MOD(f_int1,3) = 0;
20437
 
        
20438
 
# check multiple-3 success:     1
20439
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
20440
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
20441
 
AND @max_row_div2 + @max_row_div4;
20442
 
        
20443
 
# check multiple-4 success:     1
20444
 
DELETE FROM t1
20445
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
20446
 
AND @max_row_div2 + @max_row_div4 + @max_row;
20447
 
        
20448
 
# check multiple-5 success:     1
20449
 
SELECT COUNT(*) INTO @try_count FROM t0_template
20450
 
WHERE MOD(f_int1,3) = 0
20451
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20452
 
SELECT COUNT(*) INTO @clash_count
20453
 
FROM t1 INNER JOIN t0_template USING(f_int1)
20454
 
WHERE MOD(f_int1,3) = 0
20455
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20456
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
20457
 
INSERT INTO t1
20458
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
20459
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20460
 
f_charbig = '#SINGLE#';
20461
 
        
20462
 
# check single-1 success:       1
20463
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
20464
 
INSERT INTO t1
20465
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
20466
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20467
 
f_charbig = '#SINGLE#';
20468
 
        
20469
 
# check single-2 success:       1
20470
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
20471
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
20472
 
UPDATE t1 SET f_int1 = @cur_value2
20473
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
20474
 
        
20475
 
# check single-3 success:       1
20476
 
SET @cur_value1= -1;
20477
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
20478
 
UPDATE t1 SET f_int1 = @cur_value1
20479
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
20480
 
        
20481
 
# check single-4 success:       1
20482
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
20483
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
20484
 
        
20485
 
# check single-5 success:       1
20486
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
20487
 
        
20488
 
# check single-6 success:       1
20489
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
20490
 
        
20491
 
# check single-7 success:       1
20492
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
20493
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
20494
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
20495
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
20496
 
f_charbig = '#NULL#';
20497
 
INSERT INTO t1
20498
 
SET f_int1 = NULL , f_int2 = -@max_row,
20499
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
20500
 
f_charbig = '#NULL#';
20501
 
ERROR 23000: Column 'f_int1' cannot be null
20502
 
# check null success:    1
20503
 
DELETE FROM t1
20504
 
WHERE f_int1 = 0 AND f_int2 = 0
20505
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
20506
 
AND f_charbig = '#NULL#';
20507
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20508
 
SELECT f_int1, f_int1, '', '', 'was inserted'
20509
 
   FROM t0_template source_tab
20510
 
WHERE MOD(f_int1,3) = 0
20511
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
20512
 
ON DUPLICATE KEY
20513
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
20514
 
f_int2 = 2 * @max_row + source_tab.f_int1,
20515
 
f_charbig = 'was updated';
20516
 
        
20517
 
# check unique-1-a success:     1
20518
 
        
20519
 
# check unique-1-b success:     1
20520
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
20521
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20522
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20523
 
f_charbig = CONCAT('===',f_char1,'===')
20524
 
WHERE f_charbig = 'was updated';
20525
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20526
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
20527
 
   FROM t0_template source_tab
20528
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20529
 
        
20530
 
# check replace success:        1
20531
 
DELETE FROM t1
20532
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
20533
 
DELETE FROM t1
20534
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
20535
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
20536
 
UPDATE t1 SET f_int2 = f_int1,
20537
 
f_char1 = CAST(f_int1 AS CHAR),
20538
 
f_char2 = CAST(f_int1 AS CHAR),
20539
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
20540
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
20541
 
SET AUTOCOMMIT= 0;
20542
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20543
 
SELECT f_int1, f_int1, '', '', 'was inserted'
20544
 
FROM t0_template source_tab
20545
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20546
 
        
20547
 
# check transactions-1 success:         1
20548
 
COMMIT WORK;
20549
 
        
20550
 
# check transactions-2 success:         1
20551
 
ROLLBACK WORK;
20552
 
        
20553
 
# check transactions-3 success:         1
20554
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
20555
 
COMMIT WORK;
20556
 
ROLLBACK WORK;
20557
 
        
20558
 
# check transactions-4 success:         1
20559
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20560
 
SELECT f_int1, f_int1, '', '', 'was inserted'
20561
 
FROM t0_template source_tab
20562
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20563
 
        
20564
 
# check transactions-5 success:         1
20565
 
ROLLBACK WORK;
20566
 
        
20567
 
# check transactions-6 success:         1
20568
 
# INFO: Storage engine used for t1 seems to be transactional.
20569
 
COMMIT;
20570
 
        
20571
 
# check transactions-7 success:         1
20572
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
20573
 
COMMIT WORK;
20574
 
SET @@session.sql_mode = 'traditional';
20575
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
20576
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20577
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
20578
 
'', '', 'was inserted' FROM t0_template
20579
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20580
 
ERROR 22012: Division by 0
20581
 
COMMIT;
20582
 
        
20583
 
# check transactions-8 success:         1
20584
 
# INFO: Storage engine used for t1 seems to be able to revert
20585
 
#       changes made by the failing statement.
20586
 
SET @@session.sql_mode = '';
20587
 
SET AUTOCOMMIT= 1;
20588
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
20589
 
COMMIT WORK;
20590
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
20591
 
        
20592
 
# check special-1 success:      1
20593
 
UPDATE t1 SET f_charbig = '';
20594
 
        
20595
 
# check special-2 success:      1
20596
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
20597
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20598
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
20599
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20600
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20601
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20602
 
'just inserted' FROM t0_template
20603
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20604
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
20605
 
BEGIN
20606
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20607
 
f_charbig = 'updated by trigger'
20608
 
      WHERE f_int1 = new.f_int1;
20609
 
END|
20610
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20611
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20612
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20613
 
        
20614
 
# check trigger-1 success:      1
20615
 
DROP TRIGGER trg_1;
20616
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20617
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20618
 
f_charbig = 'just inserted'
20619
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20620
 
DELETE FROM t0_aux
20621
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20622
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20623
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20624
 
'just inserted' FROM t0_template
20625
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20626
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
20627
 
BEGIN
20628
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20629
 
f_charbig = 'updated by trigger'
20630
 
      WHERE f_int1 = new.f_int1;
20631
 
END|
20632
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20633
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20634
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20635
 
        
20636
 
# check trigger-2 success:      1
20637
 
DROP TRIGGER trg_1;
20638
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20639
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20640
 
f_charbig = 'just inserted'
20641
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20642
 
DELETE FROM t0_aux
20643
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20644
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20645
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20646
 
'just inserted' FROM t0_template
20647
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20648
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20649
 
BEGIN
20650
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20651
 
f_charbig = 'updated by trigger'
20652
 
      WHERE f_int1 = new.f_int1;
20653
 
END|
20654
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20655
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20656
 
        
20657
 
# check trigger-3 success:      1
20658
 
DROP TRIGGER trg_1;
20659
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20660
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20661
 
f_charbig = 'just inserted'
20662
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20663
 
DELETE FROM t0_aux
20664
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20665
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20666
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20667
 
'just inserted' FROM t0_template
20668
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20669
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20670
 
BEGIN
20671
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20672
 
f_charbig = 'updated by trigger'
20673
 
      WHERE f_int1 = - old.f_int1;
20674
 
END|
20675
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20676
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20677
 
        
20678
 
# check trigger-4 success:      1
20679
 
DROP TRIGGER trg_1;
20680
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20681
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20682
 
f_charbig = 'just inserted'
20683
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20684
 
DELETE FROM t0_aux
20685
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20686
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20687
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20688
 
'just inserted' FROM t0_template
20689
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20690
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20691
 
BEGIN
20692
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20693
 
f_charbig = 'updated by trigger'
20694
 
      WHERE f_int1 = new.f_int1;
20695
 
END|
20696
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20697
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20698
 
        
20699
 
# check trigger-5 success:      1
20700
 
DROP TRIGGER trg_1;
20701
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20702
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20703
 
f_charbig = 'just inserted'
20704
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20705
 
DELETE FROM t0_aux
20706
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20707
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20708
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20709
 
'just inserted' FROM t0_template
20710
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20711
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20712
 
BEGIN
20713
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20714
 
f_charbig = 'updated by trigger'
20715
 
      WHERE f_int1 = - old.f_int1;
20716
 
END|
20717
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20718
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20719
 
        
20720
 
# check trigger-6 success:      1
20721
 
DROP TRIGGER trg_1;
20722
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20723
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20724
 
f_charbig = 'just inserted'
20725
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20726
 
DELETE FROM t0_aux
20727
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20728
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20729
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20730
 
'just inserted' FROM t0_template
20731
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20732
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
20733
 
BEGIN
20734
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20735
 
f_charbig = 'updated by trigger'
20736
 
      WHERE f_int1 = - old.f_int1;
20737
 
END|
20738
 
DELETE FROM t0_aux
20739
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20740
 
        
20741
 
# check trigger-7 success:      1
20742
 
DROP TRIGGER trg_1;
20743
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20744
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20745
 
f_charbig = 'just inserted'
20746
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20747
 
DELETE FROM t0_aux
20748
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20749
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20750
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20751
 
'just inserted' FROM t0_template
20752
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20753
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
20754
 
BEGIN
20755
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20756
 
f_charbig = 'updated by trigger'
20757
 
      WHERE f_int1 = - old.f_int1;
20758
 
END|
20759
 
DELETE FROM t0_aux
20760
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20761
 
        
20762
 
# check trigger-8 success:      1
20763
 
DROP TRIGGER trg_1;
20764
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20765
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20766
 
f_charbig = 'just inserted'
20767
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20768
 
DELETE FROM t0_aux
20769
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20770
 
DELETE FROM t1
20771
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20772
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20773
 
BEGIN
20774
 
SET new.f_int1 = old.f_int1 + @max_row,
20775
 
new.f_int2 = old.f_int2 - @max_row,
20776
 
new.f_charbig = '####updated per update trigger####';
20777
 
END|
20778
 
UPDATE t1
20779
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20780
 
f_charbig = '####updated per update statement itself####';
20781
 
        
20782
 
# check trigger-9 success:      1
20783
 
DROP TRIGGER trg_2;
20784
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20785
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20786
 
f_charbig = CONCAT('===',f_char1,'===');
20787
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20788
 
BEGIN
20789
 
SET new.f_int1 = new.f_int1 + @max_row,
20790
 
new.f_int2 = new.f_int2 - @max_row,
20791
 
new.f_charbig = '####updated per update trigger####';
20792
 
END|
20793
 
UPDATE t1
20794
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20795
 
f_charbig = '####updated per update statement itself####';
20796
 
        
20797
 
# check trigger-10 success:     1
20798
 
DROP TRIGGER trg_2;
20799
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20800
 
f_int2 = CAST(f_char1 AS SIGNED INT),
20801
 
f_charbig = CONCAT('===',f_char1,'===');
20802
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20803
 
BEGIN
20804
 
SET new.f_int1 = @my_max1 + @counter,
20805
 
new.f_int2 = @my_min2 - @counter,
20806
 
new.f_charbig = '####updated per insert trigger####';
20807
 
SET @counter = @counter + 1;
20808
 
END|
20809
 
SET @counter = 1;
20810
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20811
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20812
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20813
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20814
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20815
 
ORDER BY f_int1;
20816
 
DROP TRIGGER trg_3;
20817
 
        
20818
 
# check trigger-11 success:     1
20819
 
DELETE FROM t1
20820
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20821
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20822
 
AND f_charbig = '####updated per insert trigger####';
20823
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20824
 
BEGIN
20825
 
SET new.f_int1 = @my_max1 + @counter,
20826
 
new.f_int2 = @my_min2 - @counter,
20827
 
new.f_charbig = '####updated per insert trigger####';
20828
 
SET @counter = @counter + 1;
20829
 
END|
20830
 
SET @counter = 1;
20831
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20832
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
20833
 
SELECT CAST(f_int1 AS CHAR),
20834
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20835
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20836
 
ORDER BY f_int1;
20837
 
DROP TRIGGER trg_3;
20838
 
        
20839
 
# check trigger-12 success:     1
20840
 
DELETE FROM t1
20841
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20842
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20843
 
AND f_charbig = '####updated per insert trigger####';
20844
 
ANALYZE  TABLE t1;
20845
 
Table   Op      Msg_type        Msg_text
20846
 
test.t1 analyze status  OK
20847
 
CHECK    TABLE t1 EXTENDED;
20848
 
Table   Op      Msg_type        Msg_text
20849
 
test.t1 check   status  OK
20850
 
CHECKSUM TABLE t1 EXTENDED;
20851
 
Table   Checksum
20852
 
test.t1 <some_value>
20853
 
OPTIMIZE TABLE t1;
20854
 
Table   Op      Msg_type        Msg_text
20855
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
20856
 
test.t1 optimize        status  OK
20857
 
# check layout success:    1
20858
 
REPAIR   TABLE t1 EXTENDED;
20859
 
Table   Op      Msg_type        Msg_text
20860
 
test.t1 repair  note    The storage engine for the table doesn't support repair
20861
 
# check layout success:    1
20862
 
TRUNCATE t1;
20863
 
        
20864
 
# check TRUNCATE success:       1
20865
 
# check layout success:    1
20866
 
# End usability test (inc/partition_check.inc)
20867
 
DROP TABLE t1;
20868
 
CREATE TABLE t1 (
20869
 
f_int1 INTEGER,
20870
 
f_int2 INTEGER,
20871
 
f_char1 CHAR(20),
20872
 
f_char2 CHAR(20),
20873
 
f_charbig VARCHAR(1000)
20874
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
20875
 
)
20876
 
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
20877
 
(PARTITION parta VALUES LESS THAN (0),
20878
 
PARTITION partb VALUES LESS THAN (5),
20879
 
PARTITION partc VALUES LESS THAN (10),
20880
 
PARTITION partd VALUES LESS THAN (10 + 5),
20881
 
PARTITION parte VALUES LESS THAN (20),
20882
 
PARTITION partf VALUES LESS THAN (2147483646));
20883
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20884
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
20885
 
# Start usability test (inc/partition_check.inc)
20886
 
create_command
20887
 
SHOW CREATE TABLE t1;
20888
 
Table   Create Table
20889
 
t1      CREATE TABLE `t1` (
20890
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
20891
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
20892
 
  `f_char1` char(20) DEFAULT NULL,
20893
 
  `f_char2` char(20) DEFAULT NULL,
20894
 
  `f_charbig` varchar(1000) DEFAULT NULL,
20895
 
  PRIMARY KEY (`f_int2`,`f_int1`),
20896
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
20897
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
20898
 
 
20899
 
unified filelist
20900
 
t1.frm
20901
 
t1.par
20902
 
 
20903
 
# check prerequisites-1 success:    1
20904
 
# check COUNT(*) success:    1
20905
 
# check MIN/MAX(f_int1) success:    1
20906
 
# check MIN/MAX(f_int2) success:    1
20907
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20908
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20909
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
20910
 
WHERE f_int1 IN (2,3);
20911
 
ERROR 23000: Can't write; duplicate key in table 't1'
20912
 
# check prerequisites-3 success:    1
20913
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
20914
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20915
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
20916
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
20917
 
WHERE f_int1 IN (2,3);
20918
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
20919
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20920
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
20921
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
20922
 
WHERE f_int1 IN (2,3);
20923
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
20924
 
# check read via f_int1 success: 1
20925
 
# check read via f_int2 success: 1
20926
 
        
20927
 
# check multiple-1 success:     1
20928
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
20929
 
        
20930
 
# check multiple-2 success:     1
20931
 
INSERT INTO t1 SELECT * FROM t0_template
20932
 
WHERE MOD(f_int1,3) = 0;
20933
 
        
20934
 
# check multiple-3 success:     1
20935
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
20936
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
20937
 
AND @max_row_div2 + @max_row_div4;
20938
 
        
20939
 
# check multiple-4 success:     1
20940
 
DELETE FROM t1
20941
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
20942
 
AND @max_row_div2 + @max_row_div4 + @max_row;
20943
 
        
20944
 
# check multiple-5 success:     1
20945
 
SELECT COUNT(*) INTO @try_count FROM t0_template
20946
 
WHERE MOD(f_int1,3) = 0
20947
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20948
 
SELECT COUNT(*) INTO @clash_count
20949
 
FROM t1 INNER JOIN t0_template USING(f_int1)
20950
 
WHERE MOD(f_int1,3) = 0
20951
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20952
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
20953
 
INSERT INTO t1
20954
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
20955
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20956
 
f_charbig = '#SINGLE#';
20957
 
        
20958
 
# check single-1 success:       1
20959
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
20960
 
INSERT INTO t1
20961
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
20962
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20963
 
f_charbig = '#SINGLE#';
20964
 
        
20965
 
# check single-2 success:       1
20966
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
20967
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
20968
 
UPDATE t1 SET f_int1 = @cur_value2
20969
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
20970
 
        
20971
 
# check single-3 success:       1
20972
 
SET @cur_value1= -1;
20973
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
20974
 
UPDATE t1 SET f_int1 = @cur_value1
20975
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
20976
 
        
20977
 
# check single-4 success:       1
20978
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
20979
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
20980
 
        
20981
 
# check single-5 success:       1
20982
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
20983
 
        
20984
 
# check single-6 success:       1
20985
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
20986
 
ERROR HY000: Table has no partition for value 2147483647
20987
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
20988
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
20989
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
20990
 
f_charbig = '#NULL#';
20991
 
INSERT INTO t1
20992
 
SET f_int1 = NULL , f_int2 = -@max_row,
20993
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
20994
 
f_charbig = '#NULL#';
20995
 
ERROR 23000: Column 'f_int1' cannot be null
20996
 
# check null success:    1
20997
 
DELETE FROM t1
20998
 
WHERE f_int1 = 0 AND f_int2 = 0
20999
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
21000
 
AND f_charbig = '#NULL#';
21001
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21002
 
SELECT f_int1, f_int1, '', '', 'was inserted'
21003
 
   FROM t0_template source_tab
21004
 
WHERE MOD(f_int1,3) = 0
21005
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
21006
 
ON DUPLICATE KEY
21007
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
21008
 
f_int2 = 2 * @max_row + source_tab.f_int1,
21009
 
f_charbig = 'was updated';
21010
 
        
21011
 
# check unique-1-a success:     1
21012
 
        
21013
 
# check unique-1-b success:     1
21014
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
21015
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21016
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21017
 
f_charbig = CONCAT('===',f_char1,'===')
21018
 
WHERE f_charbig = 'was updated';
21019
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21020
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
21021
 
   FROM t0_template source_tab
21022
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21023
 
        
21024
 
# check replace success:        1
21025
 
DELETE FROM t1
21026
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
21027
 
DELETE FROM t1
21028
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
21029
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
21030
 
UPDATE t1 SET f_int2 = f_int1,
21031
 
f_char1 = CAST(f_int1 AS CHAR),
21032
 
f_char2 = CAST(f_int1 AS CHAR),
21033
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
21034
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
21035
 
SET AUTOCOMMIT= 0;
21036
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21037
 
SELECT f_int1, f_int1, '', '', 'was inserted'
21038
 
FROM t0_template source_tab
21039
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21040
 
        
21041
 
# check transactions-1 success:         1
21042
 
COMMIT WORK;
21043
 
        
21044
 
# check transactions-2 success:         1
21045
 
ROLLBACK WORK;
21046
 
        
21047
 
# check transactions-3 success:         1
21048
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
21049
 
COMMIT WORK;
21050
 
ROLLBACK WORK;
21051
 
        
21052
 
# check transactions-4 success:         1
21053
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21054
 
SELECT f_int1, f_int1, '', '', 'was inserted'
21055
 
FROM t0_template source_tab
21056
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21057
 
        
21058
 
# check transactions-5 success:         1
21059
 
ROLLBACK WORK;
21060
 
        
21061
 
# check transactions-6 success:         1
21062
 
# INFO: Storage engine used for t1 seems to be transactional.
21063
 
COMMIT;
21064
 
        
21065
 
# check transactions-7 success:         1
21066
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
21067
 
COMMIT WORK;
21068
 
SET @@session.sql_mode = 'traditional';
21069
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
21070
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21071
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
21072
 
'', '', 'was inserted' FROM t0_template
21073
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21074
 
ERROR 22012: Division by 0
21075
 
COMMIT;
21076
 
        
21077
 
# check transactions-8 success:         1
21078
 
# INFO: Storage engine used for t1 seems to be able to revert
21079
 
#       changes made by the failing statement.
21080
 
SET @@session.sql_mode = '';
21081
 
SET AUTOCOMMIT= 1;
21082
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
21083
 
COMMIT WORK;
21084
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
21085
 
        
21086
 
# check special-1 success:      1
21087
 
UPDATE t1 SET f_charbig = '';
21088
 
        
21089
 
# check special-2 success:      1
21090
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
21091
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21092
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
21093
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21094
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21095
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21096
 
'just inserted' FROM t0_template
21097
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21098
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
21099
 
BEGIN
21100
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21101
 
f_charbig = 'updated by trigger'
21102
 
      WHERE f_int1 = new.f_int1;
21103
 
END|
21104
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21105
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21106
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21107
 
        
21108
 
# check trigger-1 success:      1
21109
 
DROP TRIGGER trg_1;
21110
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21111
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21112
 
f_charbig = 'just inserted'
21113
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21114
 
DELETE FROM t0_aux
21115
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21116
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21117
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21118
 
'just inserted' FROM t0_template
21119
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21120
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
21121
 
BEGIN
21122
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21123
 
f_charbig = 'updated by trigger'
21124
 
      WHERE f_int1 = new.f_int1;
21125
 
END|
21126
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21127
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21128
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21129
 
        
21130
 
# check trigger-2 success:      1
21131
 
DROP TRIGGER trg_1;
21132
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21133
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21134
 
f_charbig = 'just inserted'
21135
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21136
 
DELETE FROM t0_aux
21137
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21138
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21139
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21140
 
'just inserted' FROM t0_template
21141
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21142
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21143
 
BEGIN
21144
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21145
 
f_charbig = 'updated by trigger'
21146
 
      WHERE f_int1 = new.f_int1;
21147
 
END|
21148
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21149
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21150
 
        
21151
 
# check trigger-3 success:      1
21152
 
DROP TRIGGER trg_1;
21153
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21154
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21155
 
f_charbig = 'just inserted'
21156
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21157
 
DELETE FROM t0_aux
21158
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21159
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21160
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21161
 
'just inserted' FROM t0_template
21162
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21163
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21164
 
BEGIN
21165
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21166
 
f_charbig = 'updated by trigger'
21167
 
      WHERE f_int1 = - old.f_int1;
21168
 
END|
21169
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21170
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21171
 
        
21172
 
# check trigger-4 success:      1
21173
 
DROP TRIGGER trg_1;
21174
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21175
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21176
 
f_charbig = 'just inserted'
21177
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21178
 
DELETE FROM t0_aux
21179
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21180
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21181
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21182
 
'just inserted' FROM t0_template
21183
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21184
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21185
 
BEGIN
21186
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21187
 
f_charbig = 'updated by trigger'
21188
 
      WHERE f_int1 = new.f_int1;
21189
 
END|
21190
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21191
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21192
 
        
21193
 
# check trigger-5 success:      1
21194
 
DROP TRIGGER trg_1;
21195
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21196
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21197
 
f_charbig = 'just inserted'
21198
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21199
 
DELETE FROM t0_aux
21200
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21201
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21202
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21203
 
'just inserted' FROM t0_template
21204
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21205
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21206
 
BEGIN
21207
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21208
 
f_charbig = 'updated by trigger'
21209
 
      WHERE f_int1 = - old.f_int1;
21210
 
END|
21211
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21212
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21213
 
        
21214
 
# check trigger-6 success:      1
21215
 
DROP TRIGGER trg_1;
21216
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21217
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21218
 
f_charbig = 'just inserted'
21219
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21220
 
DELETE FROM t0_aux
21221
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21222
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21223
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21224
 
'just inserted' FROM t0_template
21225
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21226
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
21227
 
BEGIN
21228
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21229
 
f_charbig = 'updated by trigger'
21230
 
      WHERE f_int1 = - old.f_int1;
21231
 
END|
21232
 
DELETE FROM t0_aux
21233
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21234
 
        
21235
 
# check trigger-7 success:      1
21236
 
DROP TRIGGER trg_1;
21237
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21238
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21239
 
f_charbig = 'just inserted'
21240
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21241
 
DELETE FROM t0_aux
21242
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21243
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21244
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21245
 
'just inserted' FROM t0_template
21246
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21247
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
21248
 
BEGIN
21249
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21250
 
f_charbig = 'updated by trigger'
21251
 
      WHERE f_int1 = - old.f_int1;
21252
 
END|
21253
 
DELETE FROM t0_aux
21254
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21255
 
        
21256
 
# check trigger-8 success:      1
21257
 
DROP TRIGGER trg_1;
21258
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21259
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21260
 
f_charbig = 'just inserted'
21261
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21262
 
DELETE FROM t0_aux
21263
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21264
 
DELETE FROM t1
21265
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21266
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21267
 
BEGIN
21268
 
SET new.f_int1 = old.f_int1 + @max_row,
21269
 
new.f_int2 = old.f_int2 - @max_row,
21270
 
new.f_charbig = '####updated per update trigger####';
21271
 
END|
21272
 
UPDATE t1
21273
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21274
 
f_charbig = '####updated per update statement itself####';
21275
 
        
21276
 
# check trigger-9 success:      1
21277
 
DROP TRIGGER trg_2;
21278
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21279
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21280
 
f_charbig = CONCAT('===',f_char1,'===');
21281
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21282
 
BEGIN
21283
 
SET new.f_int1 = new.f_int1 + @max_row,
21284
 
new.f_int2 = new.f_int2 - @max_row,
21285
 
new.f_charbig = '####updated per update trigger####';
21286
 
END|
21287
 
UPDATE t1
21288
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21289
 
f_charbig = '####updated per update statement itself####';
21290
 
        
21291
 
# check trigger-10 success:     1
21292
 
DROP TRIGGER trg_2;
21293
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21294
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21295
 
f_charbig = CONCAT('===',f_char1,'===');
21296
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21297
 
BEGIN
21298
 
SET new.f_int1 = @my_max1 + @counter,
21299
 
new.f_int2 = @my_min2 - @counter,
21300
 
new.f_charbig = '####updated per insert trigger####';
21301
 
SET @counter = @counter + 1;
21302
 
END|
21303
 
SET @counter = 1;
21304
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21305
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21306
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21307
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21308
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21309
 
ORDER BY f_int1;
21310
 
DROP TRIGGER trg_3;
21311
 
        
21312
 
# check trigger-11 success:     1
21313
 
DELETE FROM t1
21314
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21315
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21316
 
AND f_charbig = '####updated per insert trigger####';
21317
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21318
 
BEGIN
21319
 
SET new.f_int1 = @my_max1 + @counter,
21320
 
new.f_int2 = @my_min2 - @counter,
21321
 
new.f_charbig = '####updated per insert trigger####';
21322
 
SET @counter = @counter + 1;
21323
 
END|
21324
 
SET @counter = 1;
21325
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21326
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
21327
 
SELECT CAST(f_int1 AS CHAR),
21328
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21329
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21330
 
ORDER BY f_int1;
21331
 
DROP TRIGGER trg_3;
21332
 
        
21333
 
# check trigger-12 success:     1
21334
 
DELETE FROM t1
21335
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21336
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21337
 
AND f_charbig = '####updated per insert trigger####';
21338
 
ANALYZE  TABLE t1;
21339
 
Table   Op      Msg_type        Msg_text
21340
 
test.t1 analyze status  OK
21341
 
CHECK    TABLE t1 EXTENDED;
21342
 
Table   Op      Msg_type        Msg_text
21343
 
test.t1 check   status  OK
21344
 
CHECKSUM TABLE t1 EXTENDED;
21345
 
Table   Checksum
21346
 
test.t1 <some_value>
21347
 
OPTIMIZE TABLE t1;
21348
 
Table   Op      Msg_type        Msg_text
21349
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
21350
 
test.t1 optimize        status  OK
21351
 
# check layout success:    1
21352
 
REPAIR   TABLE t1 EXTENDED;
21353
 
Table   Op      Msg_type        Msg_text
21354
 
test.t1 repair  note    The storage engine for the table doesn't support repair
21355
 
# check layout success:    1
21356
 
TRUNCATE t1;
21357
 
        
21358
 
# check TRUNCATE success:       1
21359
 
# check layout success:    1
21360
 
# End usability test (inc/partition_check.inc)
21361
 
DROP TABLE t1;
21362
 
CREATE TABLE t1 (
21363
 
f_int1 INTEGER,
21364
 
f_int2 INTEGER,
21365
 
f_char1 CHAR(20),
21366
 
f_char2 CHAR(20),
21367
 
f_charbig VARCHAR(1000)
21368
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
21369
 
)
21370
 
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
21371
 
(PARTITION parta VALUES LESS THAN (0),
21372
 
PARTITION partb VALUES LESS THAN (5),
21373
 
PARTITION partc VALUES LESS THAN (10),
21374
 
PARTITION partd VALUES LESS THAN (2147483646));
21375
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21376
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
21377
 
# Start usability test (inc/partition_check.inc)
21378
 
create_command
21379
 
SHOW CREATE TABLE t1;
21380
 
Table   Create Table
21381
 
t1      CREATE TABLE `t1` (
21382
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
21383
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
21384
 
  `f_char1` char(20) DEFAULT NULL,
21385
 
  `f_char2` char(20) DEFAULT NULL,
21386
 
  `f_charbig` varchar(1000) DEFAULT NULL,
21387
 
  PRIMARY KEY (`f_int2`,`f_int1`),
21388
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
21389
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
21390
 
 
21391
 
unified filelist
21392
 
t1.frm
21393
 
t1.par
21394
 
 
21395
 
# check prerequisites-1 success:    1
21396
 
# check COUNT(*) success:    1
21397
 
# check MIN/MAX(f_int1) success:    1
21398
 
# check MIN/MAX(f_int2) success:    1
21399
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21400
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21401
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
21402
 
WHERE f_int1 IN (2,3);
21403
 
ERROR 23000: Can't write; duplicate key in table 't1'
21404
 
# check prerequisites-3 success:    1
21405
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
21406
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21407
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
21408
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
21409
 
WHERE f_int1 IN (2,3);
21410
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
21411
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21412
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
21413
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
21414
 
WHERE f_int1 IN (2,3);
21415
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
21416
 
# check read via f_int1 success: 1
21417
 
# check read via f_int2 success: 1
21418
 
        
21419
 
# check multiple-1 success:     1
21420
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
21421
 
        
21422
 
# check multiple-2 success:     1
21423
 
INSERT INTO t1 SELECT * FROM t0_template
21424
 
WHERE MOD(f_int1,3) = 0;
21425
 
        
21426
 
# check multiple-3 success:     1
21427
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
21428
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
21429
 
AND @max_row_div2 + @max_row_div4;
21430
 
        
21431
 
# check multiple-4 success:     1
21432
 
DELETE FROM t1
21433
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
21434
 
AND @max_row_div2 + @max_row_div4 + @max_row;
21435
 
        
21436
 
# check multiple-5 success:     1
21437
 
SELECT COUNT(*) INTO @try_count FROM t0_template
21438
 
WHERE MOD(f_int1,3) = 0
21439
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21440
 
SELECT COUNT(*) INTO @clash_count
21441
 
FROM t1 INNER JOIN t0_template USING(f_int1)
21442
 
WHERE MOD(f_int1,3) = 0
21443
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21444
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
21445
 
INSERT INTO t1
21446
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
21447
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21448
 
f_charbig = '#SINGLE#';
21449
 
        
21450
 
# check single-1 success:       1
21451
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
21452
 
INSERT INTO t1
21453
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
21454
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21455
 
f_charbig = '#SINGLE#';
21456
 
        
21457
 
# check single-2 success:       1
21458
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
21459
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
21460
 
UPDATE t1 SET f_int1 = @cur_value2
21461
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
21462
 
        
21463
 
# check single-3 success:       1
21464
 
SET @cur_value1= -1;
21465
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
21466
 
UPDATE t1 SET f_int1 = @cur_value1
21467
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
21468
 
        
21469
 
# check single-4 success:       1
21470
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
21471
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
21472
 
        
21473
 
# check single-5 success:       1
21474
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
21475
 
        
21476
 
# check single-6 success:       1
21477
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
21478
 
ERROR HY000: Table has no partition for value 2147483647
21479
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
21480
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
21481
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
21482
 
f_charbig = '#NULL#';
21483
 
INSERT INTO t1
21484
 
SET f_int1 = NULL , f_int2 = -@max_row,
21485
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
21486
 
f_charbig = '#NULL#';
21487
 
ERROR 23000: Column 'f_int1' cannot be null
21488
 
# check null success:    1
21489
 
DELETE FROM t1
21490
 
WHERE f_int1 = 0 AND f_int2 = 0
21491
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
21492
 
AND f_charbig = '#NULL#';
21493
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21494
 
SELECT f_int1, f_int1, '', '', 'was inserted'
21495
 
   FROM t0_template source_tab
21496
 
WHERE MOD(f_int1,3) = 0
21497
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
21498
 
ON DUPLICATE KEY
21499
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
21500
 
f_int2 = 2 * @max_row + source_tab.f_int1,
21501
 
f_charbig = 'was updated';
21502
 
        
21503
 
# check unique-1-a success:     1
21504
 
        
21505
 
# check unique-1-b success:     1
21506
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
21507
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21508
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21509
 
f_charbig = CONCAT('===',f_char1,'===')
21510
 
WHERE f_charbig = 'was updated';
21511
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21512
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
21513
 
   FROM t0_template source_tab
21514
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21515
 
        
21516
 
# check replace success:        1
21517
 
DELETE FROM t1
21518
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
21519
 
DELETE FROM t1
21520
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
21521
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
21522
 
UPDATE t1 SET f_int2 = f_int1,
21523
 
f_char1 = CAST(f_int1 AS CHAR),
21524
 
f_char2 = CAST(f_int1 AS CHAR),
21525
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
21526
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
21527
 
SET AUTOCOMMIT= 0;
21528
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21529
 
SELECT f_int1, f_int1, '', '', 'was inserted'
21530
 
FROM t0_template source_tab
21531
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21532
 
        
21533
 
# check transactions-1 success:         1
21534
 
COMMIT WORK;
21535
 
        
21536
 
# check transactions-2 success:         1
21537
 
ROLLBACK WORK;
21538
 
        
21539
 
# check transactions-3 success:         1
21540
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
21541
 
COMMIT WORK;
21542
 
ROLLBACK WORK;
21543
 
        
21544
 
# check transactions-4 success:         1
21545
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21546
 
SELECT f_int1, f_int1, '', '', 'was inserted'
21547
 
FROM t0_template source_tab
21548
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21549
 
        
21550
 
# check transactions-5 success:         1
21551
 
ROLLBACK WORK;
21552
 
        
21553
 
# check transactions-6 success:         1
21554
 
# INFO: Storage engine used for t1 seems to be transactional.
21555
 
COMMIT;
21556
 
        
21557
 
# check transactions-7 success:         1
21558
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
21559
 
COMMIT WORK;
21560
 
SET @@session.sql_mode = 'traditional';
21561
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
21562
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21563
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
21564
 
'', '', 'was inserted' FROM t0_template
21565
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21566
 
ERROR 22012: Division by 0
21567
 
COMMIT;
21568
 
        
21569
 
# check transactions-8 success:         1
21570
 
# INFO: Storage engine used for t1 seems to be able to revert
21571
 
#       changes made by the failing statement.
21572
 
SET @@session.sql_mode = '';
21573
 
SET AUTOCOMMIT= 1;
21574
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
21575
 
COMMIT WORK;
21576
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
21577
 
        
21578
 
# check special-1 success:      1
21579
 
UPDATE t1 SET f_charbig = '';
21580
 
        
21581
 
# check special-2 success:      1
21582
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
21583
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21584
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
21585
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21586
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21587
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21588
 
'just inserted' FROM t0_template
21589
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21590
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
21591
 
BEGIN
21592
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21593
 
f_charbig = 'updated by trigger'
21594
 
      WHERE f_int1 = new.f_int1;
21595
 
END|
21596
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21597
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21598
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21599
 
        
21600
 
# check trigger-1 success:      1
21601
 
DROP TRIGGER trg_1;
21602
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21603
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21604
 
f_charbig = 'just inserted'
21605
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21606
 
DELETE FROM t0_aux
21607
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21608
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21609
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21610
 
'just inserted' FROM t0_template
21611
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21612
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
21613
 
BEGIN
21614
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21615
 
f_charbig = 'updated by trigger'
21616
 
      WHERE f_int1 = new.f_int1;
21617
 
END|
21618
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21619
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21620
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21621
 
        
21622
 
# check trigger-2 success:      1
21623
 
DROP TRIGGER trg_1;
21624
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21625
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21626
 
f_charbig = 'just inserted'
21627
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21628
 
DELETE FROM t0_aux
21629
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21630
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21631
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21632
 
'just inserted' FROM t0_template
21633
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21634
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21635
 
BEGIN
21636
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21637
 
f_charbig = 'updated by trigger'
21638
 
      WHERE f_int1 = new.f_int1;
21639
 
END|
21640
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21641
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21642
 
        
21643
 
# check trigger-3 success:      1
21644
 
DROP TRIGGER trg_1;
21645
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21646
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21647
 
f_charbig = 'just inserted'
21648
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21649
 
DELETE FROM t0_aux
21650
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21651
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21652
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21653
 
'just inserted' FROM t0_template
21654
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21655
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21656
 
BEGIN
21657
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21658
 
f_charbig = 'updated by trigger'
21659
 
      WHERE f_int1 = - old.f_int1;
21660
 
END|
21661
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21662
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21663
 
        
21664
 
# check trigger-4 success:      1
21665
 
DROP TRIGGER trg_1;
21666
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21667
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21668
 
f_charbig = 'just inserted'
21669
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21670
 
DELETE FROM t0_aux
21671
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21672
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21673
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21674
 
'just inserted' FROM t0_template
21675
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21676
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21677
 
BEGIN
21678
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21679
 
f_charbig = 'updated by trigger'
21680
 
      WHERE f_int1 = new.f_int1;
21681
 
END|
21682
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21683
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21684
 
        
21685
 
# check trigger-5 success:      1
21686
 
DROP TRIGGER trg_1;
21687
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21688
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21689
 
f_charbig = 'just inserted'
21690
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21691
 
DELETE FROM t0_aux
21692
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21693
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21694
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21695
 
'just inserted' FROM t0_template
21696
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21697
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21698
 
BEGIN
21699
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21700
 
f_charbig = 'updated by trigger'
21701
 
      WHERE f_int1 = - old.f_int1;
21702
 
END|
21703
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21704
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21705
 
        
21706
 
# check trigger-6 success:      1
21707
 
DROP TRIGGER trg_1;
21708
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21709
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21710
 
f_charbig = 'just inserted'
21711
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21712
 
DELETE FROM t0_aux
21713
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21714
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21715
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21716
 
'just inserted' FROM t0_template
21717
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21718
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
21719
 
BEGIN
21720
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21721
 
f_charbig = 'updated by trigger'
21722
 
      WHERE f_int1 = - old.f_int1;
21723
 
END|
21724
 
DELETE FROM t0_aux
21725
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21726
 
        
21727
 
# check trigger-7 success:      1
21728
 
DROP TRIGGER trg_1;
21729
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21730
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21731
 
f_charbig = 'just inserted'
21732
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21733
 
DELETE FROM t0_aux
21734
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21735
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21736
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21737
 
'just inserted' FROM t0_template
21738
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21739
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
21740
 
BEGIN
21741
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21742
 
f_charbig = 'updated by trigger'
21743
 
      WHERE f_int1 = - old.f_int1;
21744
 
END|
21745
 
DELETE FROM t0_aux
21746
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21747
 
        
21748
 
# check trigger-8 success:      1
21749
 
DROP TRIGGER trg_1;
21750
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21751
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21752
 
f_charbig = 'just inserted'
21753
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21754
 
DELETE FROM t0_aux
21755
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21756
 
DELETE FROM t1
21757
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21758
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21759
 
BEGIN
21760
 
SET new.f_int1 = old.f_int1 + @max_row,
21761
 
new.f_int2 = old.f_int2 - @max_row,
21762
 
new.f_charbig = '####updated per update trigger####';
21763
 
END|
21764
 
UPDATE t1
21765
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21766
 
f_charbig = '####updated per update statement itself####';
21767
 
        
21768
 
# check trigger-9 success:      1
21769
 
DROP TRIGGER trg_2;
21770
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21771
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21772
 
f_charbig = CONCAT('===',f_char1,'===');
21773
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21774
 
BEGIN
21775
 
SET new.f_int1 = new.f_int1 + @max_row,
21776
 
new.f_int2 = new.f_int2 - @max_row,
21777
 
new.f_charbig = '####updated per update trigger####';
21778
 
END|
21779
 
UPDATE t1
21780
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21781
 
f_charbig = '####updated per update statement itself####';
21782
 
        
21783
 
# check trigger-10 success:     1
21784
 
DROP TRIGGER trg_2;
21785
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21786
 
f_int2 = CAST(f_char1 AS SIGNED INT),
21787
 
f_charbig = CONCAT('===',f_char1,'===');
21788
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21789
 
BEGIN
21790
 
SET new.f_int1 = @my_max1 + @counter,
21791
 
new.f_int2 = @my_min2 - @counter,
21792
 
new.f_charbig = '####updated per insert trigger####';
21793
 
SET @counter = @counter + 1;
21794
 
END|
21795
 
SET @counter = 1;
21796
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21797
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21798
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21799
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21800
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21801
 
ORDER BY f_int1;
21802
 
DROP TRIGGER trg_3;
21803
 
        
21804
 
# check trigger-11 success:     1
21805
 
DELETE FROM t1
21806
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21807
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21808
 
AND f_charbig = '####updated per insert trigger####';
21809
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21810
 
BEGIN
21811
 
SET new.f_int1 = @my_max1 + @counter,
21812
 
new.f_int2 = @my_min2 - @counter,
21813
 
new.f_charbig = '####updated per insert trigger####';
21814
 
SET @counter = @counter + 1;
21815
 
END|
21816
 
SET @counter = 1;
21817
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21818
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
21819
 
SELECT CAST(f_int1 AS CHAR),
21820
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21821
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21822
 
ORDER BY f_int1;
21823
 
DROP TRIGGER trg_3;
21824
 
        
21825
 
# check trigger-12 success:     1
21826
 
DELETE FROM t1
21827
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21828
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21829
 
AND f_charbig = '####updated per insert trigger####';
21830
 
ANALYZE  TABLE t1;
21831
 
Table   Op      Msg_type        Msg_text
21832
 
test.t1 analyze status  OK
21833
 
CHECK    TABLE t1 EXTENDED;
21834
 
Table   Op      Msg_type        Msg_text
21835
 
test.t1 check   status  OK
21836
 
CHECKSUM TABLE t1 EXTENDED;
21837
 
Table   Checksum
21838
 
test.t1 <some_value>
21839
 
OPTIMIZE TABLE t1;
21840
 
Table   Op      Msg_type        Msg_text
21841
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
21842
 
test.t1 optimize        status  OK
21843
 
# check layout success:    1
21844
 
REPAIR   TABLE t1 EXTENDED;
21845
 
Table   Op      Msg_type        Msg_text
21846
 
test.t1 repair  note    The storage engine for the table doesn't support repair
21847
 
# check layout success:    1
21848
 
TRUNCATE t1;
21849
 
        
21850
 
# check TRUNCATE success:       1
21851
 
# check layout success:    1
21852
 
# End usability test (inc/partition_check.inc)
21853
 
DROP TABLE t1;
21854
 
CREATE TABLE t1 (
21855
 
f_int1 INTEGER,
21856
 
f_int2 INTEGER,
21857
 
f_char1 CHAR(20),
21858
 
f_char2 CHAR(20),
21859
 
f_charbig VARCHAR(1000)
21860
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
21861
 
)
21862
 
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
21863
 
(PARTITION part1 VALUES LESS THAN (0)
21864
 
(SUBPARTITION subpart11, SUBPARTITION subpart12),
21865
 
PARTITION part2 VALUES LESS THAN (5)
21866
 
(SUBPARTITION subpart21, SUBPARTITION subpart22),
21867
 
PARTITION part3 VALUES LESS THAN (10)
21868
 
(SUBPARTITION subpart31, SUBPARTITION subpart32),
21869
 
PARTITION part4 VALUES LESS THAN (2147483646)
21870
 
(SUBPARTITION subpart41, SUBPARTITION subpart42));
21871
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21872
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
21873
 
# Start usability test (inc/partition_check.inc)
21874
 
create_command
21875
 
SHOW CREATE TABLE t1;
21876
 
Table   Create Table
21877
 
t1      CREATE TABLE `t1` (
21878
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
21879
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
21880
 
  `f_char1` char(20) DEFAULT NULL,
21881
 
  `f_char2` char(20) DEFAULT NULL,
21882
 
  `f_charbig` varchar(1000) DEFAULT NULL,
21883
 
  PRIMARY KEY (`f_int2`,`f_int1`),
21884
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
21885
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
21886
 
 
21887
 
unified filelist
21888
 
t1.frm
21889
 
t1.par
21890
 
 
21891
 
# check prerequisites-1 success:    1
21892
 
# check COUNT(*) success:    1
21893
 
# check MIN/MAX(f_int1) success:    1
21894
 
# check MIN/MAX(f_int2) success:    1
21895
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21896
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21897
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
21898
 
WHERE f_int1 IN (2,3);
21899
 
ERROR 23000: Can't write; duplicate key in table 't1'
21900
 
# check prerequisites-3 success:    1
21901
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
21902
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21903
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
21904
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
21905
 
WHERE f_int1 IN (2,3);
21906
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
21907
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21908
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
21909
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
21910
 
WHERE f_int1 IN (2,3);
21911
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
21912
 
# check read via f_int1 success: 1
21913
 
# check read via f_int2 success: 1
21914
 
        
21915
 
# check multiple-1 success:     1
21916
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
21917
 
        
21918
 
# check multiple-2 success:     1
21919
 
INSERT INTO t1 SELECT * FROM t0_template
21920
 
WHERE MOD(f_int1,3) = 0;
21921
 
        
21922
 
# check multiple-3 success:     1
21923
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
21924
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
21925
 
AND @max_row_div2 + @max_row_div4;
21926
 
        
21927
 
# check multiple-4 success:     1
21928
 
DELETE FROM t1
21929
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
21930
 
AND @max_row_div2 + @max_row_div4 + @max_row;
21931
 
        
21932
 
# check multiple-5 success:     1
21933
 
SELECT COUNT(*) INTO @try_count FROM t0_template
21934
 
WHERE MOD(f_int1,3) = 0
21935
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21936
 
SELECT COUNT(*) INTO @clash_count
21937
 
FROM t1 INNER JOIN t0_template USING(f_int1)
21938
 
WHERE MOD(f_int1,3) = 0
21939
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21940
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
21941
 
INSERT INTO t1
21942
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
21943
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21944
 
f_charbig = '#SINGLE#';
21945
 
        
21946
 
# check single-1 success:       1
21947
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
21948
 
INSERT INTO t1
21949
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
21950
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21951
 
f_charbig = '#SINGLE#';
21952
 
        
21953
 
# check single-2 success:       1
21954
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
21955
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
21956
 
UPDATE t1 SET f_int1 = @cur_value2
21957
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
21958
 
        
21959
 
# check single-3 success:       1
21960
 
SET @cur_value1= -1;
21961
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
21962
 
UPDATE t1 SET f_int1 = @cur_value1
21963
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
21964
 
        
21965
 
# check single-4 success:       1
21966
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
21967
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
21968
 
        
21969
 
# check single-5 success:       1
21970
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
21971
 
        
21972
 
# check single-6 success:       1
21973
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
21974
 
ERROR HY000: Table has no partition for value 2147483647
21975
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
21976
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
21977
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
21978
 
f_charbig = '#NULL#';
21979
 
INSERT INTO t1
21980
 
SET f_int1 = NULL , f_int2 = -@max_row,
21981
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
21982
 
f_charbig = '#NULL#';
21983
 
ERROR 23000: Column 'f_int1' cannot be null
21984
 
# check null success:    1
21985
 
DELETE FROM t1
21986
 
WHERE f_int1 = 0 AND f_int2 = 0
21987
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
21988
 
AND f_charbig = '#NULL#';
21989
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21990
 
SELECT f_int1, f_int1, '', '', 'was inserted'
21991
 
   FROM t0_template source_tab
21992
 
WHERE MOD(f_int1,3) = 0
21993
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
21994
 
ON DUPLICATE KEY
21995
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
21996
 
f_int2 = 2 * @max_row + source_tab.f_int1,
21997
 
f_charbig = 'was updated';
21998
 
        
21999
 
# check unique-1-a success:     1
22000
 
        
22001
 
# check unique-1-b success:     1
22002
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
22003
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22004
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22005
 
f_charbig = CONCAT('===',f_char1,'===')
22006
 
WHERE f_charbig = 'was updated';
22007
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22008
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
22009
 
   FROM t0_template source_tab
22010
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22011
 
        
22012
 
# check replace success:        1
22013
 
DELETE FROM t1
22014
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
22015
 
DELETE FROM t1
22016
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
22017
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
22018
 
UPDATE t1 SET f_int2 = f_int1,
22019
 
f_char1 = CAST(f_int1 AS CHAR),
22020
 
f_char2 = CAST(f_int1 AS CHAR),
22021
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
22022
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
22023
 
SET AUTOCOMMIT= 0;
22024
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22025
 
SELECT f_int1, f_int1, '', '', 'was inserted'
22026
 
FROM t0_template source_tab
22027
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22028
 
        
22029
 
# check transactions-1 success:         1
22030
 
COMMIT WORK;
22031
 
        
22032
 
# check transactions-2 success:         1
22033
 
ROLLBACK WORK;
22034
 
        
22035
 
# check transactions-3 success:         1
22036
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
22037
 
COMMIT WORK;
22038
 
ROLLBACK WORK;
22039
 
        
22040
 
# check transactions-4 success:         1
22041
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22042
 
SELECT f_int1, f_int1, '', '', 'was inserted'
22043
 
FROM t0_template source_tab
22044
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22045
 
        
22046
 
# check transactions-5 success:         1
22047
 
ROLLBACK WORK;
22048
 
        
22049
 
# check transactions-6 success:         1
22050
 
# INFO: Storage engine used for t1 seems to be transactional.
22051
 
COMMIT;
22052
 
        
22053
 
# check transactions-7 success:         1
22054
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
22055
 
COMMIT WORK;
22056
 
SET @@session.sql_mode = 'traditional';
22057
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
22058
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22059
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
22060
 
'', '', 'was inserted' FROM t0_template
22061
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22062
 
ERROR 22012: Division by 0
22063
 
COMMIT;
22064
 
        
22065
 
# check transactions-8 success:         1
22066
 
# INFO: Storage engine used for t1 seems to be able to revert
22067
 
#       changes made by the failing statement.
22068
 
SET @@session.sql_mode = '';
22069
 
SET AUTOCOMMIT= 1;
22070
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
22071
 
COMMIT WORK;
22072
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
22073
 
        
22074
 
# check special-1 success:      1
22075
 
UPDATE t1 SET f_charbig = '';
22076
 
        
22077
 
# check special-2 success:      1
22078
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
22079
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22080
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
22081
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22082
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22083
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22084
 
'just inserted' FROM t0_template
22085
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22086
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
22087
 
BEGIN
22088
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22089
 
f_charbig = 'updated by trigger'
22090
 
      WHERE f_int1 = new.f_int1;
22091
 
END|
22092
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22093
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22094
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22095
 
        
22096
 
# check trigger-1 success:      1
22097
 
DROP TRIGGER trg_1;
22098
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22099
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22100
 
f_charbig = 'just inserted'
22101
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22102
 
DELETE FROM t0_aux
22103
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22104
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22105
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22106
 
'just inserted' FROM t0_template
22107
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22108
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
22109
 
BEGIN
22110
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22111
 
f_charbig = 'updated by trigger'
22112
 
      WHERE f_int1 = new.f_int1;
22113
 
END|
22114
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22115
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22116
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22117
 
        
22118
 
# check trigger-2 success:      1
22119
 
DROP TRIGGER trg_1;
22120
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22121
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22122
 
f_charbig = 'just inserted'
22123
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22124
 
DELETE FROM t0_aux
22125
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22126
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22127
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22128
 
'just inserted' FROM t0_template
22129
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22130
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22131
 
BEGIN
22132
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22133
 
f_charbig = 'updated by trigger'
22134
 
      WHERE f_int1 = new.f_int1;
22135
 
END|
22136
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22137
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22138
 
        
22139
 
# check trigger-3 success:      1
22140
 
DROP TRIGGER trg_1;
22141
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22142
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22143
 
f_charbig = 'just inserted'
22144
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22145
 
DELETE FROM t0_aux
22146
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22147
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22148
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22149
 
'just inserted' FROM t0_template
22150
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22151
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22152
 
BEGIN
22153
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22154
 
f_charbig = 'updated by trigger'
22155
 
      WHERE f_int1 = - old.f_int1;
22156
 
END|
22157
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22158
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22159
 
        
22160
 
# check trigger-4 success:      1
22161
 
DROP TRIGGER trg_1;
22162
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22163
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22164
 
f_charbig = 'just inserted'
22165
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22166
 
DELETE FROM t0_aux
22167
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22168
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22169
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22170
 
'just inserted' FROM t0_template
22171
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22172
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22173
 
BEGIN
22174
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22175
 
f_charbig = 'updated by trigger'
22176
 
      WHERE f_int1 = new.f_int1;
22177
 
END|
22178
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22179
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22180
 
        
22181
 
# check trigger-5 success:      1
22182
 
DROP TRIGGER trg_1;
22183
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22184
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22185
 
f_charbig = 'just inserted'
22186
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22187
 
DELETE FROM t0_aux
22188
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22189
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22190
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22191
 
'just inserted' FROM t0_template
22192
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22193
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22194
 
BEGIN
22195
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22196
 
f_charbig = 'updated by trigger'
22197
 
      WHERE f_int1 = - old.f_int1;
22198
 
END|
22199
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22200
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22201
 
        
22202
 
# check trigger-6 success:      1
22203
 
DROP TRIGGER trg_1;
22204
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22205
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22206
 
f_charbig = 'just inserted'
22207
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22208
 
DELETE FROM t0_aux
22209
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22210
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22211
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22212
 
'just inserted' FROM t0_template
22213
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22214
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
22215
 
BEGIN
22216
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22217
 
f_charbig = 'updated by trigger'
22218
 
      WHERE f_int1 = - old.f_int1;
22219
 
END|
22220
 
DELETE FROM t0_aux
22221
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22222
 
        
22223
 
# check trigger-7 success:      1
22224
 
DROP TRIGGER trg_1;
22225
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22226
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22227
 
f_charbig = 'just inserted'
22228
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22229
 
DELETE FROM t0_aux
22230
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22231
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22232
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22233
 
'just inserted' FROM t0_template
22234
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22235
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
22236
 
BEGIN
22237
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22238
 
f_charbig = 'updated by trigger'
22239
 
      WHERE f_int1 = - old.f_int1;
22240
 
END|
22241
 
DELETE FROM t0_aux
22242
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22243
 
        
22244
 
# check trigger-8 success:      1
22245
 
DROP TRIGGER trg_1;
22246
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22247
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22248
 
f_charbig = 'just inserted'
22249
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22250
 
DELETE FROM t0_aux
22251
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22252
 
DELETE FROM t1
22253
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22254
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22255
 
BEGIN
22256
 
SET new.f_int1 = old.f_int1 + @max_row,
22257
 
new.f_int2 = old.f_int2 - @max_row,
22258
 
new.f_charbig = '####updated per update trigger####';
22259
 
END|
22260
 
UPDATE t1
22261
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22262
 
f_charbig = '####updated per update statement itself####';
22263
 
        
22264
 
# check trigger-9 success:      1
22265
 
DROP TRIGGER trg_2;
22266
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22267
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22268
 
f_charbig = CONCAT('===',f_char1,'===');
22269
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22270
 
BEGIN
22271
 
SET new.f_int1 = new.f_int1 + @max_row,
22272
 
new.f_int2 = new.f_int2 - @max_row,
22273
 
new.f_charbig = '####updated per update trigger####';
22274
 
END|
22275
 
UPDATE t1
22276
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22277
 
f_charbig = '####updated per update statement itself####';
22278
 
        
22279
 
# check trigger-10 success:     1
22280
 
DROP TRIGGER trg_2;
22281
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22282
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22283
 
f_charbig = CONCAT('===',f_char1,'===');
22284
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22285
 
BEGIN
22286
 
SET new.f_int1 = @my_max1 + @counter,
22287
 
new.f_int2 = @my_min2 - @counter,
22288
 
new.f_charbig = '####updated per insert trigger####';
22289
 
SET @counter = @counter + 1;
22290
 
END|
22291
 
SET @counter = 1;
22292
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22293
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22294
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22295
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22296
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22297
 
ORDER BY f_int1;
22298
 
DROP TRIGGER trg_3;
22299
 
        
22300
 
# check trigger-11 success:     1
22301
 
DELETE FROM t1
22302
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22303
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22304
 
AND f_charbig = '####updated per insert trigger####';
22305
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22306
 
BEGIN
22307
 
SET new.f_int1 = @my_max1 + @counter,
22308
 
new.f_int2 = @my_min2 - @counter,
22309
 
new.f_charbig = '####updated per insert trigger####';
22310
 
SET @counter = @counter + 1;
22311
 
END|
22312
 
SET @counter = 1;
22313
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22314
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
22315
 
SELECT CAST(f_int1 AS CHAR),
22316
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22317
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22318
 
ORDER BY f_int1;
22319
 
DROP TRIGGER trg_3;
22320
 
        
22321
 
# check trigger-12 success:     1
22322
 
DELETE FROM t1
22323
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22324
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22325
 
AND f_charbig = '####updated per insert trigger####';
22326
 
ANALYZE  TABLE t1;
22327
 
Table   Op      Msg_type        Msg_text
22328
 
test.t1 analyze status  OK
22329
 
CHECK    TABLE t1 EXTENDED;
22330
 
Table   Op      Msg_type        Msg_text
22331
 
test.t1 check   status  OK
22332
 
CHECKSUM TABLE t1 EXTENDED;
22333
 
Table   Checksum
22334
 
test.t1 <some_value>
22335
 
OPTIMIZE TABLE t1;
22336
 
Table   Op      Msg_type        Msg_text
22337
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
22338
 
test.t1 optimize        status  OK
22339
 
# check layout success:    1
22340
 
REPAIR   TABLE t1 EXTENDED;
22341
 
Table   Op      Msg_type        Msg_text
22342
 
test.t1 repair  note    The storage engine for the table doesn't support repair
22343
 
# check layout success:    1
22344
 
TRUNCATE t1;
22345
 
        
22346
 
# check TRUNCATE success:       1
22347
 
# check layout success:    1
22348
 
# End usability test (inc/partition_check.inc)
22349
 
DROP TABLE t1;
22350
 
CREATE TABLE t1 (
22351
 
f_int1 INTEGER,
22352
 
f_int2 INTEGER,
22353
 
f_char1 CHAR(20),
22354
 
f_char2 CHAR(20),
22355
 
f_charbig VARCHAR(1000)
22356
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
22357
 
)
22358
 
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
22359
 
(PARTITION part1 VALUES IN (0)
22360
 
(SUBPARTITION sp11, SUBPARTITION sp12),
22361
 
PARTITION part2 VALUES IN (1)
22362
 
(SUBPARTITION sp21, SUBPARTITION sp22),
22363
 
PARTITION part3 VALUES IN (2)
22364
 
(SUBPARTITION sp31, SUBPARTITION sp32),
22365
 
PARTITION part4 VALUES IN (NULL)
22366
 
(SUBPARTITION sp41, SUBPARTITION sp42));
22367
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22368
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
22369
 
# Start usability test (inc/partition_check.inc)
22370
 
create_command
22371
 
SHOW CREATE TABLE t1;
22372
 
Table   Create Table
22373
 
t1      CREATE TABLE `t1` (
22374
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
22375
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
22376
 
  `f_char1` char(20) DEFAULT NULL,
22377
 
  `f_char2` char(20) DEFAULT NULL,
22378
 
  `f_charbig` varchar(1000) DEFAULT NULL,
22379
 
  PRIMARY KEY (`f_int2`,`f_int1`),
22380
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
22381
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
22382
 
 
22383
 
unified filelist
22384
 
t1.frm
22385
 
t1.par
22386
 
 
22387
 
# check prerequisites-1 success:    1
22388
 
# check COUNT(*) success:    1
22389
 
# check MIN/MAX(f_int1) success:    1
22390
 
# check MIN/MAX(f_int2) success:    1
22391
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22392
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22393
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
22394
 
WHERE f_int1 IN (2,3);
22395
 
ERROR 23000: Can't write; duplicate key in table 't1'
22396
 
# check prerequisites-3 success:    1
22397
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
22398
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22399
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
22400
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
22401
 
WHERE f_int1 IN (2,3);
22402
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
22403
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22404
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
22405
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
22406
 
WHERE f_int1 IN (2,3);
22407
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
22408
 
# check read via f_int1 success: 1
22409
 
# check read via f_int2 success: 1
22410
 
        
22411
 
# check multiple-1 success:     1
22412
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
22413
 
        
22414
 
# check multiple-2 success:     1
22415
 
INSERT INTO t1 SELECT * FROM t0_template
22416
 
WHERE MOD(f_int1,3) = 0;
22417
 
        
22418
 
# check multiple-3 success:     1
22419
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
22420
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
22421
 
AND @max_row_div2 + @max_row_div4;
22422
 
        
22423
 
# check multiple-4 success:     1
22424
 
DELETE FROM t1
22425
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
22426
 
AND @max_row_div2 + @max_row_div4 + @max_row;
22427
 
        
22428
 
# check multiple-5 success:     1
22429
 
SELECT COUNT(*) INTO @try_count FROM t0_template
22430
 
WHERE MOD(f_int1,3) = 0
22431
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22432
 
SELECT COUNT(*) INTO @clash_count
22433
 
FROM t1 INNER JOIN t0_template USING(f_int1)
22434
 
WHERE MOD(f_int1,3) = 0
22435
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22436
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
22437
 
INSERT INTO t1
22438
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
22439
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22440
 
f_charbig = '#SINGLE#';
22441
 
        
22442
 
# check single-1 success:       1
22443
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
22444
 
INSERT INTO t1
22445
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
22446
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22447
 
f_charbig = '#SINGLE#';
22448
 
        
22449
 
# check single-2 success:       1
22450
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
22451
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
22452
 
UPDATE t1 SET f_int1 = @cur_value2
22453
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
22454
 
        
22455
 
# check single-3 success:       1
22456
 
SET @cur_value1= -1;
22457
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
22458
 
UPDATE t1 SET f_int1 = @cur_value1
22459
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
22460
 
        
22461
 
# check single-4 success:       1
22462
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
22463
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
22464
 
        
22465
 
# check single-5 success:       1
22466
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
22467
 
        
22468
 
# check single-6 success:       1
22469
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
22470
 
        
22471
 
# check single-7 success:       1
22472
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
22473
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
22474
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
22475
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
22476
 
f_charbig = '#NULL#';
22477
 
INSERT INTO t1
22478
 
SET f_int1 = NULL , f_int2 = -@max_row,
22479
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
22480
 
f_charbig = '#NULL#';
22481
 
ERROR 23000: Column 'f_int1' cannot be null
22482
 
# check null success:    1
22483
 
DELETE FROM t1
22484
 
WHERE f_int1 = 0 AND f_int2 = 0
22485
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
22486
 
AND f_charbig = '#NULL#';
22487
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22488
 
SELECT f_int1, f_int1, '', '', 'was inserted'
22489
 
   FROM t0_template source_tab
22490
 
WHERE MOD(f_int1,3) = 0
22491
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
22492
 
ON DUPLICATE KEY
22493
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
22494
 
f_int2 = 2 * @max_row + source_tab.f_int1,
22495
 
f_charbig = 'was updated';
22496
 
        
22497
 
# check unique-1-a success:     1
22498
 
        
22499
 
# check unique-1-b success:     1
22500
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
22501
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22502
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22503
 
f_charbig = CONCAT('===',f_char1,'===')
22504
 
WHERE f_charbig = 'was updated';
22505
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22506
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
22507
 
   FROM t0_template source_tab
22508
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22509
 
        
22510
 
# check replace success:        1
22511
 
DELETE FROM t1
22512
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
22513
 
DELETE FROM t1
22514
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
22515
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
22516
 
UPDATE t1 SET f_int2 = f_int1,
22517
 
f_char1 = CAST(f_int1 AS CHAR),
22518
 
f_char2 = CAST(f_int1 AS CHAR),
22519
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
22520
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
22521
 
SET AUTOCOMMIT= 0;
22522
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22523
 
SELECT f_int1, f_int1, '', '', 'was inserted'
22524
 
FROM t0_template source_tab
22525
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22526
 
        
22527
 
# check transactions-1 success:         1
22528
 
COMMIT WORK;
22529
 
        
22530
 
# check transactions-2 success:         1
22531
 
ROLLBACK WORK;
22532
 
        
22533
 
# check transactions-3 success:         1
22534
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
22535
 
COMMIT WORK;
22536
 
ROLLBACK WORK;
22537
 
        
22538
 
# check transactions-4 success:         1
22539
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22540
 
SELECT f_int1, f_int1, '', '', 'was inserted'
22541
 
FROM t0_template source_tab
22542
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22543
 
        
22544
 
# check transactions-5 success:         1
22545
 
ROLLBACK WORK;
22546
 
        
22547
 
# check transactions-6 success:         1
22548
 
# INFO: Storage engine used for t1 seems to be transactional.
22549
 
COMMIT;
22550
 
        
22551
 
# check transactions-7 success:         1
22552
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
22553
 
COMMIT WORK;
22554
 
SET @@session.sql_mode = 'traditional';
22555
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
22556
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22557
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
22558
 
'', '', 'was inserted' FROM t0_template
22559
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22560
 
ERROR 22012: Division by 0
22561
 
COMMIT;
22562
 
        
22563
 
# check transactions-8 success:         1
22564
 
# INFO: Storage engine used for t1 seems to be able to revert
22565
 
#       changes made by the failing statement.
22566
 
SET @@session.sql_mode = '';
22567
 
SET AUTOCOMMIT= 1;
22568
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
22569
 
COMMIT WORK;
22570
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
22571
 
        
22572
 
# check special-1 success:      1
22573
 
UPDATE t1 SET f_charbig = '';
22574
 
        
22575
 
# check special-2 success:      1
22576
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
22577
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22578
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
22579
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22580
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22581
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22582
 
'just inserted' FROM t0_template
22583
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22584
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
22585
 
BEGIN
22586
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22587
 
f_charbig = 'updated by trigger'
22588
 
      WHERE f_int1 = new.f_int1;
22589
 
END|
22590
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22591
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22592
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22593
 
        
22594
 
# check trigger-1 success:      1
22595
 
DROP TRIGGER trg_1;
22596
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22597
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22598
 
f_charbig = 'just inserted'
22599
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22600
 
DELETE FROM t0_aux
22601
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22602
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22603
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22604
 
'just inserted' FROM t0_template
22605
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22606
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
22607
 
BEGIN
22608
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22609
 
f_charbig = 'updated by trigger'
22610
 
      WHERE f_int1 = new.f_int1;
22611
 
END|
22612
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22613
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22614
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22615
 
        
22616
 
# check trigger-2 success:      1
22617
 
DROP TRIGGER trg_1;
22618
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22619
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22620
 
f_charbig = 'just inserted'
22621
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22622
 
DELETE FROM t0_aux
22623
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22624
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22625
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22626
 
'just inserted' FROM t0_template
22627
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22628
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22629
 
BEGIN
22630
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22631
 
f_charbig = 'updated by trigger'
22632
 
      WHERE f_int1 = new.f_int1;
22633
 
END|
22634
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22635
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22636
 
        
22637
 
# check trigger-3 success:      1
22638
 
DROP TRIGGER trg_1;
22639
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22640
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22641
 
f_charbig = 'just inserted'
22642
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22643
 
DELETE FROM t0_aux
22644
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22645
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22646
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22647
 
'just inserted' FROM t0_template
22648
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22649
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22650
 
BEGIN
22651
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22652
 
f_charbig = 'updated by trigger'
22653
 
      WHERE f_int1 = - old.f_int1;
22654
 
END|
22655
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22656
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22657
 
        
22658
 
# check trigger-4 success:      1
22659
 
DROP TRIGGER trg_1;
22660
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22661
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22662
 
f_charbig = 'just inserted'
22663
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22664
 
DELETE FROM t0_aux
22665
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22666
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22667
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22668
 
'just inserted' FROM t0_template
22669
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22670
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22671
 
BEGIN
22672
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22673
 
f_charbig = 'updated by trigger'
22674
 
      WHERE f_int1 = new.f_int1;
22675
 
END|
22676
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22677
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22678
 
        
22679
 
# check trigger-5 success:      1
22680
 
DROP TRIGGER trg_1;
22681
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22682
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22683
 
f_charbig = 'just inserted'
22684
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22685
 
DELETE FROM t0_aux
22686
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22687
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22688
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22689
 
'just inserted' FROM t0_template
22690
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22691
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22692
 
BEGIN
22693
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22694
 
f_charbig = 'updated by trigger'
22695
 
      WHERE f_int1 = - old.f_int1;
22696
 
END|
22697
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22698
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22699
 
        
22700
 
# check trigger-6 success:      1
22701
 
DROP TRIGGER trg_1;
22702
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22703
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22704
 
f_charbig = 'just inserted'
22705
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22706
 
DELETE FROM t0_aux
22707
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22708
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22709
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22710
 
'just inserted' FROM t0_template
22711
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22712
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
22713
 
BEGIN
22714
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22715
 
f_charbig = 'updated by trigger'
22716
 
      WHERE f_int1 = - old.f_int1;
22717
 
END|
22718
 
DELETE FROM t0_aux
22719
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22720
 
        
22721
 
# check trigger-7 success:      1
22722
 
DROP TRIGGER trg_1;
22723
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22724
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22725
 
f_charbig = 'just inserted'
22726
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22727
 
DELETE FROM t0_aux
22728
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22729
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22730
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22731
 
'just inserted' FROM t0_template
22732
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22733
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
22734
 
BEGIN
22735
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22736
 
f_charbig = 'updated by trigger'
22737
 
      WHERE f_int1 = - old.f_int1;
22738
 
END|
22739
 
DELETE FROM t0_aux
22740
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22741
 
        
22742
 
# check trigger-8 success:      1
22743
 
DROP TRIGGER trg_1;
22744
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22745
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22746
 
f_charbig = 'just inserted'
22747
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22748
 
DELETE FROM t0_aux
22749
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22750
 
DELETE FROM t1
22751
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22752
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22753
 
BEGIN
22754
 
SET new.f_int1 = old.f_int1 + @max_row,
22755
 
new.f_int2 = old.f_int2 - @max_row,
22756
 
new.f_charbig = '####updated per update trigger####';
22757
 
END|
22758
 
UPDATE t1
22759
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22760
 
f_charbig = '####updated per update statement itself####';
22761
 
        
22762
 
# check trigger-9 success:      1
22763
 
DROP TRIGGER trg_2;
22764
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22765
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22766
 
f_charbig = CONCAT('===',f_char1,'===');
22767
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22768
 
BEGIN
22769
 
SET new.f_int1 = new.f_int1 + @max_row,
22770
 
new.f_int2 = new.f_int2 - @max_row,
22771
 
new.f_charbig = '####updated per update trigger####';
22772
 
END|
22773
 
UPDATE t1
22774
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22775
 
f_charbig = '####updated per update statement itself####';
22776
 
        
22777
 
# check trigger-10 success:     1
22778
 
DROP TRIGGER trg_2;
22779
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22780
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22781
 
f_charbig = CONCAT('===',f_char1,'===');
22782
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22783
 
BEGIN
22784
 
SET new.f_int1 = @my_max1 + @counter,
22785
 
new.f_int2 = @my_min2 - @counter,
22786
 
new.f_charbig = '####updated per insert trigger####';
22787
 
SET @counter = @counter + 1;
22788
 
END|
22789
 
SET @counter = 1;
22790
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22791
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22792
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22793
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22794
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22795
 
ORDER BY f_int1;
22796
 
DROP TRIGGER trg_3;
22797
 
        
22798
 
# check trigger-11 success:     1
22799
 
DELETE FROM t1
22800
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22801
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22802
 
AND f_charbig = '####updated per insert trigger####';
22803
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22804
 
BEGIN
22805
 
SET new.f_int1 = @my_max1 + @counter,
22806
 
new.f_int2 = @my_min2 - @counter,
22807
 
new.f_charbig = '####updated per insert trigger####';
22808
 
SET @counter = @counter + 1;
22809
 
END|
22810
 
SET @counter = 1;
22811
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22812
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
22813
 
SELECT CAST(f_int1 AS CHAR),
22814
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22815
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22816
 
ORDER BY f_int1;
22817
 
DROP TRIGGER trg_3;
22818
 
        
22819
 
# check trigger-12 success:     1
22820
 
DELETE FROM t1
22821
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22822
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22823
 
AND f_charbig = '####updated per insert trigger####';
22824
 
ANALYZE  TABLE t1;
22825
 
Table   Op      Msg_type        Msg_text
22826
 
test.t1 analyze status  OK
22827
 
CHECK    TABLE t1 EXTENDED;
22828
 
Table   Op      Msg_type        Msg_text
22829
 
test.t1 check   status  OK
22830
 
CHECKSUM TABLE t1 EXTENDED;
22831
 
Table   Checksum
22832
 
test.t1 <some_value>
22833
 
OPTIMIZE TABLE t1;
22834
 
Table   Op      Msg_type        Msg_text
22835
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
22836
 
test.t1 optimize        status  OK
22837
 
# check layout success:    1
22838
 
REPAIR   TABLE t1 EXTENDED;
22839
 
Table   Op      Msg_type        Msg_text
22840
 
test.t1 repair  note    The storage engine for the table doesn't support repair
22841
 
# check layout success:    1
22842
 
TRUNCATE t1;
22843
 
        
22844
 
# check TRUNCATE success:       1
22845
 
# check layout success:    1
22846
 
# End usability test (inc/partition_check.inc)
22847
 
DROP TABLE t1;
22848
 
CREATE TABLE t1 (
22849
 
f_int1 INTEGER,
22850
 
f_int2 INTEGER,
22851
 
f_char1 CHAR(20),
22852
 
f_char2 CHAR(20),
22853
 
f_charbig VARCHAR(1000)
22854
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
22855
 
)
22856
 
PARTITION BY LIST(ABS(MOD(f_int1,2)))
22857
 
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
22858
 
(PARTITION part1 VALUES IN (0),
22859
 
PARTITION part2 VALUES IN (1),
22860
 
PARTITION part3 VALUES IN (NULL));
22861
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22862
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
22863
 
# Start usability test (inc/partition_check.inc)
22864
 
create_command
22865
 
SHOW CREATE TABLE t1;
22866
 
Table   Create Table
22867
 
t1      CREATE TABLE `t1` (
22868
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
22869
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
22870
 
  `f_char1` char(20) DEFAULT NULL,
22871
 
  `f_char2` char(20) DEFAULT NULL,
22872
 
  `f_charbig` varchar(1000) DEFAULT NULL,
22873
 
  PRIMARY KEY (`f_int2`,`f_int1`),
22874
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
22875
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
22876
 
 
22877
 
unified filelist
22878
 
t1.frm
22879
 
t1.par
22880
 
 
22881
 
# check prerequisites-1 success:    1
22882
 
# check COUNT(*) success:    1
22883
 
# check MIN/MAX(f_int1) success:    1
22884
 
# check MIN/MAX(f_int2) success:    1
22885
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22886
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22887
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
22888
 
WHERE f_int1 IN (2,3);
22889
 
ERROR 23000: Can't write; duplicate key in table 't1'
22890
 
# check prerequisites-3 success:    1
22891
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
22892
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22893
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
22894
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
22895
 
WHERE f_int1 IN (2,3);
22896
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
22897
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22898
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
22899
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
22900
 
WHERE f_int1 IN (2,3);
22901
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
22902
 
# check read via f_int1 success: 1
22903
 
# check read via f_int2 success: 1
22904
 
        
22905
 
# check multiple-1 success:     1
22906
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
22907
 
        
22908
 
# check multiple-2 success:     1
22909
 
INSERT INTO t1 SELECT * FROM t0_template
22910
 
WHERE MOD(f_int1,3) = 0;
22911
 
        
22912
 
# check multiple-3 success:     1
22913
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
22914
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
22915
 
AND @max_row_div2 + @max_row_div4;
22916
 
        
22917
 
# check multiple-4 success:     1
22918
 
DELETE FROM t1
22919
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
22920
 
AND @max_row_div2 + @max_row_div4 + @max_row;
22921
 
        
22922
 
# check multiple-5 success:     1
22923
 
SELECT COUNT(*) INTO @try_count FROM t0_template
22924
 
WHERE MOD(f_int1,3) = 0
22925
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22926
 
SELECT COUNT(*) INTO @clash_count
22927
 
FROM t1 INNER JOIN t0_template USING(f_int1)
22928
 
WHERE MOD(f_int1,3) = 0
22929
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22930
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
22931
 
INSERT INTO t1
22932
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
22933
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22934
 
f_charbig = '#SINGLE#';
22935
 
        
22936
 
# check single-1 success:       1
22937
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
22938
 
INSERT INTO t1
22939
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
22940
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22941
 
f_charbig = '#SINGLE#';
22942
 
        
22943
 
# check single-2 success:       1
22944
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
22945
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
22946
 
UPDATE t1 SET f_int1 = @cur_value2
22947
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
22948
 
        
22949
 
# check single-3 success:       1
22950
 
SET @cur_value1= -1;
22951
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
22952
 
UPDATE t1 SET f_int1 = @cur_value1
22953
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
22954
 
        
22955
 
# check single-4 success:       1
22956
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
22957
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
22958
 
        
22959
 
# check single-5 success:       1
22960
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
22961
 
        
22962
 
# check single-6 success:       1
22963
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
22964
 
        
22965
 
# check single-7 success:       1
22966
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
22967
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
22968
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
22969
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
22970
 
f_charbig = '#NULL#';
22971
 
INSERT INTO t1
22972
 
SET f_int1 = NULL , f_int2 = -@max_row,
22973
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
22974
 
f_charbig = '#NULL#';
22975
 
ERROR 23000: Column 'f_int1' cannot be null
22976
 
# check null success:    1
22977
 
DELETE FROM t1
22978
 
WHERE f_int1 = 0 AND f_int2 = 0
22979
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
22980
 
AND f_charbig = '#NULL#';
22981
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22982
 
SELECT f_int1, f_int1, '', '', 'was inserted'
22983
 
   FROM t0_template source_tab
22984
 
WHERE MOD(f_int1,3) = 0
22985
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
22986
 
ON DUPLICATE KEY
22987
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
22988
 
f_int2 = 2 * @max_row + source_tab.f_int1,
22989
 
f_charbig = 'was updated';
22990
 
        
22991
 
# check unique-1-a success:     1
22992
 
        
22993
 
# check unique-1-b success:     1
22994
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
22995
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22996
 
f_int2 = CAST(f_char1 AS SIGNED INT),
22997
 
f_charbig = CONCAT('===',f_char1,'===')
22998
 
WHERE f_charbig = 'was updated';
22999
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23000
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
23001
 
   FROM t0_template source_tab
23002
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23003
 
        
23004
 
# check replace success:        1
23005
 
DELETE FROM t1
23006
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
23007
 
DELETE FROM t1
23008
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
23009
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
23010
 
UPDATE t1 SET f_int2 = f_int1,
23011
 
f_char1 = CAST(f_int1 AS CHAR),
23012
 
f_char2 = CAST(f_int1 AS CHAR),
23013
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
23014
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
23015
 
SET AUTOCOMMIT= 0;
23016
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23017
 
SELECT f_int1, f_int1, '', '', 'was inserted'
23018
 
FROM t0_template source_tab
23019
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23020
 
        
23021
 
# check transactions-1 success:         1
23022
 
COMMIT WORK;
23023
 
        
23024
 
# check transactions-2 success:         1
23025
 
ROLLBACK WORK;
23026
 
        
23027
 
# check transactions-3 success:         1
23028
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
23029
 
COMMIT WORK;
23030
 
ROLLBACK WORK;
23031
 
        
23032
 
# check transactions-4 success:         1
23033
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23034
 
SELECT f_int1, f_int1, '', '', 'was inserted'
23035
 
FROM t0_template source_tab
23036
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23037
 
        
23038
 
# check transactions-5 success:         1
23039
 
ROLLBACK WORK;
23040
 
        
23041
 
# check transactions-6 success:         1
23042
 
# INFO: Storage engine used for t1 seems to be transactional.
23043
 
COMMIT;
23044
 
        
23045
 
# check transactions-7 success:         1
23046
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
23047
 
COMMIT WORK;
23048
 
SET @@session.sql_mode = 'traditional';
23049
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
23050
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23051
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
23052
 
'', '', 'was inserted' FROM t0_template
23053
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23054
 
ERROR 22012: Division by 0
23055
 
COMMIT;
23056
 
        
23057
 
# check transactions-8 success:         1
23058
 
# INFO: Storage engine used for t1 seems to be able to revert
23059
 
#       changes made by the failing statement.
23060
 
SET @@session.sql_mode = '';
23061
 
SET AUTOCOMMIT= 1;
23062
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
23063
 
COMMIT WORK;
23064
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
23065
 
        
23066
 
# check special-1 success:      1
23067
 
UPDATE t1 SET f_charbig = '';
23068
 
        
23069
 
# check special-2 success:      1
23070
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
23071
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23072
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
23073
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23074
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23075
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23076
 
'just inserted' FROM t0_template
23077
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23078
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
23079
 
BEGIN
23080
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23081
 
f_charbig = 'updated by trigger'
23082
 
      WHERE f_int1 = new.f_int1;
23083
 
END|
23084
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23085
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23086
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23087
 
        
23088
 
# check trigger-1 success:      1
23089
 
DROP TRIGGER trg_1;
23090
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23091
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23092
 
f_charbig = 'just inserted'
23093
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23094
 
DELETE FROM t0_aux
23095
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23096
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23097
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23098
 
'just inserted' FROM t0_template
23099
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23100
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
23101
 
BEGIN
23102
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23103
 
f_charbig = 'updated by trigger'
23104
 
      WHERE f_int1 = new.f_int1;
23105
 
END|
23106
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23107
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23108
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23109
 
        
23110
 
# check trigger-2 success:      1
23111
 
DROP TRIGGER trg_1;
23112
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23113
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23114
 
f_charbig = 'just inserted'
23115
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23116
 
DELETE FROM t0_aux
23117
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23118
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23119
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23120
 
'just inserted' FROM t0_template
23121
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23122
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23123
 
BEGIN
23124
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23125
 
f_charbig = 'updated by trigger'
23126
 
      WHERE f_int1 = new.f_int1;
23127
 
END|
23128
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23129
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23130
 
        
23131
 
# check trigger-3 success:      1
23132
 
DROP TRIGGER trg_1;
23133
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23134
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23135
 
f_charbig = 'just inserted'
23136
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23137
 
DELETE FROM t0_aux
23138
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23139
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23140
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23141
 
'just inserted' FROM t0_template
23142
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23143
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23144
 
BEGIN
23145
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23146
 
f_charbig = 'updated by trigger'
23147
 
      WHERE f_int1 = - old.f_int1;
23148
 
END|
23149
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23150
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23151
 
        
23152
 
# check trigger-4 success:      1
23153
 
DROP TRIGGER trg_1;
23154
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23155
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23156
 
f_charbig = 'just inserted'
23157
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23158
 
DELETE FROM t0_aux
23159
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23160
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23161
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23162
 
'just inserted' FROM t0_template
23163
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23164
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
23165
 
BEGIN
23166
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23167
 
f_charbig = 'updated by trigger'
23168
 
      WHERE f_int1 = new.f_int1;
23169
 
END|
23170
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23171
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23172
 
        
23173
 
# check trigger-5 success:      1
23174
 
DROP TRIGGER trg_1;
23175
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23176
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23177
 
f_charbig = 'just inserted'
23178
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23179
 
DELETE FROM t0_aux
23180
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23181
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23182
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23183
 
'just inserted' FROM t0_template
23184
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23185
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
23186
 
BEGIN
23187
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23188
 
f_charbig = 'updated by trigger'
23189
 
      WHERE f_int1 = - old.f_int1;
23190
 
END|
23191
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23192
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23193
 
        
23194
 
# check trigger-6 success:      1
23195
 
DROP TRIGGER trg_1;
23196
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23197
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23198
 
f_charbig = 'just inserted'
23199
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23200
 
DELETE FROM t0_aux
23201
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23202
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23203
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23204
 
'just inserted' FROM t0_template
23205
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23206
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
23207
 
BEGIN
23208
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23209
 
f_charbig = 'updated by trigger'
23210
 
      WHERE f_int1 = - old.f_int1;
23211
 
END|
23212
 
DELETE FROM t0_aux
23213
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23214
 
        
23215
 
# check trigger-7 success:      1
23216
 
DROP TRIGGER trg_1;
23217
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23218
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23219
 
f_charbig = 'just inserted'
23220
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23221
 
DELETE FROM t0_aux
23222
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23223
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23224
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23225
 
'just inserted' FROM t0_template
23226
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23227
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
23228
 
BEGIN
23229
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23230
 
f_charbig = 'updated by trigger'
23231
 
      WHERE f_int1 = - old.f_int1;
23232
 
END|
23233
 
DELETE FROM t0_aux
23234
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23235
 
        
23236
 
# check trigger-8 success:      1
23237
 
DROP TRIGGER trg_1;
23238
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23239
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23240
 
f_charbig = 'just inserted'
23241
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23242
 
DELETE FROM t0_aux
23243
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23244
 
DELETE FROM t1
23245
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23246
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23247
 
BEGIN
23248
 
SET new.f_int1 = old.f_int1 + @max_row,
23249
 
new.f_int2 = old.f_int2 - @max_row,
23250
 
new.f_charbig = '####updated per update trigger####';
23251
 
END|
23252
 
UPDATE t1
23253
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23254
 
f_charbig = '####updated per update statement itself####';
23255
 
        
23256
 
# check trigger-9 success:      1
23257
 
DROP TRIGGER trg_2;
23258
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23259
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23260
 
f_charbig = CONCAT('===',f_char1,'===');
23261
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23262
 
BEGIN
23263
 
SET new.f_int1 = new.f_int1 + @max_row,
23264
 
new.f_int2 = new.f_int2 - @max_row,
23265
 
new.f_charbig = '####updated per update trigger####';
23266
 
END|
23267
 
UPDATE t1
23268
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23269
 
f_charbig = '####updated per update statement itself####';
23270
 
        
23271
 
# check trigger-10 success:     1
23272
 
DROP TRIGGER trg_2;
23273
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23274
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23275
 
f_charbig = CONCAT('===',f_char1,'===');
23276
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23277
 
BEGIN
23278
 
SET new.f_int1 = @my_max1 + @counter,
23279
 
new.f_int2 = @my_min2 - @counter,
23280
 
new.f_charbig = '####updated per insert trigger####';
23281
 
SET @counter = @counter + 1;
23282
 
END|
23283
 
SET @counter = 1;
23284
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23285
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23286
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23287
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23288
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23289
 
ORDER BY f_int1;
23290
 
DROP TRIGGER trg_3;
23291
 
        
23292
 
# check trigger-11 success:     1
23293
 
DELETE FROM t1
23294
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23295
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23296
 
AND f_charbig = '####updated per insert trigger####';
23297
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23298
 
BEGIN
23299
 
SET new.f_int1 = @my_max1 + @counter,
23300
 
new.f_int2 = @my_min2 - @counter,
23301
 
new.f_charbig = '####updated per insert trigger####';
23302
 
SET @counter = @counter + 1;
23303
 
END|
23304
 
SET @counter = 1;
23305
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23306
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
23307
 
SELECT CAST(f_int1 AS CHAR),
23308
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23309
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23310
 
ORDER BY f_int1;
23311
 
DROP TRIGGER trg_3;
23312
 
        
23313
 
# check trigger-12 success:     1
23314
 
DELETE FROM t1
23315
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23316
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23317
 
AND f_charbig = '####updated per insert trigger####';
23318
 
ANALYZE  TABLE t1;
23319
 
Table   Op      Msg_type        Msg_text
23320
 
test.t1 analyze status  OK
23321
 
CHECK    TABLE t1 EXTENDED;
23322
 
Table   Op      Msg_type        Msg_text
23323
 
test.t1 check   status  OK
23324
 
CHECKSUM TABLE t1 EXTENDED;
23325
 
Table   Checksum
23326
 
test.t1 <some_value>
23327
 
OPTIMIZE TABLE t1;
23328
 
Table   Op      Msg_type        Msg_text
23329
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
23330
 
test.t1 optimize        status  OK
23331
 
# check layout success:    1
23332
 
REPAIR   TABLE t1 EXTENDED;
23333
 
Table   Op      Msg_type        Msg_text
23334
 
test.t1 repair  note    The storage engine for the table doesn't support repair
23335
 
# check layout success:    1
23336
 
TRUNCATE t1;
23337
 
        
23338
 
# check TRUNCATE success:       1
23339
 
# check layout success:    1
23340
 
# End usability test (inc/partition_check.inc)
23341
 
DROP TABLE t1;
23342
 
DROP TABLE IF EXISTS t1;
23343
 
CREATE TABLE t1 (
23344
 
f_int1 INTEGER,
23345
 
f_int2 INTEGER,
23346
 
f_char1 CHAR(20),
23347
 
f_char2 CHAR(20),
23348
 
f_charbig VARCHAR(1000)
23349
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
23350
 
)
23351
 
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
23352
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23353
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
23354
 
# Start usability test (inc/partition_check.inc)
23355
 
create_command
23356
 
SHOW CREATE TABLE t1;
23357
 
Table   Create Table
23358
 
t1      CREATE TABLE `t1` (
23359
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
23360
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
23361
 
  `f_char1` char(20) DEFAULT NULL,
23362
 
  `f_char2` char(20) DEFAULT NULL,
23363
 
  `f_charbig` varchar(1000) DEFAULT NULL,
23364
 
  PRIMARY KEY (`f_int1`,`f_int2`),
23365
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
23366
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
23367
 
 
23368
 
unified filelist
23369
 
t1.frm
23370
 
t1.par
23371
 
 
23372
 
# check prerequisites-1 success:    1
23373
 
# check COUNT(*) success:    1
23374
 
# check MIN/MAX(f_int1) success:    1
23375
 
# check MIN/MAX(f_int2) success:    1
23376
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23377
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23378
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
23379
 
WHERE f_int1 IN (2,3);
23380
 
ERROR 23000: Can't write; duplicate key in table 't1'
23381
 
# check prerequisites-3 success:    1
23382
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
23383
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23384
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
23385
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
23386
 
WHERE f_int1 IN (2,3);
23387
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
23388
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23389
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
23390
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
23391
 
WHERE f_int1 IN (2,3);
23392
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
23393
 
# check read via f_int1 success: 1
23394
 
# check read via f_int2 success: 1
23395
 
        
23396
 
# check multiple-1 success:     1
23397
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
23398
 
        
23399
 
# check multiple-2 success:     1
23400
 
INSERT INTO t1 SELECT * FROM t0_template
23401
 
WHERE MOD(f_int1,3) = 0;
23402
 
        
23403
 
# check multiple-3 success:     1
23404
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
23405
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
23406
 
AND @max_row_div2 + @max_row_div4;
23407
 
        
23408
 
# check multiple-4 success:     1
23409
 
DELETE FROM t1
23410
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
23411
 
AND @max_row_div2 + @max_row_div4 + @max_row;
23412
 
        
23413
 
# check multiple-5 success:     1
23414
 
SELECT COUNT(*) INTO @try_count FROM t0_template
23415
 
WHERE MOD(f_int1,3) = 0
23416
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23417
 
SELECT COUNT(*) INTO @clash_count
23418
 
FROM t1 INNER JOIN t0_template USING(f_int1)
23419
 
WHERE MOD(f_int1,3) = 0
23420
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23421
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
23422
 
INSERT INTO t1
23423
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
23424
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23425
 
f_charbig = '#SINGLE#';
23426
 
        
23427
 
# check single-1 success:       1
23428
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
23429
 
INSERT INTO t1
23430
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
23431
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23432
 
f_charbig = '#SINGLE#';
23433
 
        
23434
 
# check single-2 success:       1
23435
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
23436
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
23437
 
UPDATE t1 SET f_int1 = @cur_value2
23438
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
23439
 
        
23440
 
# check single-3 success:       1
23441
 
SET @cur_value1= -1;
23442
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
23443
 
UPDATE t1 SET f_int1 = @cur_value1
23444
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
23445
 
        
23446
 
# check single-4 success:       1
23447
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
23448
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
23449
 
        
23450
 
# check single-5 success:       1
23451
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
23452
 
        
23453
 
# check single-6 success:       1
23454
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
23455
 
        
23456
 
# check single-7 success:       1
23457
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
23458
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
23459
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
23460
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
23461
 
f_charbig = '#NULL#';
23462
 
INSERT INTO t1
23463
 
SET f_int1 = NULL , f_int2 = -@max_row,
23464
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
23465
 
f_charbig = '#NULL#';
23466
 
ERROR 23000: Column 'f_int1' cannot be null
23467
 
# check null success:    1
23468
 
DELETE FROM t1
23469
 
WHERE f_int1 = 0 AND f_int2 = 0
23470
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
23471
 
AND f_charbig = '#NULL#';
23472
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23473
 
SELECT f_int1, f_int1, '', '', 'was inserted'
23474
 
   FROM t0_template source_tab
23475
 
WHERE MOD(f_int1,3) = 0
23476
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
23477
 
ON DUPLICATE KEY
23478
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
23479
 
f_int2 = 2 * @max_row + source_tab.f_int1,
23480
 
f_charbig = 'was updated';
23481
 
        
23482
 
# check unique-1-a success:     1
23483
 
        
23484
 
# check unique-1-b success:     1
23485
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
23486
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23487
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23488
 
f_charbig = CONCAT('===',f_char1,'===')
23489
 
WHERE f_charbig = 'was updated';
23490
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23491
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
23492
 
   FROM t0_template source_tab
23493
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23494
 
        
23495
 
# check replace success:        1
23496
 
DELETE FROM t1
23497
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
23498
 
DELETE FROM t1
23499
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
23500
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
23501
 
UPDATE t1 SET f_int2 = f_int1,
23502
 
f_char1 = CAST(f_int1 AS CHAR),
23503
 
f_char2 = CAST(f_int1 AS CHAR),
23504
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
23505
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
23506
 
SET AUTOCOMMIT= 0;
23507
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23508
 
SELECT f_int1, f_int1, '', '', 'was inserted'
23509
 
FROM t0_template source_tab
23510
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23511
 
        
23512
 
# check transactions-1 success:         1
23513
 
COMMIT WORK;
23514
 
        
23515
 
# check transactions-2 success:         1
23516
 
ROLLBACK WORK;
23517
 
        
23518
 
# check transactions-3 success:         1
23519
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
23520
 
COMMIT WORK;
23521
 
ROLLBACK WORK;
23522
 
        
23523
 
# check transactions-4 success:         1
23524
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23525
 
SELECT f_int1, f_int1, '', '', 'was inserted'
23526
 
FROM t0_template source_tab
23527
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23528
 
        
23529
 
# check transactions-5 success:         1
23530
 
ROLLBACK WORK;
23531
 
        
23532
 
# check transactions-6 success:         1
23533
 
# INFO: Storage engine used for t1 seems to be transactional.
23534
 
COMMIT;
23535
 
        
23536
 
# check transactions-7 success:         1
23537
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
23538
 
COMMIT WORK;
23539
 
SET @@session.sql_mode = 'traditional';
23540
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
23541
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23542
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
23543
 
'', '', 'was inserted' FROM t0_template
23544
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23545
 
ERROR 22012: Division by 0
23546
 
COMMIT;
23547
 
        
23548
 
# check transactions-8 success:         1
23549
 
# INFO: Storage engine used for t1 seems to be able to revert
23550
 
#       changes made by the failing statement.
23551
 
SET @@session.sql_mode = '';
23552
 
SET AUTOCOMMIT= 1;
23553
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
23554
 
COMMIT WORK;
23555
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
23556
 
        
23557
 
# check special-1 success:      1
23558
 
UPDATE t1 SET f_charbig = '';
23559
 
        
23560
 
# check special-2 success:      1
23561
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
23562
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23563
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
23564
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23565
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23566
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23567
 
'just inserted' FROM t0_template
23568
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23569
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
23570
 
BEGIN
23571
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23572
 
f_charbig = 'updated by trigger'
23573
 
      WHERE f_int1 = new.f_int1;
23574
 
END|
23575
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23576
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23577
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23578
 
        
23579
 
# check trigger-1 success:      1
23580
 
DROP TRIGGER trg_1;
23581
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23582
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23583
 
f_charbig = 'just inserted'
23584
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23585
 
DELETE FROM t0_aux
23586
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23587
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23588
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23589
 
'just inserted' FROM t0_template
23590
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23591
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
23592
 
BEGIN
23593
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23594
 
f_charbig = 'updated by trigger'
23595
 
      WHERE f_int1 = new.f_int1;
23596
 
END|
23597
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23598
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23599
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23600
 
        
23601
 
# check trigger-2 success:      1
23602
 
DROP TRIGGER trg_1;
23603
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23604
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23605
 
f_charbig = 'just inserted'
23606
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23607
 
DELETE FROM t0_aux
23608
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23609
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23610
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23611
 
'just inserted' FROM t0_template
23612
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23613
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23614
 
BEGIN
23615
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23616
 
f_charbig = 'updated by trigger'
23617
 
      WHERE f_int1 = new.f_int1;
23618
 
END|
23619
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23620
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23621
 
        
23622
 
# check trigger-3 success:      1
23623
 
DROP TRIGGER trg_1;
23624
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23625
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23626
 
f_charbig = 'just inserted'
23627
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23628
 
DELETE FROM t0_aux
23629
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23630
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23631
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23632
 
'just inserted' FROM t0_template
23633
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23634
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23635
 
BEGIN
23636
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23637
 
f_charbig = 'updated by trigger'
23638
 
      WHERE f_int1 = - old.f_int1;
23639
 
END|
23640
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23641
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23642
 
        
23643
 
# check trigger-4 success:      1
23644
 
DROP TRIGGER trg_1;
23645
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23646
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23647
 
f_charbig = 'just inserted'
23648
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23649
 
DELETE FROM t0_aux
23650
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23651
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23652
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23653
 
'just inserted' FROM t0_template
23654
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23655
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
23656
 
BEGIN
23657
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23658
 
f_charbig = 'updated by trigger'
23659
 
      WHERE f_int1 = new.f_int1;
23660
 
END|
23661
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23662
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23663
 
        
23664
 
# check trigger-5 success:      1
23665
 
DROP TRIGGER trg_1;
23666
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23667
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23668
 
f_charbig = 'just inserted'
23669
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23670
 
DELETE FROM t0_aux
23671
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23672
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23673
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23674
 
'just inserted' FROM t0_template
23675
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23676
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
23677
 
BEGIN
23678
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23679
 
f_charbig = 'updated by trigger'
23680
 
      WHERE f_int1 = - old.f_int1;
23681
 
END|
23682
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23683
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23684
 
        
23685
 
# check trigger-6 success:      1
23686
 
DROP TRIGGER trg_1;
23687
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23688
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23689
 
f_charbig = 'just inserted'
23690
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23691
 
DELETE FROM t0_aux
23692
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23693
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23694
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23695
 
'just inserted' FROM t0_template
23696
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23697
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
23698
 
BEGIN
23699
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23700
 
f_charbig = 'updated by trigger'
23701
 
      WHERE f_int1 = - old.f_int1;
23702
 
END|
23703
 
DELETE FROM t0_aux
23704
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23705
 
        
23706
 
# check trigger-7 success:      1
23707
 
DROP TRIGGER trg_1;
23708
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23709
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23710
 
f_charbig = 'just inserted'
23711
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23712
 
DELETE FROM t0_aux
23713
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23714
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23715
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23716
 
'just inserted' FROM t0_template
23717
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23718
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
23719
 
BEGIN
23720
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23721
 
f_charbig = 'updated by trigger'
23722
 
      WHERE f_int1 = - old.f_int1;
23723
 
END|
23724
 
DELETE FROM t0_aux
23725
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23726
 
        
23727
 
# check trigger-8 success:      1
23728
 
DROP TRIGGER trg_1;
23729
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23730
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23731
 
f_charbig = 'just inserted'
23732
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23733
 
DELETE FROM t0_aux
23734
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23735
 
DELETE FROM t1
23736
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23737
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23738
 
BEGIN
23739
 
SET new.f_int1 = old.f_int1 + @max_row,
23740
 
new.f_int2 = old.f_int2 - @max_row,
23741
 
new.f_charbig = '####updated per update trigger####';
23742
 
END|
23743
 
UPDATE t1
23744
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23745
 
f_charbig = '####updated per update statement itself####';
23746
 
        
23747
 
# check trigger-9 success:      1
23748
 
DROP TRIGGER trg_2;
23749
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23750
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23751
 
f_charbig = CONCAT('===',f_char1,'===');
23752
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23753
 
BEGIN
23754
 
SET new.f_int1 = new.f_int1 + @max_row,
23755
 
new.f_int2 = new.f_int2 - @max_row,
23756
 
new.f_charbig = '####updated per update trigger####';
23757
 
END|
23758
 
UPDATE t1
23759
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23760
 
f_charbig = '####updated per update statement itself####';
23761
 
        
23762
 
# check trigger-10 success:     1
23763
 
DROP TRIGGER trg_2;
23764
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23765
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23766
 
f_charbig = CONCAT('===',f_char1,'===');
23767
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23768
 
BEGIN
23769
 
SET new.f_int1 = @my_max1 + @counter,
23770
 
new.f_int2 = @my_min2 - @counter,
23771
 
new.f_charbig = '####updated per insert trigger####';
23772
 
SET @counter = @counter + 1;
23773
 
END|
23774
 
SET @counter = 1;
23775
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23776
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23777
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23778
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23779
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23780
 
ORDER BY f_int1;
23781
 
DROP TRIGGER trg_3;
23782
 
        
23783
 
# check trigger-11 success:     1
23784
 
DELETE FROM t1
23785
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23786
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23787
 
AND f_charbig = '####updated per insert trigger####';
23788
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23789
 
BEGIN
23790
 
SET new.f_int1 = @my_max1 + @counter,
23791
 
new.f_int2 = @my_min2 - @counter,
23792
 
new.f_charbig = '####updated per insert trigger####';
23793
 
SET @counter = @counter + 1;
23794
 
END|
23795
 
SET @counter = 1;
23796
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23797
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
23798
 
SELECT CAST(f_int1 AS CHAR),
23799
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23800
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23801
 
ORDER BY f_int1;
23802
 
DROP TRIGGER trg_3;
23803
 
        
23804
 
# check trigger-12 success:     1
23805
 
DELETE FROM t1
23806
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23807
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23808
 
AND f_charbig = '####updated per insert trigger####';
23809
 
ANALYZE  TABLE t1;
23810
 
Table   Op      Msg_type        Msg_text
23811
 
test.t1 analyze status  OK
23812
 
CHECK    TABLE t1 EXTENDED;
23813
 
Table   Op      Msg_type        Msg_text
23814
 
test.t1 check   status  OK
23815
 
CHECKSUM TABLE t1 EXTENDED;
23816
 
Table   Checksum
23817
 
test.t1 <some_value>
23818
 
OPTIMIZE TABLE t1;
23819
 
Table   Op      Msg_type        Msg_text
23820
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
23821
 
test.t1 optimize        status  OK
23822
 
# check layout success:    1
23823
 
REPAIR   TABLE t1 EXTENDED;
23824
 
Table   Op      Msg_type        Msg_text
23825
 
test.t1 repair  note    The storage engine for the table doesn't support repair
23826
 
# check layout success:    1
23827
 
TRUNCATE t1;
23828
 
        
23829
 
# check TRUNCATE success:       1
23830
 
# check layout success:    1
23831
 
# End usability test (inc/partition_check.inc)
23832
 
DROP TABLE t1;
23833
 
CREATE TABLE t1 (
23834
 
f_int1 INTEGER,
23835
 
f_int2 INTEGER,
23836
 
f_char1 CHAR(20),
23837
 
f_char2 CHAR(20),
23838
 
f_charbig VARCHAR(1000)
23839
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
23840
 
)
23841
 
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
23842
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23843
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
23844
 
# Start usability test (inc/partition_check.inc)
23845
 
create_command
23846
 
SHOW CREATE TABLE t1;
23847
 
Table   Create Table
23848
 
t1      CREATE TABLE `t1` (
23849
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
23850
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
23851
 
  `f_char1` char(20) DEFAULT NULL,
23852
 
  `f_char2` char(20) DEFAULT NULL,
23853
 
  `f_charbig` varchar(1000) DEFAULT NULL,
23854
 
  PRIMARY KEY (`f_int1`,`f_int2`),
23855
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
23856
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
23857
 
 
23858
 
unified filelist
23859
 
t1.frm
23860
 
t1.par
23861
 
 
23862
 
# check prerequisites-1 success:    1
23863
 
# check COUNT(*) success:    1
23864
 
# check MIN/MAX(f_int1) success:    1
23865
 
# check MIN/MAX(f_int2) success:    1
23866
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23867
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23868
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
23869
 
WHERE f_int1 IN (2,3);
23870
 
ERROR 23000: Can't write; duplicate key in table 't1'
23871
 
# check prerequisites-3 success:    1
23872
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
23873
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23874
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
23875
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
23876
 
WHERE f_int1 IN (2,3);
23877
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
23878
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23879
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
23880
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
23881
 
WHERE f_int1 IN (2,3);
23882
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
23883
 
# check read via f_int1 success: 1
23884
 
# check read via f_int2 success: 1
23885
 
        
23886
 
# check multiple-1 success:     1
23887
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
23888
 
        
23889
 
# check multiple-2 success:     1
23890
 
INSERT INTO t1 SELECT * FROM t0_template
23891
 
WHERE MOD(f_int1,3) = 0;
23892
 
        
23893
 
# check multiple-3 success:     1
23894
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
23895
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
23896
 
AND @max_row_div2 + @max_row_div4;
23897
 
        
23898
 
# check multiple-4 success:     1
23899
 
DELETE FROM t1
23900
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
23901
 
AND @max_row_div2 + @max_row_div4 + @max_row;
23902
 
        
23903
 
# check multiple-5 success:     1
23904
 
SELECT COUNT(*) INTO @try_count FROM t0_template
23905
 
WHERE MOD(f_int1,3) = 0
23906
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23907
 
SELECT COUNT(*) INTO @clash_count
23908
 
FROM t1 INNER JOIN t0_template USING(f_int1)
23909
 
WHERE MOD(f_int1,3) = 0
23910
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23911
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
23912
 
INSERT INTO t1
23913
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
23914
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23915
 
f_charbig = '#SINGLE#';
23916
 
        
23917
 
# check single-1 success:       1
23918
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
23919
 
INSERT INTO t1
23920
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
23921
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23922
 
f_charbig = '#SINGLE#';
23923
 
        
23924
 
# check single-2 success:       1
23925
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
23926
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
23927
 
UPDATE t1 SET f_int1 = @cur_value2
23928
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
23929
 
        
23930
 
# check single-3 success:       1
23931
 
SET @cur_value1= -1;
23932
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
23933
 
UPDATE t1 SET f_int1 = @cur_value1
23934
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
23935
 
        
23936
 
# check single-4 success:       1
23937
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
23938
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
23939
 
        
23940
 
# check single-5 success:       1
23941
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
23942
 
        
23943
 
# check single-6 success:       1
23944
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
23945
 
        
23946
 
# check single-7 success:       1
23947
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
23948
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
23949
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
23950
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
23951
 
f_charbig = '#NULL#';
23952
 
INSERT INTO t1
23953
 
SET f_int1 = NULL , f_int2 = -@max_row,
23954
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
23955
 
f_charbig = '#NULL#';
23956
 
ERROR 23000: Column 'f_int1' cannot be null
23957
 
# check null success:    1
23958
 
DELETE FROM t1
23959
 
WHERE f_int1 = 0 AND f_int2 = 0
23960
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
23961
 
AND f_charbig = '#NULL#';
23962
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23963
 
SELECT f_int1, f_int1, '', '', 'was inserted'
23964
 
   FROM t0_template source_tab
23965
 
WHERE MOD(f_int1,3) = 0
23966
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
23967
 
ON DUPLICATE KEY
23968
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
23969
 
f_int2 = 2 * @max_row + source_tab.f_int1,
23970
 
f_charbig = 'was updated';
23971
 
        
23972
 
# check unique-1-a success:     1
23973
 
        
23974
 
# check unique-1-b success:     1
23975
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
23976
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23977
 
f_int2 = CAST(f_char1 AS SIGNED INT),
23978
 
f_charbig = CONCAT('===',f_char1,'===')
23979
 
WHERE f_charbig = 'was updated';
23980
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23981
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
23982
 
   FROM t0_template source_tab
23983
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23984
 
        
23985
 
# check replace success:        1
23986
 
DELETE FROM t1
23987
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
23988
 
DELETE FROM t1
23989
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
23990
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
23991
 
UPDATE t1 SET f_int2 = f_int1,
23992
 
f_char1 = CAST(f_int1 AS CHAR),
23993
 
f_char2 = CAST(f_int1 AS CHAR),
23994
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
23995
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
23996
 
SET AUTOCOMMIT= 0;
23997
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23998
 
SELECT f_int1, f_int1, '', '', 'was inserted'
23999
 
FROM t0_template source_tab
24000
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24001
 
        
24002
 
# check transactions-1 success:         1
24003
 
COMMIT WORK;
24004
 
        
24005
 
# check transactions-2 success:         1
24006
 
ROLLBACK WORK;
24007
 
        
24008
 
# check transactions-3 success:         1
24009
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
24010
 
COMMIT WORK;
24011
 
ROLLBACK WORK;
24012
 
        
24013
 
# check transactions-4 success:         1
24014
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24015
 
SELECT f_int1, f_int1, '', '', 'was inserted'
24016
 
FROM t0_template source_tab
24017
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24018
 
        
24019
 
# check transactions-5 success:         1
24020
 
ROLLBACK WORK;
24021
 
        
24022
 
# check transactions-6 success:         1
24023
 
# INFO: Storage engine used for t1 seems to be transactional.
24024
 
COMMIT;
24025
 
        
24026
 
# check transactions-7 success:         1
24027
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
24028
 
COMMIT WORK;
24029
 
SET @@session.sql_mode = 'traditional';
24030
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
24031
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24032
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
24033
 
'', '', 'was inserted' FROM t0_template
24034
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24035
 
ERROR 22012: Division by 0
24036
 
COMMIT;
24037
 
        
24038
 
# check transactions-8 success:         1
24039
 
# INFO: Storage engine used for t1 seems to be able to revert
24040
 
#       changes made by the failing statement.
24041
 
SET @@session.sql_mode = '';
24042
 
SET AUTOCOMMIT= 1;
24043
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
24044
 
COMMIT WORK;
24045
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
24046
 
        
24047
 
# check special-1 success:      1
24048
 
UPDATE t1 SET f_charbig = '';
24049
 
        
24050
 
# check special-2 success:      1
24051
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
24052
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24053
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
24054
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24055
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24056
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24057
 
'just inserted' FROM t0_template
24058
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24059
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
24060
 
BEGIN
24061
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24062
 
f_charbig = 'updated by trigger'
24063
 
      WHERE f_int1 = new.f_int1;
24064
 
END|
24065
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24066
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24067
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24068
 
        
24069
 
# check trigger-1 success:      1
24070
 
DROP TRIGGER trg_1;
24071
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24072
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24073
 
f_charbig = 'just inserted'
24074
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24075
 
DELETE FROM t0_aux
24076
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24077
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24078
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24079
 
'just inserted' FROM t0_template
24080
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24081
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
24082
 
BEGIN
24083
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24084
 
f_charbig = 'updated by trigger'
24085
 
      WHERE f_int1 = new.f_int1;
24086
 
END|
24087
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24088
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24089
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24090
 
        
24091
 
# check trigger-2 success:      1
24092
 
DROP TRIGGER trg_1;
24093
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24094
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24095
 
f_charbig = 'just inserted'
24096
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24097
 
DELETE FROM t0_aux
24098
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24099
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24100
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24101
 
'just inserted' FROM t0_template
24102
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24103
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24104
 
BEGIN
24105
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24106
 
f_charbig = 'updated by trigger'
24107
 
      WHERE f_int1 = new.f_int1;
24108
 
END|
24109
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24110
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24111
 
        
24112
 
# check trigger-3 success:      1
24113
 
DROP TRIGGER trg_1;
24114
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24115
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24116
 
f_charbig = 'just inserted'
24117
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24118
 
DELETE FROM t0_aux
24119
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24120
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24121
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24122
 
'just inserted' FROM t0_template
24123
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24124
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24125
 
BEGIN
24126
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24127
 
f_charbig = 'updated by trigger'
24128
 
      WHERE f_int1 = - old.f_int1;
24129
 
END|
24130
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24131
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24132
 
        
24133
 
# check trigger-4 success:      1
24134
 
DROP TRIGGER trg_1;
24135
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24136
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24137
 
f_charbig = 'just inserted'
24138
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24139
 
DELETE FROM t0_aux
24140
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24141
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24142
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24143
 
'just inserted' FROM t0_template
24144
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24145
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24146
 
BEGIN
24147
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24148
 
f_charbig = 'updated by trigger'
24149
 
      WHERE f_int1 = new.f_int1;
24150
 
END|
24151
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24152
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24153
 
        
24154
 
# check trigger-5 success:      1
24155
 
DROP TRIGGER trg_1;
24156
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24157
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24158
 
f_charbig = 'just inserted'
24159
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24160
 
DELETE FROM t0_aux
24161
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24162
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24163
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24164
 
'just inserted' FROM t0_template
24165
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24166
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24167
 
BEGIN
24168
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24169
 
f_charbig = 'updated by trigger'
24170
 
      WHERE f_int1 = - old.f_int1;
24171
 
END|
24172
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24173
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24174
 
        
24175
 
# check trigger-6 success:      1
24176
 
DROP TRIGGER trg_1;
24177
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24178
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24179
 
f_charbig = 'just inserted'
24180
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24181
 
DELETE FROM t0_aux
24182
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24183
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24184
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24185
 
'just inserted' FROM t0_template
24186
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24187
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
24188
 
BEGIN
24189
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24190
 
f_charbig = 'updated by trigger'
24191
 
      WHERE f_int1 = - old.f_int1;
24192
 
END|
24193
 
DELETE FROM t0_aux
24194
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24195
 
        
24196
 
# check trigger-7 success:      1
24197
 
DROP TRIGGER trg_1;
24198
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24199
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24200
 
f_charbig = 'just inserted'
24201
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24202
 
DELETE FROM t0_aux
24203
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24204
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24205
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24206
 
'just inserted' FROM t0_template
24207
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24208
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
24209
 
BEGIN
24210
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24211
 
f_charbig = 'updated by trigger'
24212
 
      WHERE f_int1 = - old.f_int1;
24213
 
END|
24214
 
DELETE FROM t0_aux
24215
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24216
 
        
24217
 
# check trigger-8 success:      1
24218
 
DROP TRIGGER trg_1;
24219
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24220
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24221
 
f_charbig = 'just inserted'
24222
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24223
 
DELETE FROM t0_aux
24224
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24225
 
DELETE FROM t1
24226
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24227
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24228
 
BEGIN
24229
 
SET new.f_int1 = old.f_int1 + @max_row,
24230
 
new.f_int2 = old.f_int2 - @max_row,
24231
 
new.f_charbig = '####updated per update trigger####';
24232
 
END|
24233
 
UPDATE t1
24234
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24235
 
f_charbig = '####updated per update statement itself####';
24236
 
        
24237
 
# check trigger-9 success:      1
24238
 
DROP TRIGGER trg_2;
24239
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24240
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24241
 
f_charbig = CONCAT('===',f_char1,'===');
24242
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24243
 
BEGIN
24244
 
SET new.f_int1 = new.f_int1 + @max_row,
24245
 
new.f_int2 = new.f_int2 - @max_row,
24246
 
new.f_charbig = '####updated per update trigger####';
24247
 
END|
24248
 
UPDATE t1
24249
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24250
 
f_charbig = '####updated per update statement itself####';
24251
 
        
24252
 
# check trigger-10 success:     1
24253
 
DROP TRIGGER trg_2;
24254
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24255
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24256
 
f_charbig = CONCAT('===',f_char1,'===');
24257
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24258
 
BEGIN
24259
 
SET new.f_int1 = @my_max1 + @counter,
24260
 
new.f_int2 = @my_min2 - @counter,
24261
 
new.f_charbig = '####updated per insert trigger####';
24262
 
SET @counter = @counter + 1;
24263
 
END|
24264
 
SET @counter = 1;
24265
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24266
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24267
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24268
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24269
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24270
 
ORDER BY f_int1;
24271
 
DROP TRIGGER trg_3;
24272
 
        
24273
 
# check trigger-11 success:     1
24274
 
DELETE FROM t1
24275
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24276
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24277
 
AND f_charbig = '####updated per insert trigger####';
24278
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24279
 
BEGIN
24280
 
SET new.f_int1 = @my_max1 + @counter,
24281
 
new.f_int2 = @my_min2 - @counter,
24282
 
new.f_charbig = '####updated per insert trigger####';
24283
 
SET @counter = @counter + 1;
24284
 
END|
24285
 
SET @counter = 1;
24286
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24287
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
24288
 
SELECT CAST(f_int1 AS CHAR),
24289
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24290
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24291
 
ORDER BY f_int1;
24292
 
DROP TRIGGER trg_3;
24293
 
        
24294
 
# check trigger-12 success:     1
24295
 
DELETE FROM t1
24296
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24297
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24298
 
AND f_charbig = '####updated per insert trigger####';
24299
 
ANALYZE  TABLE t1;
24300
 
Table   Op      Msg_type        Msg_text
24301
 
test.t1 analyze status  OK
24302
 
CHECK    TABLE t1 EXTENDED;
24303
 
Table   Op      Msg_type        Msg_text
24304
 
test.t1 check   status  OK
24305
 
CHECKSUM TABLE t1 EXTENDED;
24306
 
Table   Checksum
24307
 
test.t1 <some_value>
24308
 
OPTIMIZE TABLE t1;
24309
 
Table   Op      Msg_type        Msg_text
24310
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
24311
 
test.t1 optimize        status  OK
24312
 
# check layout success:    1
24313
 
REPAIR   TABLE t1 EXTENDED;
24314
 
Table   Op      Msg_type        Msg_text
24315
 
test.t1 repair  note    The storage engine for the table doesn't support repair
24316
 
# check layout success:    1
24317
 
TRUNCATE t1;
24318
 
        
24319
 
# check TRUNCATE success:       1
24320
 
# check layout success:    1
24321
 
# End usability test (inc/partition_check.inc)
24322
 
DROP TABLE t1;
24323
 
CREATE TABLE t1 (
24324
 
f_int1 INTEGER,
24325
 
f_int2 INTEGER,
24326
 
f_char1 CHAR(20),
24327
 
f_char2 CHAR(20),
24328
 
f_charbig VARCHAR(1000)
24329
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
24330
 
)
24331
 
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
24332
 
(PARTITION part_3 VALUES IN (-3),
24333
 
PARTITION part_2 VALUES IN (-2),
24334
 
PARTITION part_1 VALUES IN (-1),
24335
 
PARTITION part_N VALUES IN (NULL),
24336
 
PARTITION part0 VALUES IN (0),
24337
 
PARTITION part1 VALUES IN (1),
24338
 
PARTITION part2 VALUES IN (2),
24339
 
PARTITION part3 VALUES IN (3));
24340
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24341
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
24342
 
# Start usability test (inc/partition_check.inc)
24343
 
create_command
24344
 
SHOW CREATE TABLE t1;
24345
 
Table   Create Table
24346
 
t1      CREATE TABLE `t1` (
24347
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
24348
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
24349
 
  `f_char1` char(20) DEFAULT NULL,
24350
 
  `f_char2` char(20) DEFAULT NULL,
24351
 
  `f_charbig` varchar(1000) DEFAULT NULL,
24352
 
  PRIMARY KEY (`f_int1`,`f_int2`),
24353
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
24354
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
24355
 
 
24356
 
unified filelist
24357
 
t1.frm
24358
 
t1.par
24359
 
 
24360
 
# check prerequisites-1 success:    1
24361
 
# check COUNT(*) success:    1
24362
 
# check MIN/MAX(f_int1) success:    1
24363
 
# check MIN/MAX(f_int2) success:    1
24364
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24365
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24366
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
24367
 
WHERE f_int1 IN (2,3);
24368
 
ERROR 23000: Can't write; duplicate key in table 't1'
24369
 
# check prerequisites-3 success:    1
24370
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
24371
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24372
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
24373
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
24374
 
WHERE f_int1 IN (2,3);
24375
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
24376
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24377
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
24378
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
24379
 
WHERE f_int1 IN (2,3);
24380
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
24381
 
# check read via f_int1 success: 1
24382
 
# check read via f_int2 success: 1
24383
 
        
24384
 
# check multiple-1 success:     1
24385
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
24386
 
        
24387
 
# check multiple-2 success:     1
24388
 
INSERT INTO t1 SELECT * FROM t0_template
24389
 
WHERE MOD(f_int1,3) = 0;
24390
 
        
24391
 
# check multiple-3 success:     1
24392
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
24393
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
24394
 
AND @max_row_div2 + @max_row_div4;
24395
 
        
24396
 
# check multiple-4 success:     1
24397
 
DELETE FROM t1
24398
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
24399
 
AND @max_row_div2 + @max_row_div4 + @max_row;
24400
 
        
24401
 
# check multiple-5 success:     1
24402
 
SELECT COUNT(*) INTO @try_count FROM t0_template
24403
 
WHERE MOD(f_int1,3) = 0
24404
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24405
 
SELECT COUNT(*) INTO @clash_count
24406
 
FROM t1 INNER JOIN t0_template USING(f_int1)
24407
 
WHERE MOD(f_int1,3) = 0
24408
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24409
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
24410
 
INSERT INTO t1
24411
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
24412
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24413
 
f_charbig = '#SINGLE#';
24414
 
        
24415
 
# check single-1 success:       1
24416
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
24417
 
INSERT INTO t1
24418
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
24419
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24420
 
f_charbig = '#SINGLE#';
24421
 
        
24422
 
# check single-2 success:       1
24423
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
24424
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
24425
 
UPDATE t1 SET f_int1 = @cur_value2
24426
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
24427
 
        
24428
 
# check single-3 success:       1
24429
 
SET @cur_value1= -1;
24430
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
24431
 
UPDATE t1 SET f_int1 = @cur_value1
24432
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
24433
 
        
24434
 
# check single-4 success:       1
24435
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
24436
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
24437
 
        
24438
 
# check single-5 success:       1
24439
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
24440
 
        
24441
 
# check single-6 success:       1
24442
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
24443
 
        
24444
 
# check single-7 success:       1
24445
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
24446
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
24447
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
24448
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
24449
 
f_charbig = '#NULL#';
24450
 
INSERT INTO t1
24451
 
SET f_int1 = NULL , f_int2 = -@max_row,
24452
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
24453
 
f_charbig = '#NULL#';
24454
 
ERROR 23000: Column 'f_int1' cannot be null
24455
 
# check null success:    1
24456
 
DELETE FROM t1
24457
 
WHERE f_int1 = 0 AND f_int2 = 0
24458
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
24459
 
AND f_charbig = '#NULL#';
24460
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24461
 
SELECT f_int1, f_int1, '', '', 'was inserted'
24462
 
   FROM t0_template source_tab
24463
 
WHERE MOD(f_int1,3) = 0
24464
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
24465
 
ON DUPLICATE KEY
24466
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
24467
 
f_int2 = 2 * @max_row + source_tab.f_int1,
24468
 
f_charbig = 'was updated';
24469
 
        
24470
 
# check unique-1-a success:     1
24471
 
        
24472
 
# check unique-1-b success:     1
24473
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
24474
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24475
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24476
 
f_charbig = CONCAT('===',f_char1,'===')
24477
 
WHERE f_charbig = 'was updated';
24478
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24479
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
24480
 
   FROM t0_template source_tab
24481
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24482
 
        
24483
 
# check replace success:        1
24484
 
DELETE FROM t1
24485
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
24486
 
DELETE FROM t1
24487
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
24488
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
24489
 
UPDATE t1 SET f_int2 = f_int1,
24490
 
f_char1 = CAST(f_int1 AS CHAR),
24491
 
f_char2 = CAST(f_int1 AS CHAR),
24492
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
24493
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
24494
 
SET AUTOCOMMIT= 0;
24495
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24496
 
SELECT f_int1, f_int1, '', '', 'was inserted'
24497
 
FROM t0_template source_tab
24498
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24499
 
        
24500
 
# check transactions-1 success:         1
24501
 
COMMIT WORK;
24502
 
        
24503
 
# check transactions-2 success:         1
24504
 
ROLLBACK WORK;
24505
 
        
24506
 
# check transactions-3 success:         1
24507
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
24508
 
COMMIT WORK;
24509
 
ROLLBACK WORK;
24510
 
        
24511
 
# check transactions-4 success:         1
24512
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24513
 
SELECT f_int1, f_int1, '', '', 'was inserted'
24514
 
FROM t0_template source_tab
24515
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24516
 
        
24517
 
# check transactions-5 success:         1
24518
 
ROLLBACK WORK;
24519
 
        
24520
 
# check transactions-6 success:         1
24521
 
# INFO: Storage engine used for t1 seems to be transactional.
24522
 
COMMIT;
24523
 
        
24524
 
# check transactions-7 success:         1
24525
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
24526
 
COMMIT WORK;
24527
 
SET @@session.sql_mode = 'traditional';
24528
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
24529
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24530
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
24531
 
'', '', 'was inserted' FROM t0_template
24532
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24533
 
ERROR 22012: Division by 0
24534
 
COMMIT;
24535
 
        
24536
 
# check transactions-8 success:         1
24537
 
# INFO: Storage engine used for t1 seems to be able to revert
24538
 
#       changes made by the failing statement.
24539
 
SET @@session.sql_mode = '';
24540
 
SET AUTOCOMMIT= 1;
24541
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
24542
 
COMMIT WORK;
24543
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
24544
 
        
24545
 
# check special-1 success:      1
24546
 
UPDATE t1 SET f_charbig = '';
24547
 
        
24548
 
# check special-2 success:      1
24549
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
24550
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24551
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
24552
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24553
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24554
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24555
 
'just inserted' FROM t0_template
24556
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24557
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
24558
 
BEGIN
24559
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24560
 
f_charbig = 'updated by trigger'
24561
 
      WHERE f_int1 = new.f_int1;
24562
 
END|
24563
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24564
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24565
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24566
 
        
24567
 
# check trigger-1 success:      1
24568
 
DROP TRIGGER trg_1;
24569
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24570
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24571
 
f_charbig = 'just inserted'
24572
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24573
 
DELETE FROM t0_aux
24574
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24575
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24576
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24577
 
'just inserted' FROM t0_template
24578
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24579
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
24580
 
BEGIN
24581
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24582
 
f_charbig = 'updated by trigger'
24583
 
      WHERE f_int1 = new.f_int1;
24584
 
END|
24585
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24586
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24587
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24588
 
        
24589
 
# check trigger-2 success:      1
24590
 
DROP TRIGGER trg_1;
24591
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24592
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24593
 
f_charbig = 'just inserted'
24594
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24595
 
DELETE FROM t0_aux
24596
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24597
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24598
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24599
 
'just inserted' FROM t0_template
24600
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24601
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24602
 
BEGIN
24603
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24604
 
f_charbig = 'updated by trigger'
24605
 
      WHERE f_int1 = new.f_int1;
24606
 
END|
24607
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24608
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24609
 
        
24610
 
# check trigger-3 success:      1
24611
 
DROP TRIGGER trg_1;
24612
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24613
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24614
 
f_charbig = 'just inserted'
24615
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24616
 
DELETE FROM t0_aux
24617
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24618
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24619
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24620
 
'just inserted' FROM t0_template
24621
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24622
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24623
 
BEGIN
24624
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24625
 
f_charbig = 'updated by trigger'
24626
 
      WHERE f_int1 = - old.f_int1;
24627
 
END|
24628
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24629
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24630
 
        
24631
 
# check trigger-4 success:      1
24632
 
DROP TRIGGER trg_1;
24633
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24634
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24635
 
f_charbig = 'just inserted'
24636
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24637
 
DELETE FROM t0_aux
24638
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24639
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24640
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24641
 
'just inserted' FROM t0_template
24642
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24643
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24644
 
BEGIN
24645
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24646
 
f_charbig = 'updated by trigger'
24647
 
      WHERE f_int1 = new.f_int1;
24648
 
END|
24649
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24650
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24651
 
        
24652
 
# check trigger-5 success:      1
24653
 
DROP TRIGGER trg_1;
24654
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24655
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24656
 
f_charbig = 'just inserted'
24657
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24658
 
DELETE FROM t0_aux
24659
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24660
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24661
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24662
 
'just inserted' FROM t0_template
24663
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24664
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24665
 
BEGIN
24666
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24667
 
f_charbig = 'updated by trigger'
24668
 
      WHERE f_int1 = - old.f_int1;
24669
 
END|
24670
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24671
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24672
 
        
24673
 
# check trigger-6 success:      1
24674
 
DROP TRIGGER trg_1;
24675
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24676
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24677
 
f_charbig = 'just inserted'
24678
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24679
 
DELETE FROM t0_aux
24680
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24681
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24682
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24683
 
'just inserted' FROM t0_template
24684
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24685
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
24686
 
BEGIN
24687
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24688
 
f_charbig = 'updated by trigger'
24689
 
      WHERE f_int1 = - old.f_int1;
24690
 
END|
24691
 
DELETE FROM t0_aux
24692
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24693
 
        
24694
 
# check trigger-7 success:      1
24695
 
DROP TRIGGER trg_1;
24696
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24697
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24698
 
f_charbig = 'just inserted'
24699
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24700
 
DELETE FROM t0_aux
24701
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24702
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24703
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24704
 
'just inserted' FROM t0_template
24705
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24706
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
24707
 
BEGIN
24708
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24709
 
f_charbig = 'updated by trigger'
24710
 
      WHERE f_int1 = - old.f_int1;
24711
 
END|
24712
 
DELETE FROM t0_aux
24713
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24714
 
        
24715
 
# check trigger-8 success:      1
24716
 
DROP TRIGGER trg_1;
24717
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24718
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24719
 
f_charbig = 'just inserted'
24720
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24721
 
DELETE FROM t0_aux
24722
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24723
 
DELETE FROM t1
24724
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24725
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24726
 
BEGIN
24727
 
SET new.f_int1 = old.f_int1 + @max_row,
24728
 
new.f_int2 = old.f_int2 - @max_row,
24729
 
new.f_charbig = '####updated per update trigger####';
24730
 
END|
24731
 
UPDATE t1
24732
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24733
 
f_charbig = '####updated per update statement itself####';
24734
 
        
24735
 
# check trigger-9 success:      1
24736
 
DROP TRIGGER trg_2;
24737
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24738
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24739
 
f_charbig = CONCAT('===',f_char1,'===');
24740
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24741
 
BEGIN
24742
 
SET new.f_int1 = new.f_int1 + @max_row,
24743
 
new.f_int2 = new.f_int2 - @max_row,
24744
 
new.f_charbig = '####updated per update trigger####';
24745
 
END|
24746
 
UPDATE t1
24747
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24748
 
f_charbig = '####updated per update statement itself####';
24749
 
        
24750
 
# check trigger-10 success:     1
24751
 
DROP TRIGGER trg_2;
24752
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24753
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24754
 
f_charbig = CONCAT('===',f_char1,'===');
24755
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24756
 
BEGIN
24757
 
SET new.f_int1 = @my_max1 + @counter,
24758
 
new.f_int2 = @my_min2 - @counter,
24759
 
new.f_charbig = '####updated per insert trigger####';
24760
 
SET @counter = @counter + 1;
24761
 
END|
24762
 
SET @counter = 1;
24763
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24764
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24765
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24766
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24767
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24768
 
ORDER BY f_int1;
24769
 
DROP TRIGGER trg_3;
24770
 
        
24771
 
# check trigger-11 success:     1
24772
 
DELETE FROM t1
24773
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24774
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24775
 
AND f_charbig = '####updated per insert trigger####';
24776
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24777
 
BEGIN
24778
 
SET new.f_int1 = @my_max1 + @counter,
24779
 
new.f_int2 = @my_min2 - @counter,
24780
 
new.f_charbig = '####updated per insert trigger####';
24781
 
SET @counter = @counter + 1;
24782
 
END|
24783
 
SET @counter = 1;
24784
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24785
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
24786
 
SELECT CAST(f_int1 AS CHAR),
24787
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24788
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24789
 
ORDER BY f_int1;
24790
 
DROP TRIGGER trg_3;
24791
 
        
24792
 
# check trigger-12 success:     1
24793
 
DELETE FROM t1
24794
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24795
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24796
 
AND f_charbig = '####updated per insert trigger####';
24797
 
ANALYZE  TABLE t1;
24798
 
Table   Op      Msg_type        Msg_text
24799
 
test.t1 analyze status  OK
24800
 
CHECK    TABLE t1 EXTENDED;
24801
 
Table   Op      Msg_type        Msg_text
24802
 
test.t1 check   status  OK
24803
 
CHECKSUM TABLE t1 EXTENDED;
24804
 
Table   Checksum
24805
 
test.t1 <some_value>
24806
 
OPTIMIZE TABLE t1;
24807
 
Table   Op      Msg_type        Msg_text
24808
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
24809
 
test.t1 optimize        status  OK
24810
 
# check layout success:    1
24811
 
REPAIR   TABLE t1 EXTENDED;
24812
 
Table   Op      Msg_type        Msg_text
24813
 
test.t1 repair  note    The storage engine for the table doesn't support repair
24814
 
# check layout success:    1
24815
 
TRUNCATE t1;
24816
 
        
24817
 
# check TRUNCATE success:       1
24818
 
# check layout success:    1
24819
 
# End usability test (inc/partition_check.inc)
24820
 
DROP TABLE t1;
24821
 
CREATE TABLE t1 (
24822
 
f_int1 INTEGER,
24823
 
f_int2 INTEGER,
24824
 
f_char1 CHAR(20),
24825
 
f_char2 CHAR(20),
24826
 
f_charbig VARCHAR(1000)
24827
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
24828
 
)
24829
 
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
24830
 
(PARTITION parta VALUES LESS THAN (0),
24831
 
PARTITION partb VALUES LESS THAN (5),
24832
 
PARTITION partc VALUES LESS THAN (10),
24833
 
PARTITION partd VALUES LESS THAN (10 + 5),
24834
 
PARTITION parte VALUES LESS THAN (20),
24835
 
PARTITION partf VALUES LESS THAN (2147483646));
24836
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24837
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
24838
 
# Start usability test (inc/partition_check.inc)
24839
 
create_command
24840
 
SHOW CREATE TABLE t1;
24841
 
Table   Create Table
24842
 
t1      CREATE TABLE `t1` (
24843
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
24844
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
24845
 
  `f_char1` char(20) DEFAULT NULL,
24846
 
  `f_char2` char(20) DEFAULT NULL,
24847
 
  `f_charbig` varchar(1000) DEFAULT NULL,
24848
 
  PRIMARY KEY (`f_int1`,`f_int2`),
24849
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
24850
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
24851
 
 
24852
 
unified filelist
24853
 
t1.frm
24854
 
t1.par
24855
 
 
24856
 
# check prerequisites-1 success:    1
24857
 
# check COUNT(*) success:    1
24858
 
# check MIN/MAX(f_int1) success:    1
24859
 
# check MIN/MAX(f_int2) success:    1
24860
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24861
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24862
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
24863
 
WHERE f_int1 IN (2,3);
24864
 
ERROR 23000: Can't write; duplicate key in table 't1'
24865
 
# check prerequisites-3 success:    1
24866
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
24867
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24868
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
24869
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
24870
 
WHERE f_int1 IN (2,3);
24871
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
24872
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24873
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
24874
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
24875
 
WHERE f_int1 IN (2,3);
24876
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
24877
 
# check read via f_int1 success: 1
24878
 
# check read via f_int2 success: 1
24879
 
        
24880
 
# check multiple-1 success:     1
24881
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
24882
 
        
24883
 
# check multiple-2 success:     1
24884
 
INSERT INTO t1 SELECT * FROM t0_template
24885
 
WHERE MOD(f_int1,3) = 0;
24886
 
        
24887
 
# check multiple-3 success:     1
24888
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
24889
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
24890
 
AND @max_row_div2 + @max_row_div4;
24891
 
        
24892
 
# check multiple-4 success:     1
24893
 
DELETE FROM t1
24894
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
24895
 
AND @max_row_div2 + @max_row_div4 + @max_row;
24896
 
        
24897
 
# check multiple-5 success:     1
24898
 
SELECT COUNT(*) INTO @try_count FROM t0_template
24899
 
WHERE MOD(f_int1,3) = 0
24900
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24901
 
SELECT COUNT(*) INTO @clash_count
24902
 
FROM t1 INNER JOIN t0_template USING(f_int1)
24903
 
WHERE MOD(f_int1,3) = 0
24904
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24905
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
24906
 
INSERT INTO t1
24907
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
24908
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24909
 
f_charbig = '#SINGLE#';
24910
 
        
24911
 
# check single-1 success:       1
24912
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
24913
 
INSERT INTO t1
24914
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
24915
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24916
 
f_charbig = '#SINGLE#';
24917
 
        
24918
 
# check single-2 success:       1
24919
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
24920
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
24921
 
UPDATE t1 SET f_int1 = @cur_value2
24922
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
24923
 
        
24924
 
# check single-3 success:       1
24925
 
SET @cur_value1= -1;
24926
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
24927
 
UPDATE t1 SET f_int1 = @cur_value1
24928
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
24929
 
        
24930
 
# check single-4 success:       1
24931
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
24932
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
24933
 
        
24934
 
# check single-5 success:       1
24935
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
24936
 
        
24937
 
# check single-6 success:       1
24938
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
24939
 
ERROR HY000: Table has no partition for value 2147483647
24940
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
24941
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
24942
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
24943
 
f_charbig = '#NULL#';
24944
 
INSERT INTO t1
24945
 
SET f_int1 = NULL , f_int2 = -@max_row,
24946
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
24947
 
f_charbig = '#NULL#';
24948
 
ERROR 23000: Column 'f_int1' cannot be null
24949
 
# check null success:    1
24950
 
DELETE FROM t1
24951
 
WHERE f_int1 = 0 AND f_int2 = 0
24952
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
24953
 
AND f_charbig = '#NULL#';
24954
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24955
 
SELECT f_int1, f_int1, '', '', 'was inserted'
24956
 
   FROM t0_template source_tab
24957
 
WHERE MOD(f_int1,3) = 0
24958
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
24959
 
ON DUPLICATE KEY
24960
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
24961
 
f_int2 = 2 * @max_row + source_tab.f_int1,
24962
 
f_charbig = 'was updated';
24963
 
        
24964
 
# check unique-1-a success:     1
24965
 
        
24966
 
# check unique-1-b success:     1
24967
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
24968
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24969
 
f_int2 = CAST(f_char1 AS SIGNED INT),
24970
 
f_charbig = CONCAT('===',f_char1,'===')
24971
 
WHERE f_charbig = 'was updated';
24972
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24973
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
24974
 
   FROM t0_template source_tab
24975
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24976
 
        
24977
 
# check replace success:        1
24978
 
DELETE FROM t1
24979
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
24980
 
DELETE FROM t1
24981
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
24982
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
24983
 
UPDATE t1 SET f_int2 = f_int1,
24984
 
f_char1 = CAST(f_int1 AS CHAR),
24985
 
f_char2 = CAST(f_int1 AS CHAR),
24986
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
24987
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
24988
 
SET AUTOCOMMIT= 0;
24989
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24990
 
SELECT f_int1, f_int1, '', '', 'was inserted'
24991
 
FROM t0_template source_tab
24992
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24993
 
        
24994
 
# check transactions-1 success:         1
24995
 
COMMIT WORK;
24996
 
        
24997
 
# check transactions-2 success:         1
24998
 
ROLLBACK WORK;
24999
 
        
25000
 
# check transactions-3 success:         1
25001
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
25002
 
COMMIT WORK;
25003
 
ROLLBACK WORK;
25004
 
        
25005
 
# check transactions-4 success:         1
25006
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25007
 
SELECT f_int1, f_int1, '', '', 'was inserted'
25008
 
FROM t0_template source_tab
25009
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25010
 
        
25011
 
# check transactions-5 success:         1
25012
 
ROLLBACK WORK;
25013
 
        
25014
 
# check transactions-6 success:         1
25015
 
# INFO: Storage engine used for t1 seems to be transactional.
25016
 
COMMIT;
25017
 
        
25018
 
# check transactions-7 success:         1
25019
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
25020
 
COMMIT WORK;
25021
 
SET @@session.sql_mode = 'traditional';
25022
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
25023
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25024
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
25025
 
'', '', 'was inserted' FROM t0_template
25026
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25027
 
ERROR 22012: Division by 0
25028
 
COMMIT;
25029
 
        
25030
 
# check transactions-8 success:         1
25031
 
# INFO: Storage engine used for t1 seems to be able to revert
25032
 
#       changes made by the failing statement.
25033
 
SET @@session.sql_mode = '';
25034
 
SET AUTOCOMMIT= 1;
25035
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
25036
 
COMMIT WORK;
25037
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
25038
 
        
25039
 
# check special-1 success:      1
25040
 
UPDATE t1 SET f_charbig = '';
25041
 
        
25042
 
# check special-2 success:      1
25043
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
25044
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25045
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
25046
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25047
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25048
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25049
 
'just inserted' FROM t0_template
25050
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25051
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
25052
 
BEGIN
25053
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25054
 
f_charbig = 'updated by trigger'
25055
 
      WHERE f_int1 = new.f_int1;
25056
 
END|
25057
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25058
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25059
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25060
 
        
25061
 
# check trigger-1 success:      1
25062
 
DROP TRIGGER trg_1;
25063
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25064
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25065
 
f_charbig = 'just inserted'
25066
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25067
 
DELETE FROM t0_aux
25068
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25069
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25070
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25071
 
'just inserted' FROM t0_template
25072
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25073
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
25074
 
BEGIN
25075
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25076
 
f_charbig = 'updated by trigger'
25077
 
      WHERE f_int1 = new.f_int1;
25078
 
END|
25079
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25080
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25081
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25082
 
        
25083
 
# check trigger-2 success:      1
25084
 
DROP TRIGGER trg_1;
25085
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25086
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25087
 
f_charbig = 'just inserted'
25088
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25089
 
DELETE FROM t0_aux
25090
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25091
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25092
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25093
 
'just inserted' FROM t0_template
25094
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25095
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25096
 
BEGIN
25097
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25098
 
f_charbig = 'updated by trigger'
25099
 
      WHERE f_int1 = new.f_int1;
25100
 
END|
25101
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25102
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25103
 
        
25104
 
# check trigger-3 success:      1
25105
 
DROP TRIGGER trg_1;
25106
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25107
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25108
 
f_charbig = 'just inserted'
25109
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25110
 
DELETE FROM t0_aux
25111
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25112
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25113
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25114
 
'just inserted' FROM t0_template
25115
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25116
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25117
 
BEGIN
25118
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25119
 
f_charbig = 'updated by trigger'
25120
 
      WHERE f_int1 = - old.f_int1;
25121
 
END|
25122
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25123
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25124
 
        
25125
 
# check trigger-4 success:      1
25126
 
DROP TRIGGER trg_1;
25127
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25128
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25129
 
f_charbig = 'just inserted'
25130
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25131
 
DELETE FROM t0_aux
25132
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25133
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25134
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25135
 
'just inserted' FROM t0_template
25136
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25137
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25138
 
BEGIN
25139
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25140
 
f_charbig = 'updated by trigger'
25141
 
      WHERE f_int1 = new.f_int1;
25142
 
END|
25143
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25144
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25145
 
        
25146
 
# check trigger-5 success:      1
25147
 
DROP TRIGGER trg_1;
25148
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25149
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25150
 
f_charbig = 'just inserted'
25151
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25152
 
DELETE FROM t0_aux
25153
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25154
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25155
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25156
 
'just inserted' FROM t0_template
25157
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25158
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25159
 
BEGIN
25160
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25161
 
f_charbig = 'updated by trigger'
25162
 
      WHERE f_int1 = - old.f_int1;
25163
 
END|
25164
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25165
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25166
 
        
25167
 
# check trigger-6 success:      1
25168
 
DROP TRIGGER trg_1;
25169
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25170
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25171
 
f_charbig = 'just inserted'
25172
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25173
 
DELETE FROM t0_aux
25174
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25175
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25176
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25177
 
'just inserted' FROM t0_template
25178
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25179
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
25180
 
BEGIN
25181
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25182
 
f_charbig = 'updated by trigger'
25183
 
      WHERE f_int1 = - old.f_int1;
25184
 
END|
25185
 
DELETE FROM t0_aux
25186
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25187
 
        
25188
 
# check trigger-7 success:      1
25189
 
DROP TRIGGER trg_1;
25190
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25191
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25192
 
f_charbig = 'just inserted'
25193
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25194
 
DELETE FROM t0_aux
25195
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25196
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25197
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25198
 
'just inserted' FROM t0_template
25199
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25200
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
25201
 
BEGIN
25202
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25203
 
f_charbig = 'updated by trigger'
25204
 
      WHERE f_int1 = - old.f_int1;
25205
 
END|
25206
 
DELETE FROM t0_aux
25207
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25208
 
        
25209
 
# check trigger-8 success:      1
25210
 
DROP TRIGGER trg_1;
25211
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25212
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25213
 
f_charbig = 'just inserted'
25214
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25215
 
DELETE FROM t0_aux
25216
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25217
 
DELETE FROM t1
25218
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25219
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25220
 
BEGIN
25221
 
SET new.f_int1 = old.f_int1 + @max_row,
25222
 
new.f_int2 = old.f_int2 - @max_row,
25223
 
new.f_charbig = '####updated per update trigger####';
25224
 
END|
25225
 
UPDATE t1
25226
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25227
 
f_charbig = '####updated per update statement itself####';
25228
 
        
25229
 
# check trigger-9 success:      1
25230
 
DROP TRIGGER trg_2;
25231
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25232
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25233
 
f_charbig = CONCAT('===',f_char1,'===');
25234
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25235
 
BEGIN
25236
 
SET new.f_int1 = new.f_int1 + @max_row,
25237
 
new.f_int2 = new.f_int2 - @max_row,
25238
 
new.f_charbig = '####updated per update trigger####';
25239
 
END|
25240
 
UPDATE t1
25241
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25242
 
f_charbig = '####updated per update statement itself####';
25243
 
        
25244
 
# check trigger-10 success:     1
25245
 
DROP TRIGGER trg_2;
25246
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25247
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25248
 
f_charbig = CONCAT('===',f_char1,'===');
25249
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25250
 
BEGIN
25251
 
SET new.f_int1 = @my_max1 + @counter,
25252
 
new.f_int2 = @my_min2 - @counter,
25253
 
new.f_charbig = '####updated per insert trigger####';
25254
 
SET @counter = @counter + 1;
25255
 
END|
25256
 
SET @counter = 1;
25257
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25258
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25259
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25260
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25261
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25262
 
ORDER BY f_int1;
25263
 
DROP TRIGGER trg_3;
25264
 
        
25265
 
# check trigger-11 success:     1
25266
 
DELETE FROM t1
25267
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25268
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25269
 
AND f_charbig = '####updated per insert trigger####';
25270
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25271
 
BEGIN
25272
 
SET new.f_int1 = @my_max1 + @counter,
25273
 
new.f_int2 = @my_min2 - @counter,
25274
 
new.f_charbig = '####updated per insert trigger####';
25275
 
SET @counter = @counter + 1;
25276
 
END|
25277
 
SET @counter = 1;
25278
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25279
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
25280
 
SELECT CAST(f_int1 AS CHAR),
25281
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25282
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25283
 
ORDER BY f_int1;
25284
 
DROP TRIGGER trg_3;
25285
 
        
25286
 
# check trigger-12 success:     1
25287
 
DELETE FROM t1
25288
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25289
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25290
 
AND f_charbig = '####updated per insert trigger####';
25291
 
ANALYZE  TABLE t1;
25292
 
Table   Op      Msg_type        Msg_text
25293
 
test.t1 analyze status  OK
25294
 
CHECK    TABLE t1 EXTENDED;
25295
 
Table   Op      Msg_type        Msg_text
25296
 
test.t1 check   status  OK
25297
 
CHECKSUM TABLE t1 EXTENDED;
25298
 
Table   Checksum
25299
 
test.t1 <some_value>
25300
 
OPTIMIZE TABLE t1;
25301
 
Table   Op      Msg_type        Msg_text
25302
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
25303
 
test.t1 optimize        status  OK
25304
 
# check layout success:    1
25305
 
REPAIR   TABLE t1 EXTENDED;
25306
 
Table   Op      Msg_type        Msg_text
25307
 
test.t1 repair  note    The storage engine for the table doesn't support repair
25308
 
# check layout success:    1
25309
 
TRUNCATE t1;
25310
 
        
25311
 
# check TRUNCATE success:       1
25312
 
# check layout success:    1
25313
 
# End usability test (inc/partition_check.inc)
25314
 
DROP TABLE t1;
25315
 
CREATE TABLE t1 (
25316
 
f_int1 INTEGER,
25317
 
f_int2 INTEGER,
25318
 
f_char1 CHAR(20),
25319
 
f_char2 CHAR(20),
25320
 
f_charbig VARCHAR(1000)
25321
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
25322
 
)
25323
 
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
25324
 
(PARTITION parta VALUES LESS THAN (0),
25325
 
PARTITION partb VALUES LESS THAN (5),
25326
 
PARTITION partc VALUES LESS THAN (10),
25327
 
PARTITION partd VALUES LESS THAN (2147483646));
25328
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25329
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
25330
 
# Start usability test (inc/partition_check.inc)
25331
 
create_command
25332
 
SHOW CREATE TABLE t1;
25333
 
Table   Create Table
25334
 
t1      CREATE TABLE `t1` (
25335
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
25336
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
25337
 
  `f_char1` char(20) DEFAULT NULL,
25338
 
  `f_char2` char(20) DEFAULT NULL,
25339
 
  `f_charbig` varchar(1000) DEFAULT NULL,
25340
 
  PRIMARY KEY (`f_int1`,`f_int2`),
25341
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
25342
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
25343
 
 
25344
 
unified filelist
25345
 
t1.frm
25346
 
t1.par
25347
 
 
25348
 
# check prerequisites-1 success:    1
25349
 
# check COUNT(*) success:    1
25350
 
# check MIN/MAX(f_int1) success:    1
25351
 
# check MIN/MAX(f_int2) success:    1
25352
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25353
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25354
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
25355
 
WHERE f_int1 IN (2,3);
25356
 
ERROR 23000: Can't write; duplicate key in table 't1'
25357
 
# check prerequisites-3 success:    1
25358
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
25359
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25360
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
25361
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
25362
 
WHERE f_int1 IN (2,3);
25363
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
25364
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25365
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
25366
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
25367
 
WHERE f_int1 IN (2,3);
25368
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
25369
 
# check read via f_int1 success: 1
25370
 
# check read via f_int2 success: 1
25371
 
        
25372
 
# check multiple-1 success:     1
25373
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
25374
 
        
25375
 
# check multiple-2 success:     1
25376
 
INSERT INTO t1 SELECT * FROM t0_template
25377
 
WHERE MOD(f_int1,3) = 0;
25378
 
        
25379
 
# check multiple-3 success:     1
25380
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
25381
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
25382
 
AND @max_row_div2 + @max_row_div4;
25383
 
        
25384
 
# check multiple-4 success:     1
25385
 
DELETE FROM t1
25386
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
25387
 
AND @max_row_div2 + @max_row_div4 + @max_row;
25388
 
        
25389
 
# check multiple-5 success:     1
25390
 
SELECT COUNT(*) INTO @try_count FROM t0_template
25391
 
WHERE MOD(f_int1,3) = 0
25392
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25393
 
SELECT COUNT(*) INTO @clash_count
25394
 
FROM t1 INNER JOIN t0_template USING(f_int1)
25395
 
WHERE MOD(f_int1,3) = 0
25396
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25397
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
25398
 
INSERT INTO t1
25399
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
25400
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25401
 
f_charbig = '#SINGLE#';
25402
 
        
25403
 
# check single-1 success:       1
25404
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
25405
 
INSERT INTO t1
25406
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
25407
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25408
 
f_charbig = '#SINGLE#';
25409
 
        
25410
 
# check single-2 success:       1
25411
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
25412
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
25413
 
UPDATE t1 SET f_int1 = @cur_value2
25414
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
25415
 
        
25416
 
# check single-3 success:       1
25417
 
SET @cur_value1= -1;
25418
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
25419
 
UPDATE t1 SET f_int1 = @cur_value1
25420
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
25421
 
        
25422
 
# check single-4 success:       1
25423
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
25424
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
25425
 
        
25426
 
# check single-5 success:       1
25427
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
25428
 
        
25429
 
# check single-6 success:       1
25430
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
25431
 
ERROR HY000: Table has no partition for value 2147483647
25432
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
25433
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
25434
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
25435
 
f_charbig = '#NULL#';
25436
 
INSERT INTO t1
25437
 
SET f_int1 = NULL , f_int2 = -@max_row,
25438
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
25439
 
f_charbig = '#NULL#';
25440
 
ERROR 23000: Column 'f_int1' cannot be null
25441
 
# check null success:    1
25442
 
DELETE FROM t1
25443
 
WHERE f_int1 = 0 AND f_int2 = 0
25444
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
25445
 
AND f_charbig = '#NULL#';
25446
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25447
 
SELECT f_int1, f_int1, '', '', 'was inserted'
25448
 
   FROM t0_template source_tab
25449
 
WHERE MOD(f_int1,3) = 0
25450
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
25451
 
ON DUPLICATE KEY
25452
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
25453
 
f_int2 = 2 * @max_row + source_tab.f_int1,
25454
 
f_charbig = 'was updated';
25455
 
        
25456
 
# check unique-1-a success:     1
25457
 
        
25458
 
# check unique-1-b success:     1
25459
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
25460
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25461
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25462
 
f_charbig = CONCAT('===',f_char1,'===')
25463
 
WHERE f_charbig = 'was updated';
25464
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25465
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
25466
 
   FROM t0_template source_tab
25467
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25468
 
        
25469
 
# check replace success:        1
25470
 
DELETE FROM t1
25471
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
25472
 
DELETE FROM t1
25473
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
25474
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
25475
 
UPDATE t1 SET f_int2 = f_int1,
25476
 
f_char1 = CAST(f_int1 AS CHAR),
25477
 
f_char2 = CAST(f_int1 AS CHAR),
25478
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
25479
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
25480
 
SET AUTOCOMMIT= 0;
25481
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25482
 
SELECT f_int1, f_int1, '', '', 'was inserted'
25483
 
FROM t0_template source_tab
25484
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25485
 
        
25486
 
# check transactions-1 success:         1
25487
 
COMMIT WORK;
25488
 
        
25489
 
# check transactions-2 success:         1
25490
 
ROLLBACK WORK;
25491
 
        
25492
 
# check transactions-3 success:         1
25493
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
25494
 
COMMIT WORK;
25495
 
ROLLBACK WORK;
25496
 
        
25497
 
# check transactions-4 success:         1
25498
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25499
 
SELECT f_int1, f_int1, '', '', 'was inserted'
25500
 
FROM t0_template source_tab
25501
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25502
 
        
25503
 
# check transactions-5 success:         1
25504
 
ROLLBACK WORK;
25505
 
        
25506
 
# check transactions-6 success:         1
25507
 
# INFO: Storage engine used for t1 seems to be transactional.
25508
 
COMMIT;
25509
 
        
25510
 
# check transactions-7 success:         1
25511
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
25512
 
COMMIT WORK;
25513
 
SET @@session.sql_mode = 'traditional';
25514
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
25515
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25516
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
25517
 
'', '', 'was inserted' FROM t0_template
25518
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25519
 
ERROR 22012: Division by 0
25520
 
COMMIT;
25521
 
        
25522
 
# check transactions-8 success:         1
25523
 
# INFO: Storage engine used for t1 seems to be able to revert
25524
 
#       changes made by the failing statement.
25525
 
SET @@session.sql_mode = '';
25526
 
SET AUTOCOMMIT= 1;
25527
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
25528
 
COMMIT WORK;
25529
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
25530
 
        
25531
 
# check special-1 success:      1
25532
 
UPDATE t1 SET f_charbig = '';
25533
 
        
25534
 
# check special-2 success:      1
25535
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
25536
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25537
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
25538
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25539
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25540
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25541
 
'just inserted' FROM t0_template
25542
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25543
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
25544
 
BEGIN
25545
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25546
 
f_charbig = 'updated by trigger'
25547
 
      WHERE f_int1 = new.f_int1;
25548
 
END|
25549
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25550
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25551
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25552
 
        
25553
 
# check trigger-1 success:      1
25554
 
DROP TRIGGER trg_1;
25555
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25556
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25557
 
f_charbig = 'just inserted'
25558
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25559
 
DELETE FROM t0_aux
25560
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25561
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25562
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25563
 
'just inserted' FROM t0_template
25564
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25565
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
25566
 
BEGIN
25567
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25568
 
f_charbig = 'updated by trigger'
25569
 
      WHERE f_int1 = new.f_int1;
25570
 
END|
25571
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25572
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25573
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25574
 
        
25575
 
# check trigger-2 success:      1
25576
 
DROP TRIGGER trg_1;
25577
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25578
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25579
 
f_charbig = 'just inserted'
25580
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25581
 
DELETE FROM t0_aux
25582
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25583
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25584
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25585
 
'just inserted' FROM t0_template
25586
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25587
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25588
 
BEGIN
25589
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25590
 
f_charbig = 'updated by trigger'
25591
 
      WHERE f_int1 = new.f_int1;
25592
 
END|
25593
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25594
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25595
 
        
25596
 
# check trigger-3 success:      1
25597
 
DROP TRIGGER trg_1;
25598
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25599
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25600
 
f_charbig = 'just inserted'
25601
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25602
 
DELETE FROM t0_aux
25603
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25604
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25605
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25606
 
'just inserted' FROM t0_template
25607
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25608
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25609
 
BEGIN
25610
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25611
 
f_charbig = 'updated by trigger'
25612
 
      WHERE f_int1 = - old.f_int1;
25613
 
END|
25614
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25615
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25616
 
        
25617
 
# check trigger-4 success:      1
25618
 
DROP TRIGGER trg_1;
25619
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25620
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25621
 
f_charbig = 'just inserted'
25622
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25623
 
DELETE FROM t0_aux
25624
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25625
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25626
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25627
 
'just inserted' FROM t0_template
25628
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25629
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25630
 
BEGIN
25631
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25632
 
f_charbig = 'updated by trigger'
25633
 
      WHERE f_int1 = new.f_int1;
25634
 
END|
25635
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25636
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25637
 
        
25638
 
# check trigger-5 success:      1
25639
 
DROP TRIGGER trg_1;
25640
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25641
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25642
 
f_charbig = 'just inserted'
25643
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25644
 
DELETE FROM t0_aux
25645
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25646
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25647
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25648
 
'just inserted' FROM t0_template
25649
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25650
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25651
 
BEGIN
25652
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25653
 
f_charbig = 'updated by trigger'
25654
 
      WHERE f_int1 = - old.f_int1;
25655
 
END|
25656
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25657
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25658
 
        
25659
 
# check trigger-6 success:      1
25660
 
DROP TRIGGER trg_1;
25661
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25662
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25663
 
f_charbig = 'just inserted'
25664
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25665
 
DELETE FROM t0_aux
25666
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25667
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25668
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25669
 
'just inserted' FROM t0_template
25670
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25671
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
25672
 
BEGIN
25673
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25674
 
f_charbig = 'updated by trigger'
25675
 
      WHERE f_int1 = - old.f_int1;
25676
 
END|
25677
 
DELETE FROM t0_aux
25678
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25679
 
        
25680
 
# check trigger-7 success:      1
25681
 
DROP TRIGGER trg_1;
25682
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25683
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25684
 
f_charbig = 'just inserted'
25685
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25686
 
DELETE FROM t0_aux
25687
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25688
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25689
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25690
 
'just inserted' FROM t0_template
25691
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25692
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
25693
 
BEGIN
25694
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25695
 
f_charbig = 'updated by trigger'
25696
 
      WHERE f_int1 = - old.f_int1;
25697
 
END|
25698
 
DELETE FROM t0_aux
25699
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25700
 
        
25701
 
# check trigger-8 success:      1
25702
 
DROP TRIGGER trg_1;
25703
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25704
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25705
 
f_charbig = 'just inserted'
25706
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25707
 
DELETE FROM t0_aux
25708
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25709
 
DELETE FROM t1
25710
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25711
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25712
 
BEGIN
25713
 
SET new.f_int1 = old.f_int1 + @max_row,
25714
 
new.f_int2 = old.f_int2 - @max_row,
25715
 
new.f_charbig = '####updated per update trigger####';
25716
 
END|
25717
 
UPDATE t1
25718
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25719
 
f_charbig = '####updated per update statement itself####';
25720
 
        
25721
 
# check trigger-9 success:      1
25722
 
DROP TRIGGER trg_2;
25723
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25724
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25725
 
f_charbig = CONCAT('===',f_char1,'===');
25726
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25727
 
BEGIN
25728
 
SET new.f_int1 = new.f_int1 + @max_row,
25729
 
new.f_int2 = new.f_int2 - @max_row,
25730
 
new.f_charbig = '####updated per update trigger####';
25731
 
END|
25732
 
UPDATE t1
25733
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25734
 
f_charbig = '####updated per update statement itself####';
25735
 
        
25736
 
# check trigger-10 success:     1
25737
 
DROP TRIGGER trg_2;
25738
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25739
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25740
 
f_charbig = CONCAT('===',f_char1,'===');
25741
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25742
 
BEGIN
25743
 
SET new.f_int1 = @my_max1 + @counter,
25744
 
new.f_int2 = @my_min2 - @counter,
25745
 
new.f_charbig = '####updated per insert trigger####';
25746
 
SET @counter = @counter + 1;
25747
 
END|
25748
 
SET @counter = 1;
25749
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25750
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25751
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25752
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25753
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25754
 
ORDER BY f_int1;
25755
 
DROP TRIGGER trg_3;
25756
 
        
25757
 
# check trigger-11 success:     1
25758
 
DELETE FROM t1
25759
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25760
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25761
 
AND f_charbig = '####updated per insert trigger####';
25762
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25763
 
BEGIN
25764
 
SET new.f_int1 = @my_max1 + @counter,
25765
 
new.f_int2 = @my_min2 - @counter,
25766
 
new.f_charbig = '####updated per insert trigger####';
25767
 
SET @counter = @counter + 1;
25768
 
END|
25769
 
SET @counter = 1;
25770
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25771
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
25772
 
SELECT CAST(f_int1 AS CHAR),
25773
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25774
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25775
 
ORDER BY f_int1;
25776
 
DROP TRIGGER trg_3;
25777
 
        
25778
 
# check trigger-12 success:     1
25779
 
DELETE FROM t1
25780
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25781
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25782
 
AND f_charbig = '####updated per insert trigger####';
25783
 
ANALYZE  TABLE t1;
25784
 
Table   Op      Msg_type        Msg_text
25785
 
test.t1 analyze status  OK
25786
 
CHECK    TABLE t1 EXTENDED;
25787
 
Table   Op      Msg_type        Msg_text
25788
 
test.t1 check   status  OK
25789
 
CHECKSUM TABLE t1 EXTENDED;
25790
 
Table   Checksum
25791
 
test.t1 <some_value>
25792
 
OPTIMIZE TABLE t1;
25793
 
Table   Op      Msg_type        Msg_text
25794
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
25795
 
test.t1 optimize        status  OK
25796
 
# check layout success:    1
25797
 
REPAIR   TABLE t1 EXTENDED;
25798
 
Table   Op      Msg_type        Msg_text
25799
 
test.t1 repair  note    The storage engine for the table doesn't support repair
25800
 
# check layout success:    1
25801
 
TRUNCATE t1;
25802
 
        
25803
 
# check TRUNCATE success:       1
25804
 
# check layout success:    1
25805
 
# End usability test (inc/partition_check.inc)
25806
 
DROP TABLE t1;
25807
 
CREATE TABLE t1 (
25808
 
f_int1 INTEGER,
25809
 
f_int2 INTEGER,
25810
 
f_char1 CHAR(20),
25811
 
f_char2 CHAR(20),
25812
 
f_charbig VARCHAR(1000)
25813
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
25814
 
)
25815
 
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
25816
 
(PARTITION part1 VALUES LESS THAN (0)
25817
 
(SUBPARTITION subpart11, SUBPARTITION subpart12),
25818
 
PARTITION part2 VALUES LESS THAN (5)
25819
 
(SUBPARTITION subpart21, SUBPARTITION subpart22),
25820
 
PARTITION part3 VALUES LESS THAN (10)
25821
 
(SUBPARTITION subpart31, SUBPARTITION subpart32),
25822
 
PARTITION part4 VALUES LESS THAN (2147483646)
25823
 
(SUBPARTITION subpart41, SUBPARTITION subpart42));
25824
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25825
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
25826
 
# Start usability test (inc/partition_check.inc)
25827
 
create_command
25828
 
SHOW CREATE TABLE t1;
25829
 
Table   Create Table
25830
 
t1      CREATE TABLE `t1` (
25831
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
25832
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
25833
 
  `f_char1` char(20) DEFAULT NULL,
25834
 
  `f_char2` char(20) DEFAULT NULL,
25835
 
  `f_charbig` varchar(1000) DEFAULT NULL,
25836
 
  PRIMARY KEY (`f_int1`,`f_int2`),
25837
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
25838
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
25839
 
 
25840
 
unified filelist
25841
 
t1.frm
25842
 
t1.par
25843
 
 
25844
 
# check prerequisites-1 success:    1
25845
 
# check COUNT(*) success:    1
25846
 
# check MIN/MAX(f_int1) success:    1
25847
 
# check MIN/MAX(f_int2) success:    1
25848
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25849
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25850
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
25851
 
WHERE f_int1 IN (2,3);
25852
 
ERROR 23000: Can't write; duplicate key in table 't1'
25853
 
# check prerequisites-3 success:    1
25854
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
25855
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25856
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
25857
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
25858
 
WHERE f_int1 IN (2,3);
25859
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
25860
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25861
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
25862
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
25863
 
WHERE f_int1 IN (2,3);
25864
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
25865
 
# check read via f_int1 success: 1
25866
 
# check read via f_int2 success: 1
25867
 
        
25868
 
# check multiple-1 success:     1
25869
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
25870
 
        
25871
 
# check multiple-2 success:     1
25872
 
INSERT INTO t1 SELECT * FROM t0_template
25873
 
WHERE MOD(f_int1,3) = 0;
25874
 
        
25875
 
# check multiple-3 success:     1
25876
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
25877
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
25878
 
AND @max_row_div2 + @max_row_div4;
25879
 
        
25880
 
# check multiple-4 success:     1
25881
 
DELETE FROM t1
25882
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
25883
 
AND @max_row_div2 + @max_row_div4 + @max_row;
25884
 
        
25885
 
# check multiple-5 success:     1
25886
 
SELECT COUNT(*) INTO @try_count FROM t0_template
25887
 
WHERE MOD(f_int1,3) = 0
25888
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25889
 
SELECT COUNT(*) INTO @clash_count
25890
 
FROM t1 INNER JOIN t0_template USING(f_int1)
25891
 
WHERE MOD(f_int1,3) = 0
25892
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25893
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
25894
 
INSERT INTO t1
25895
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
25896
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25897
 
f_charbig = '#SINGLE#';
25898
 
        
25899
 
# check single-1 success:       1
25900
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
25901
 
INSERT INTO t1
25902
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
25903
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25904
 
f_charbig = '#SINGLE#';
25905
 
        
25906
 
# check single-2 success:       1
25907
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
25908
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
25909
 
UPDATE t1 SET f_int1 = @cur_value2
25910
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
25911
 
        
25912
 
# check single-3 success:       1
25913
 
SET @cur_value1= -1;
25914
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
25915
 
UPDATE t1 SET f_int1 = @cur_value1
25916
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
25917
 
        
25918
 
# check single-4 success:       1
25919
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
25920
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
25921
 
        
25922
 
# check single-5 success:       1
25923
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
25924
 
        
25925
 
# check single-6 success:       1
25926
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
25927
 
ERROR HY000: Table has no partition for value 2147483647
25928
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
25929
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
25930
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
25931
 
f_charbig = '#NULL#';
25932
 
INSERT INTO t1
25933
 
SET f_int1 = NULL , f_int2 = -@max_row,
25934
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
25935
 
f_charbig = '#NULL#';
25936
 
ERROR 23000: Column 'f_int1' cannot be null
25937
 
# check null success:    1
25938
 
DELETE FROM t1
25939
 
WHERE f_int1 = 0 AND f_int2 = 0
25940
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
25941
 
AND f_charbig = '#NULL#';
25942
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25943
 
SELECT f_int1, f_int1, '', '', 'was inserted'
25944
 
   FROM t0_template source_tab
25945
 
WHERE MOD(f_int1,3) = 0
25946
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
25947
 
ON DUPLICATE KEY
25948
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
25949
 
f_int2 = 2 * @max_row + source_tab.f_int1,
25950
 
f_charbig = 'was updated';
25951
 
        
25952
 
# check unique-1-a success:     1
25953
 
        
25954
 
# check unique-1-b success:     1
25955
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
25956
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25957
 
f_int2 = CAST(f_char1 AS SIGNED INT),
25958
 
f_charbig = CONCAT('===',f_char1,'===')
25959
 
WHERE f_charbig = 'was updated';
25960
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25961
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
25962
 
   FROM t0_template source_tab
25963
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25964
 
        
25965
 
# check replace success:        1
25966
 
DELETE FROM t1
25967
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
25968
 
DELETE FROM t1
25969
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
25970
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
25971
 
UPDATE t1 SET f_int2 = f_int1,
25972
 
f_char1 = CAST(f_int1 AS CHAR),
25973
 
f_char2 = CAST(f_int1 AS CHAR),
25974
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
25975
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
25976
 
SET AUTOCOMMIT= 0;
25977
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25978
 
SELECT f_int1, f_int1, '', '', 'was inserted'
25979
 
FROM t0_template source_tab
25980
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25981
 
        
25982
 
# check transactions-1 success:         1
25983
 
COMMIT WORK;
25984
 
        
25985
 
# check transactions-2 success:         1
25986
 
ROLLBACK WORK;
25987
 
        
25988
 
# check transactions-3 success:         1
25989
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
25990
 
COMMIT WORK;
25991
 
ROLLBACK WORK;
25992
 
        
25993
 
# check transactions-4 success:         1
25994
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25995
 
SELECT f_int1, f_int1, '', '', 'was inserted'
25996
 
FROM t0_template source_tab
25997
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25998
 
        
25999
 
# check transactions-5 success:         1
26000
 
ROLLBACK WORK;
26001
 
        
26002
 
# check transactions-6 success:         1
26003
 
# INFO: Storage engine used for t1 seems to be transactional.
26004
 
COMMIT;
26005
 
        
26006
 
# check transactions-7 success:         1
26007
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
26008
 
COMMIT WORK;
26009
 
SET @@session.sql_mode = 'traditional';
26010
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
26011
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26012
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
26013
 
'', '', 'was inserted' FROM t0_template
26014
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26015
 
ERROR 22012: Division by 0
26016
 
COMMIT;
26017
 
        
26018
 
# check transactions-8 success:         1
26019
 
# INFO: Storage engine used for t1 seems to be able to revert
26020
 
#       changes made by the failing statement.
26021
 
SET @@session.sql_mode = '';
26022
 
SET AUTOCOMMIT= 1;
26023
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
26024
 
COMMIT WORK;
26025
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
26026
 
        
26027
 
# check special-1 success:      1
26028
 
UPDATE t1 SET f_charbig = '';
26029
 
        
26030
 
# check special-2 success:      1
26031
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
26032
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26033
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
26034
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26035
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26036
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26037
 
'just inserted' FROM t0_template
26038
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26039
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
26040
 
BEGIN
26041
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26042
 
f_charbig = 'updated by trigger'
26043
 
      WHERE f_int1 = new.f_int1;
26044
 
END|
26045
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26046
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26047
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26048
 
        
26049
 
# check trigger-1 success:      1
26050
 
DROP TRIGGER trg_1;
26051
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26052
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26053
 
f_charbig = 'just inserted'
26054
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26055
 
DELETE FROM t0_aux
26056
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26057
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26058
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26059
 
'just inserted' FROM t0_template
26060
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26061
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
26062
 
BEGIN
26063
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26064
 
f_charbig = 'updated by trigger'
26065
 
      WHERE f_int1 = new.f_int1;
26066
 
END|
26067
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26068
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26069
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26070
 
        
26071
 
# check trigger-2 success:      1
26072
 
DROP TRIGGER trg_1;
26073
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26074
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26075
 
f_charbig = 'just inserted'
26076
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26077
 
DELETE FROM t0_aux
26078
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26079
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26080
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26081
 
'just inserted' FROM t0_template
26082
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26083
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26084
 
BEGIN
26085
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26086
 
f_charbig = 'updated by trigger'
26087
 
      WHERE f_int1 = new.f_int1;
26088
 
END|
26089
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26090
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26091
 
        
26092
 
# check trigger-3 success:      1
26093
 
DROP TRIGGER trg_1;
26094
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26095
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26096
 
f_charbig = 'just inserted'
26097
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26098
 
DELETE FROM t0_aux
26099
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26100
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26101
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26102
 
'just inserted' FROM t0_template
26103
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26104
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26105
 
BEGIN
26106
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26107
 
f_charbig = 'updated by trigger'
26108
 
      WHERE f_int1 = - old.f_int1;
26109
 
END|
26110
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26111
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26112
 
        
26113
 
# check trigger-4 success:      1
26114
 
DROP TRIGGER trg_1;
26115
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26116
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26117
 
f_charbig = 'just inserted'
26118
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26119
 
DELETE FROM t0_aux
26120
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26121
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26122
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26123
 
'just inserted' FROM t0_template
26124
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26125
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26126
 
BEGIN
26127
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26128
 
f_charbig = 'updated by trigger'
26129
 
      WHERE f_int1 = new.f_int1;
26130
 
END|
26131
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26132
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26133
 
        
26134
 
# check trigger-5 success:      1
26135
 
DROP TRIGGER trg_1;
26136
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26137
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26138
 
f_charbig = 'just inserted'
26139
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26140
 
DELETE FROM t0_aux
26141
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26142
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26143
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26144
 
'just inserted' FROM t0_template
26145
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26146
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26147
 
BEGIN
26148
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26149
 
f_charbig = 'updated by trigger'
26150
 
      WHERE f_int1 = - old.f_int1;
26151
 
END|
26152
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26153
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26154
 
        
26155
 
# check trigger-6 success:      1
26156
 
DROP TRIGGER trg_1;
26157
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26158
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26159
 
f_charbig = 'just inserted'
26160
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26161
 
DELETE FROM t0_aux
26162
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26163
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26164
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26165
 
'just inserted' FROM t0_template
26166
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26167
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
26168
 
BEGIN
26169
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26170
 
f_charbig = 'updated by trigger'
26171
 
      WHERE f_int1 = - old.f_int1;
26172
 
END|
26173
 
DELETE FROM t0_aux
26174
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26175
 
        
26176
 
# check trigger-7 success:      1
26177
 
DROP TRIGGER trg_1;
26178
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26179
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26180
 
f_charbig = 'just inserted'
26181
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26182
 
DELETE FROM t0_aux
26183
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26184
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26185
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26186
 
'just inserted' FROM t0_template
26187
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26188
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
26189
 
BEGIN
26190
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26191
 
f_charbig = 'updated by trigger'
26192
 
      WHERE f_int1 = - old.f_int1;
26193
 
END|
26194
 
DELETE FROM t0_aux
26195
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26196
 
        
26197
 
# check trigger-8 success:      1
26198
 
DROP TRIGGER trg_1;
26199
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26200
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26201
 
f_charbig = 'just inserted'
26202
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26203
 
DELETE FROM t0_aux
26204
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26205
 
DELETE FROM t1
26206
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26207
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26208
 
BEGIN
26209
 
SET new.f_int1 = old.f_int1 + @max_row,
26210
 
new.f_int2 = old.f_int2 - @max_row,
26211
 
new.f_charbig = '####updated per update trigger####';
26212
 
END|
26213
 
UPDATE t1
26214
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26215
 
f_charbig = '####updated per update statement itself####';
26216
 
        
26217
 
# check trigger-9 success:      1
26218
 
DROP TRIGGER trg_2;
26219
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26220
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26221
 
f_charbig = CONCAT('===',f_char1,'===');
26222
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26223
 
BEGIN
26224
 
SET new.f_int1 = new.f_int1 + @max_row,
26225
 
new.f_int2 = new.f_int2 - @max_row,
26226
 
new.f_charbig = '####updated per update trigger####';
26227
 
END|
26228
 
UPDATE t1
26229
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26230
 
f_charbig = '####updated per update statement itself####';
26231
 
        
26232
 
# check trigger-10 success:     1
26233
 
DROP TRIGGER trg_2;
26234
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26235
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26236
 
f_charbig = CONCAT('===',f_char1,'===');
26237
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26238
 
BEGIN
26239
 
SET new.f_int1 = @my_max1 + @counter,
26240
 
new.f_int2 = @my_min2 - @counter,
26241
 
new.f_charbig = '####updated per insert trigger####';
26242
 
SET @counter = @counter + 1;
26243
 
END|
26244
 
SET @counter = 1;
26245
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26246
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26247
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26248
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26249
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26250
 
ORDER BY f_int1;
26251
 
DROP TRIGGER trg_3;
26252
 
        
26253
 
# check trigger-11 success:     1
26254
 
DELETE FROM t1
26255
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26256
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26257
 
AND f_charbig = '####updated per insert trigger####';
26258
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26259
 
BEGIN
26260
 
SET new.f_int1 = @my_max1 + @counter,
26261
 
new.f_int2 = @my_min2 - @counter,
26262
 
new.f_charbig = '####updated per insert trigger####';
26263
 
SET @counter = @counter + 1;
26264
 
END|
26265
 
SET @counter = 1;
26266
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26267
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
26268
 
SELECT CAST(f_int1 AS CHAR),
26269
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26270
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26271
 
ORDER BY f_int1;
26272
 
DROP TRIGGER trg_3;
26273
 
        
26274
 
# check trigger-12 success:     1
26275
 
DELETE FROM t1
26276
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26277
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26278
 
AND f_charbig = '####updated per insert trigger####';
26279
 
ANALYZE  TABLE t1;
26280
 
Table   Op      Msg_type        Msg_text
26281
 
test.t1 analyze status  OK
26282
 
CHECK    TABLE t1 EXTENDED;
26283
 
Table   Op      Msg_type        Msg_text
26284
 
test.t1 check   status  OK
26285
 
CHECKSUM TABLE t1 EXTENDED;
26286
 
Table   Checksum
26287
 
test.t1 <some_value>
26288
 
OPTIMIZE TABLE t1;
26289
 
Table   Op      Msg_type        Msg_text
26290
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
26291
 
test.t1 optimize        status  OK
26292
 
# check layout success:    1
26293
 
REPAIR   TABLE t1 EXTENDED;
26294
 
Table   Op      Msg_type        Msg_text
26295
 
test.t1 repair  note    The storage engine for the table doesn't support repair
26296
 
# check layout success:    1
26297
 
TRUNCATE t1;
26298
 
        
26299
 
# check TRUNCATE success:       1
26300
 
# check layout success:    1
26301
 
# End usability test (inc/partition_check.inc)
26302
 
DROP TABLE t1;
26303
 
CREATE TABLE t1 (
26304
 
f_int1 INTEGER,
26305
 
f_int2 INTEGER,
26306
 
f_char1 CHAR(20),
26307
 
f_char2 CHAR(20),
26308
 
f_charbig VARCHAR(1000)
26309
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
26310
 
)
26311
 
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
26312
 
(PARTITION part1 VALUES IN (0)
26313
 
(SUBPARTITION sp11, SUBPARTITION sp12),
26314
 
PARTITION part2 VALUES IN (1)
26315
 
(SUBPARTITION sp21, SUBPARTITION sp22),
26316
 
PARTITION part3 VALUES IN (2)
26317
 
(SUBPARTITION sp31, SUBPARTITION sp32),
26318
 
PARTITION part4 VALUES IN (NULL)
26319
 
(SUBPARTITION sp41, SUBPARTITION sp42));
26320
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26321
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
26322
 
# Start usability test (inc/partition_check.inc)
26323
 
create_command
26324
 
SHOW CREATE TABLE t1;
26325
 
Table   Create Table
26326
 
t1      CREATE TABLE `t1` (
26327
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
26328
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
26329
 
  `f_char1` char(20) DEFAULT NULL,
26330
 
  `f_char2` char(20) DEFAULT NULL,
26331
 
  `f_charbig` varchar(1000) DEFAULT NULL,
26332
 
  PRIMARY KEY (`f_int1`,`f_int2`),
26333
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
26334
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
26335
 
 
26336
 
unified filelist
26337
 
t1.frm
26338
 
t1.par
26339
 
 
26340
 
# check prerequisites-1 success:    1
26341
 
# check COUNT(*) success:    1
26342
 
# check MIN/MAX(f_int1) success:    1
26343
 
# check MIN/MAX(f_int2) success:    1
26344
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26345
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26346
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
26347
 
WHERE f_int1 IN (2,3);
26348
 
ERROR 23000: Can't write; duplicate key in table 't1'
26349
 
# check prerequisites-3 success:    1
26350
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
26351
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26352
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
26353
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
26354
 
WHERE f_int1 IN (2,3);
26355
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
26356
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26357
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
26358
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
26359
 
WHERE f_int1 IN (2,3);
26360
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
26361
 
# check read via f_int1 success: 1
26362
 
# check read via f_int2 success: 1
26363
 
        
26364
 
# check multiple-1 success:     1
26365
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
26366
 
        
26367
 
# check multiple-2 success:     1
26368
 
INSERT INTO t1 SELECT * FROM t0_template
26369
 
WHERE MOD(f_int1,3) = 0;
26370
 
        
26371
 
# check multiple-3 success:     1
26372
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
26373
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
26374
 
AND @max_row_div2 + @max_row_div4;
26375
 
        
26376
 
# check multiple-4 success:     1
26377
 
DELETE FROM t1
26378
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
26379
 
AND @max_row_div2 + @max_row_div4 + @max_row;
26380
 
        
26381
 
# check multiple-5 success:     1
26382
 
SELECT COUNT(*) INTO @try_count FROM t0_template
26383
 
WHERE MOD(f_int1,3) = 0
26384
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26385
 
SELECT COUNT(*) INTO @clash_count
26386
 
FROM t1 INNER JOIN t0_template USING(f_int1)
26387
 
WHERE MOD(f_int1,3) = 0
26388
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26389
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
26390
 
INSERT INTO t1
26391
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
26392
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26393
 
f_charbig = '#SINGLE#';
26394
 
        
26395
 
# check single-1 success:       1
26396
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
26397
 
INSERT INTO t1
26398
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
26399
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26400
 
f_charbig = '#SINGLE#';
26401
 
        
26402
 
# check single-2 success:       1
26403
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
26404
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
26405
 
UPDATE t1 SET f_int1 = @cur_value2
26406
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
26407
 
        
26408
 
# check single-3 success:       1
26409
 
SET @cur_value1= -1;
26410
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
26411
 
UPDATE t1 SET f_int1 = @cur_value1
26412
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
26413
 
        
26414
 
# check single-4 success:       1
26415
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
26416
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
26417
 
        
26418
 
# check single-5 success:       1
26419
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
26420
 
        
26421
 
# check single-6 success:       1
26422
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
26423
 
        
26424
 
# check single-7 success:       1
26425
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
26426
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
26427
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
26428
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
26429
 
f_charbig = '#NULL#';
26430
 
INSERT INTO t1
26431
 
SET f_int1 = NULL , f_int2 = -@max_row,
26432
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
26433
 
f_charbig = '#NULL#';
26434
 
ERROR 23000: Column 'f_int1' cannot be null
26435
 
# check null success:    1
26436
 
DELETE FROM t1
26437
 
WHERE f_int1 = 0 AND f_int2 = 0
26438
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
26439
 
AND f_charbig = '#NULL#';
26440
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26441
 
SELECT f_int1, f_int1, '', '', 'was inserted'
26442
 
   FROM t0_template source_tab
26443
 
WHERE MOD(f_int1,3) = 0
26444
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
26445
 
ON DUPLICATE KEY
26446
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
26447
 
f_int2 = 2 * @max_row + source_tab.f_int1,
26448
 
f_charbig = 'was updated';
26449
 
        
26450
 
# check unique-1-a success:     1
26451
 
        
26452
 
# check unique-1-b success:     1
26453
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
26454
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26455
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26456
 
f_charbig = CONCAT('===',f_char1,'===')
26457
 
WHERE f_charbig = 'was updated';
26458
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26459
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
26460
 
   FROM t0_template source_tab
26461
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26462
 
        
26463
 
# check replace success:        1
26464
 
DELETE FROM t1
26465
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
26466
 
DELETE FROM t1
26467
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
26468
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
26469
 
UPDATE t1 SET f_int2 = f_int1,
26470
 
f_char1 = CAST(f_int1 AS CHAR),
26471
 
f_char2 = CAST(f_int1 AS CHAR),
26472
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
26473
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
26474
 
SET AUTOCOMMIT= 0;
26475
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26476
 
SELECT f_int1, f_int1, '', '', 'was inserted'
26477
 
FROM t0_template source_tab
26478
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26479
 
        
26480
 
# check transactions-1 success:         1
26481
 
COMMIT WORK;
26482
 
        
26483
 
# check transactions-2 success:         1
26484
 
ROLLBACK WORK;
26485
 
        
26486
 
# check transactions-3 success:         1
26487
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
26488
 
COMMIT WORK;
26489
 
ROLLBACK WORK;
26490
 
        
26491
 
# check transactions-4 success:         1
26492
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26493
 
SELECT f_int1, f_int1, '', '', 'was inserted'
26494
 
FROM t0_template source_tab
26495
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26496
 
        
26497
 
# check transactions-5 success:         1
26498
 
ROLLBACK WORK;
26499
 
        
26500
 
# check transactions-6 success:         1
26501
 
# INFO: Storage engine used for t1 seems to be transactional.
26502
 
COMMIT;
26503
 
        
26504
 
# check transactions-7 success:         1
26505
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
26506
 
COMMIT WORK;
26507
 
SET @@session.sql_mode = 'traditional';
26508
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
26509
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26510
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
26511
 
'', '', 'was inserted' FROM t0_template
26512
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26513
 
ERROR 22012: Division by 0
26514
 
COMMIT;
26515
 
        
26516
 
# check transactions-8 success:         1
26517
 
# INFO: Storage engine used for t1 seems to be able to revert
26518
 
#       changes made by the failing statement.
26519
 
SET @@session.sql_mode = '';
26520
 
SET AUTOCOMMIT= 1;
26521
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
26522
 
COMMIT WORK;
26523
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
26524
 
        
26525
 
# check special-1 success:      1
26526
 
UPDATE t1 SET f_charbig = '';
26527
 
        
26528
 
# check special-2 success:      1
26529
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
26530
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26531
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
26532
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26533
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26534
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26535
 
'just inserted' FROM t0_template
26536
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26537
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
26538
 
BEGIN
26539
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26540
 
f_charbig = 'updated by trigger'
26541
 
      WHERE f_int1 = new.f_int1;
26542
 
END|
26543
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26544
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26545
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26546
 
        
26547
 
# check trigger-1 success:      1
26548
 
DROP TRIGGER trg_1;
26549
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26550
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26551
 
f_charbig = 'just inserted'
26552
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26553
 
DELETE FROM t0_aux
26554
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26555
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26556
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26557
 
'just inserted' FROM t0_template
26558
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26559
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
26560
 
BEGIN
26561
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26562
 
f_charbig = 'updated by trigger'
26563
 
      WHERE f_int1 = new.f_int1;
26564
 
END|
26565
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26566
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26567
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26568
 
        
26569
 
# check trigger-2 success:      1
26570
 
DROP TRIGGER trg_1;
26571
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26572
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26573
 
f_charbig = 'just inserted'
26574
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26575
 
DELETE FROM t0_aux
26576
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26577
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26578
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26579
 
'just inserted' FROM t0_template
26580
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26581
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26582
 
BEGIN
26583
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26584
 
f_charbig = 'updated by trigger'
26585
 
      WHERE f_int1 = new.f_int1;
26586
 
END|
26587
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26588
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26589
 
        
26590
 
# check trigger-3 success:      1
26591
 
DROP TRIGGER trg_1;
26592
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26593
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26594
 
f_charbig = 'just inserted'
26595
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26596
 
DELETE FROM t0_aux
26597
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26598
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26599
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26600
 
'just inserted' FROM t0_template
26601
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26602
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26603
 
BEGIN
26604
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26605
 
f_charbig = 'updated by trigger'
26606
 
      WHERE f_int1 = - old.f_int1;
26607
 
END|
26608
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26609
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26610
 
        
26611
 
# check trigger-4 success:      1
26612
 
DROP TRIGGER trg_1;
26613
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26614
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26615
 
f_charbig = 'just inserted'
26616
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26617
 
DELETE FROM t0_aux
26618
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26619
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26620
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26621
 
'just inserted' FROM t0_template
26622
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26623
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26624
 
BEGIN
26625
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26626
 
f_charbig = 'updated by trigger'
26627
 
      WHERE f_int1 = new.f_int1;
26628
 
END|
26629
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26630
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26631
 
        
26632
 
# check trigger-5 success:      1
26633
 
DROP TRIGGER trg_1;
26634
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26635
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26636
 
f_charbig = 'just inserted'
26637
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26638
 
DELETE FROM t0_aux
26639
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26640
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26641
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26642
 
'just inserted' FROM t0_template
26643
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26644
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26645
 
BEGIN
26646
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26647
 
f_charbig = 'updated by trigger'
26648
 
      WHERE f_int1 = - old.f_int1;
26649
 
END|
26650
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26651
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26652
 
        
26653
 
# check trigger-6 success:      1
26654
 
DROP TRIGGER trg_1;
26655
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26656
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26657
 
f_charbig = 'just inserted'
26658
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26659
 
DELETE FROM t0_aux
26660
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26661
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26662
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26663
 
'just inserted' FROM t0_template
26664
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26665
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
26666
 
BEGIN
26667
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26668
 
f_charbig = 'updated by trigger'
26669
 
      WHERE f_int1 = - old.f_int1;
26670
 
END|
26671
 
DELETE FROM t0_aux
26672
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26673
 
        
26674
 
# check trigger-7 success:      1
26675
 
DROP TRIGGER trg_1;
26676
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26677
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26678
 
f_charbig = 'just inserted'
26679
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26680
 
DELETE FROM t0_aux
26681
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26682
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26683
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26684
 
'just inserted' FROM t0_template
26685
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26686
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
26687
 
BEGIN
26688
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26689
 
f_charbig = 'updated by trigger'
26690
 
      WHERE f_int1 = - old.f_int1;
26691
 
END|
26692
 
DELETE FROM t0_aux
26693
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26694
 
        
26695
 
# check trigger-8 success:      1
26696
 
DROP TRIGGER trg_1;
26697
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26698
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26699
 
f_charbig = 'just inserted'
26700
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26701
 
DELETE FROM t0_aux
26702
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26703
 
DELETE FROM t1
26704
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26705
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26706
 
BEGIN
26707
 
SET new.f_int1 = old.f_int1 + @max_row,
26708
 
new.f_int2 = old.f_int2 - @max_row,
26709
 
new.f_charbig = '####updated per update trigger####';
26710
 
END|
26711
 
UPDATE t1
26712
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26713
 
f_charbig = '####updated per update statement itself####';
26714
 
        
26715
 
# check trigger-9 success:      1
26716
 
DROP TRIGGER trg_2;
26717
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26718
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26719
 
f_charbig = CONCAT('===',f_char1,'===');
26720
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26721
 
BEGIN
26722
 
SET new.f_int1 = new.f_int1 + @max_row,
26723
 
new.f_int2 = new.f_int2 - @max_row,
26724
 
new.f_charbig = '####updated per update trigger####';
26725
 
END|
26726
 
UPDATE t1
26727
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26728
 
f_charbig = '####updated per update statement itself####';
26729
 
        
26730
 
# check trigger-10 success:     1
26731
 
DROP TRIGGER trg_2;
26732
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26733
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26734
 
f_charbig = CONCAT('===',f_char1,'===');
26735
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26736
 
BEGIN
26737
 
SET new.f_int1 = @my_max1 + @counter,
26738
 
new.f_int2 = @my_min2 - @counter,
26739
 
new.f_charbig = '####updated per insert trigger####';
26740
 
SET @counter = @counter + 1;
26741
 
END|
26742
 
SET @counter = 1;
26743
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26744
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26745
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26746
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26747
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26748
 
ORDER BY f_int1;
26749
 
DROP TRIGGER trg_3;
26750
 
        
26751
 
# check trigger-11 success:     1
26752
 
DELETE FROM t1
26753
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26754
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26755
 
AND f_charbig = '####updated per insert trigger####';
26756
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26757
 
BEGIN
26758
 
SET new.f_int1 = @my_max1 + @counter,
26759
 
new.f_int2 = @my_min2 - @counter,
26760
 
new.f_charbig = '####updated per insert trigger####';
26761
 
SET @counter = @counter + 1;
26762
 
END|
26763
 
SET @counter = 1;
26764
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26765
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
26766
 
SELECT CAST(f_int1 AS CHAR),
26767
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26768
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26769
 
ORDER BY f_int1;
26770
 
DROP TRIGGER trg_3;
26771
 
        
26772
 
# check trigger-12 success:     1
26773
 
DELETE FROM t1
26774
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26775
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26776
 
AND f_charbig = '####updated per insert trigger####';
26777
 
ANALYZE  TABLE t1;
26778
 
Table   Op      Msg_type        Msg_text
26779
 
test.t1 analyze status  OK
26780
 
CHECK    TABLE t1 EXTENDED;
26781
 
Table   Op      Msg_type        Msg_text
26782
 
test.t1 check   status  OK
26783
 
CHECKSUM TABLE t1 EXTENDED;
26784
 
Table   Checksum
26785
 
test.t1 <some_value>
26786
 
OPTIMIZE TABLE t1;
26787
 
Table   Op      Msg_type        Msg_text
26788
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
26789
 
test.t1 optimize        status  OK
26790
 
# check layout success:    1
26791
 
REPAIR   TABLE t1 EXTENDED;
26792
 
Table   Op      Msg_type        Msg_text
26793
 
test.t1 repair  note    The storage engine for the table doesn't support repair
26794
 
# check layout success:    1
26795
 
TRUNCATE t1;
26796
 
        
26797
 
# check TRUNCATE success:       1
26798
 
# check layout success:    1
26799
 
# End usability test (inc/partition_check.inc)
26800
 
DROP TABLE t1;
26801
 
CREATE TABLE t1 (
26802
 
f_int1 INTEGER,
26803
 
f_int2 INTEGER,
26804
 
f_char1 CHAR(20),
26805
 
f_char2 CHAR(20),
26806
 
f_charbig VARCHAR(1000)
26807
 
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
26808
 
)
26809
 
PARTITION BY LIST(ABS(MOD(f_int1,2)))
26810
 
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
26811
 
(PARTITION part1 VALUES IN (0),
26812
 
PARTITION part2 VALUES IN (1),
26813
 
PARTITION part3 VALUES IN (NULL));
26814
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26815
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
26816
 
# Start usability test (inc/partition_check.inc)
26817
 
create_command
26818
 
SHOW CREATE TABLE t1;
26819
 
Table   Create Table
26820
 
t1      CREATE TABLE `t1` (
26821
 
  `f_int1` int(11) NOT NULL DEFAULT '0',
26822
 
  `f_int2` int(11) NOT NULL DEFAULT '0',
26823
 
  `f_char1` char(20) DEFAULT NULL,
26824
 
  `f_char2` char(20) DEFAULT NULL,
26825
 
  `f_charbig` varchar(1000) DEFAULT NULL,
26826
 
  PRIMARY KEY (`f_int1`,`f_int2`),
26827
 
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
26828
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
26829
 
 
26830
 
unified filelist
26831
 
t1.frm
26832
 
t1.par
26833
 
 
26834
 
# check prerequisites-1 success:    1
26835
 
# check COUNT(*) success:    1
26836
 
# check MIN/MAX(f_int1) success:    1
26837
 
# check MIN/MAX(f_int2) success:    1
26838
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26839
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26840
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
26841
 
WHERE f_int1 IN (2,3);
26842
 
ERROR 23000: Can't write; duplicate key in table 't1'
26843
 
# check prerequisites-3 success:    1
26844
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
26845
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26846
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
26847
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
26848
 
WHERE f_int1 IN (2,3);
26849
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
26850
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26851
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
26852
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
26853
 
WHERE f_int1 IN (2,3);
26854
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
26855
 
# check read via f_int1 success: 1
26856
 
# check read via f_int2 success: 1
26857
 
        
26858
 
# check multiple-1 success:     1
26859
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
26860
 
        
26861
 
# check multiple-2 success:     1
26862
 
INSERT INTO t1 SELECT * FROM t0_template
26863
 
WHERE MOD(f_int1,3) = 0;
26864
 
        
26865
 
# check multiple-3 success:     1
26866
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
26867
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
26868
 
AND @max_row_div2 + @max_row_div4;
26869
 
        
26870
 
# check multiple-4 success:     1
26871
 
DELETE FROM t1
26872
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
26873
 
AND @max_row_div2 + @max_row_div4 + @max_row;
26874
 
        
26875
 
# check multiple-5 success:     1
26876
 
SELECT COUNT(*) INTO @try_count FROM t0_template
26877
 
WHERE MOD(f_int1,3) = 0
26878
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26879
 
SELECT COUNT(*) INTO @clash_count
26880
 
FROM t1 INNER JOIN t0_template USING(f_int1)
26881
 
WHERE MOD(f_int1,3) = 0
26882
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26883
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
26884
 
INSERT INTO t1
26885
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
26886
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26887
 
f_charbig = '#SINGLE#';
26888
 
        
26889
 
# check single-1 success:       1
26890
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
26891
 
INSERT INTO t1
26892
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
26893
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26894
 
f_charbig = '#SINGLE#';
26895
 
        
26896
 
# check single-2 success:       1
26897
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
26898
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
26899
 
UPDATE t1 SET f_int1 = @cur_value2
26900
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
26901
 
        
26902
 
# check single-3 success:       1
26903
 
SET @cur_value1= -1;
26904
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
26905
 
UPDATE t1 SET f_int1 = @cur_value1
26906
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
26907
 
        
26908
 
# check single-4 success:       1
26909
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
26910
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
26911
 
        
26912
 
# check single-5 success:       1
26913
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
26914
 
        
26915
 
# check single-6 success:       1
26916
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
26917
 
        
26918
 
# check single-7 success:       1
26919
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
26920
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
26921
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
26922
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
26923
 
f_charbig = '#NULL#';
26924
 
INSERT INTO t1
26925
 
SET f_int1 = NULL , f_int2 = -@max_row,
26926
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
26927
 
f_charbig = '#NULL#';
26928
 
ERROR 23000: Column 'f_int1' cannot be null
26929
 
# check null success:    1
26930
 
DELETE FROM t1
26931
 
WHERE f_int1 = 0 AND f_int2 = 0
26932
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
26933
 
AND f_charbig = '#NULL#';
26934
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26935
 
SELECT f_int1, f_int1, '', '', 'was inserted'
26936
 
   FROM t0_template source_tab
26937
 
WHERE MOD(f_int1,3) = 0
26938
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
26939
 
ON DUPLICATE KEY
26940
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
26941
 
f_int2 = 2 * @max_row + source_tab.f_int1,
26942
 
f_charbig = 'was updated';
26943
 
        
26944
 
# check unique-1-a success:     1
26945
 
        
26946
 
# check unique-1-b success:     1
26947
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
26948
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26949
 
f_int2 = CAST(f_char1 AS SIGNED INT),
26950
 
f_charbig = CONCAT('===',f_char1,'===')
26951
 
WHERE f_charbig = 'was updated';
26952
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26953
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
26954
 
   FROM t0_template source_tab
26955
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26956
 
        
26957
 
# check replace success:        1
26958
 
DELETE FROM t1
26959
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
26960
 
DELETE FROM t1
26961
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
26962
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
26963
 
UPDATE t1 SET f_int2 = f_int1,
26964
 
f_char1 = CAST(f_int1 AS CHAR),
26965
 
f_char2 = CAST(f_int1 AS CHAR),
26966
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
26967
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
26968
 
SET AUTOCOMMIT= 0;
26969
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26970
 
SELECT f_int1, f_int1, '', '', 'was inserted'
26971
 
FROM t0_template source_tab
26972
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26973
 
        
26974
 
# check transactions-1 success:         1
26975
 
COMMIT WORK;
26976
 
        
26977
 
# check transactions-2 success:         1
26978
 
ROLLBACK WORK;
26979
 
        
26980
 
# check transactions-3 success:         1
26981
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
26982
 
COMMIT WORK;
26983
 
ROLLBACK WORK;
26984
 
        
26985
 
# check transactions-4 success:         1
26986
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26987
 
SELECT f_int1, f_int1, '', '', 'was inserted'
26988
 
FROM t0_template source_tab
26989
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26990
 
        
26991
 
# check transactions-5 success:         1
26992
 
ROLLBACK WORK;
26993
 
        
26994
 
# check transactions-6 success:         1
26995
 
# INFO: Storage engine used for t1 seems to be transactional.
26996
 
COMMIT;
26997
 
        
26998
 
# check transactions-7 success:         1
26999
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
27000
 
COMMIT WORK;
27001
 
SET @@session.sql_mode = 'traditional';
27002
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
27003
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27004
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
27005
 
'', '', 'was inserted' FROM t0_template
27006
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27007
 
ERROR 22012: Division by 0
27008
 
COMMIT;
27009
 
        
27010
 
# check transactions-8 success:         1
27011
 
# INFO: Storage engine used for t1 seems to be able to revert
27012
 
#       changes made by the failing statement.
27013
 
SET @@session.sql_mode = '';
27014
 
SET AUTOCOMMIT= 1;
27015
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
27016
 
COMMIT WORK;
27017
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
27018
 
        
27019
 
# check special-1 success:      1
27020
 
UPDATE t1 SET f_charbig = '';
27021
 
        
27022
 
# check special-2 success:      1
27023
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
27024
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27025
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
27026
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27027
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27028
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27029
 
'just inserted' FROM t0_template
27030
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27031
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
27032
 
BEGIN
27033
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27034
 
f_charbig = 'updated by trigger'
27035
 
      WHERE f_int1 = new.f_int1;
27036
 
END|
27037
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27038
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27039
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27040
 
        
27041
 
# check trigger-1 success:      1
27042
 
DROP TRIGGER trg_1;
27043
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27044
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27045
 
f_charbig = 'just inserted'
27046
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27047
 
DELETE FROM t0_aux
27048
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27049
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27050
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27051
 
'just inserted' FROM t0_template
27052
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27053
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
27054
 
BEGIN
27055
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27056
 
f_charbig = 'updated by trigger'
27057
 
      WHERE f_int1 = new.f_int1;
27058
 
END|
27059
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27060
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27061
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27062
 
        
27063
 
# check trigger-2 success:      1
27064
 
DROP TRIGGER trg_1;
27065
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27066
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27067
 
f_charbig = 'just inserted'
27068
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27069
 
DELETE FROM t0_aux
27070
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27071
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27072
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27073
 
'just inserted' FROM t0_template
27074
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27075
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27076
 
BEGIN
27077
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27078
 
f_charbig = 'updated by trigger'
27079
 
      WHERE f_int1 = new.f_int1;
27080
 
END|
27081
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27082
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27083
 
        
27084
 
# check trigger-3 success:      1
27085
 
DROP TRIGGER trg_1;
27086
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27087
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27088
 
f_charbig = 'just inserted'
27089
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27090
 
DELETE FROM t0_aux
27091
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27092
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27093
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27094
 
'just inserted' FROM t0_template
27095
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27096
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27097
 
BEGIN
27098
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27099
 
f_charbig = 'updated by trigger'
27100
 
      WHERE f_int1 = - old.f_int1;
27101
 
END|
27102
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27103
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27104
 
        
27105
 
# check trigger-4 success:      1
27106
 
DROP TRIGGER trg_1;
27107
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27108
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27109
 
f_charbig = 'just inserted'
27110
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27111
 
DELETE FROM t0_aux
27112
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27113
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27114
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27115
 
'just inserted' FROM t0_template
27116
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27117
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27118
 
BEGIN
27119
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27120
 
f_charbig = 'updated by trigger'
27121
 
      WHERE f_int1 = new.f_int1;
27122
 
END|
27123
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27124
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27125
 
        
27126
 
# check trigger-5 success:      1
27127
 
DROP TRIGGER trg_1;
27128
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27129
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27130
 
f_charbig = 'just inserted'
27131
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27132
 
DELETE FROM t0_aux
27133
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27134
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27135
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27136
 
'just inserted' FROM t0_template
27137
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27138
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27139
 
BEGIN
27140
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27141
 
f_charbig = 'updated by trigger'
27142
 
      WHERE f_int1 = - old.f_int1;
27143
 
END|
27144
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27145
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27146
 
        
27147
 
# check trigger-6 success:      1
27148
 
DROP TRIGGER trg_1;
27149
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27150
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27151
 
f_charbig = 'just inserted'
27152
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27153
 
DELETE FROM t0_aux
27154
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27155
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27156
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27157
 
'just inserted' FROM t0_template
27158
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27159
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
27160
 
BEGIN
27161
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27162
 
f_charbig = 'updated by trigger'
27163
 
      WHERE f_int1 = - old.f_int1;
27164
 
END|
27165
 
DELETE FROM t0_aux
27166
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27167
 
        
27168
 
# check trigger-7 success:      1
27169
 
DROP TRIGGER trg_1;
27170
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27171
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27172
 
f_charbig = 'just inserted'
27173
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27174
 
DELETE FROM t0_aux
27175
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27176
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27177
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27178
 
'just inserted' FROM t0_template
27179
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27180
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
27181
 
BEGIN
27182
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27183
 
f_charbig = 'updated by trigger'
27184
 
      WHERE f_int1 = - old.f_int1;
27185
 
END|
27186
 
DELETE FROM t0_aux
27187
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27188
 
        
27189
 
# check trigger-8 success:      1
27190
 
DROP TRIGGER trg_1;
27191
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27192
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27193
 
f_charbig = 'just inserted'
27194
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27195
 
DELETE FROM t0_aux
27196
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27197
 
DELETE FROM t1
27198
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27199
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27200
 
BEGIN
27201
 
SET new.f_int1 = old.f_int1 + @max_row,
27202
 
new.f_int2 = old.f_int2 - @max_row,
27203
 
new.f_charbig = '####updated per update trigger####';
27204
 
END|
27205
 
UPDATE t1
27206
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27207
 
f_charbig = '####updated per update statement itself####';
27208
 
        
27209
 
# check trigger-9 success:      1
27210
 
DROP TRIGGER trg_2;
27211
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27212
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27213
 
f_charbig = CONCAT('===',f_char1,'===');
27214
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27215
 
BEGIN
27216
 
SET new.f_int1 = new.f_int1 + @max_row,
27217
 
new.f_int2 = new.f_int2 - @max_row,
27218
 
new.f_charbig = '####updated per update trigger####';
27219
 
END|
27220
 
UPDATE t1
27221
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27222
 
f_charbig = '####updated per update statement itself####';
27223
 
        
27224
 
# check trigger-10 success:     1
27225
 
DROP TRIGGER trg_2;
27226
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27227
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27228
 
f_charbig = CONCAT('===',f_char1,'===');
27229
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27230
 
BEGIN
27231
 
SET new.f_int1 = @my_max1 + @counter,
27232
 
new.f_int2 = @my_min2 - @counter,
27233
 
new.f_charbig = '####updated per insert trigger####';
27234
 
SET @counter = @counter + 1;
27235
 
END|
27236
 
SET @counter = 1;
27237
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27238
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27239
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27240
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27241
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27242
 
ORDER BY f_int1;
27243
 
DROP TRIGGER trg_3;
27244
 
        
27245
 
# check trigger-11 success:     1
27246
 
DELETE FROM t1
27247
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27248
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27249
 
AND f_charbig = '####updated per insert trigger####';
27250
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27251
 
BEGIN
27252
 
SET new.f_int1 = @my_max1 + @counter,
27253
 
new.f_int2 = @my_min2 - @counter,
27254
 
new.f_charbig = '####updated per insert trigger####';
27255
 
SET @counter = @counter + 1;
27256
 
END|
27257
 
SET @counter = 1;
27258
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27259
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
27260
 
SELECT CAST(f_int1 AS CHAR),
27261
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27262
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27263
 
ORDER BY f_int1;
27264
 
DROP TRIGGER trg_3;
27265
 
        
27266
 
# check trigger-12 success:     1
27267
 
DELETE FROM t1
27268
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27269
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27270
 
AND f_charbig = '####updated per insert trigger####';
27271
 
ANALYZE  TABLE t1;
27272
 
Table   Op      Msg_type        Msg_text
27273
 
test.t1 analyze status  OK
27274
 
CHECK    TABLE t1 EXTENDED;
27275
 
Table   Op      Msg_type        Msg_text
27276
 
test.t1 check   status  OK
27277
 
CHECKSUM TABLE t1 EXTENDED;
27278
 
Table   Checksum
27279
 
test.t1 <some_value>
27280
 
OPTIMIZE TABLE t1;
27281
 
Table   Op      Msg_type        Msg_text
27282
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
27283
 
test.t1 optimize        status  OK
27284
 
# check layout success:    1
27285
 
REPAIR   TABLE t1 EXTENDED;
27286
 
Table   Op      Msg_type        Msg_text
27287
 
test.t1 repair  note    The storage engine for the table doesn't support repair
27288
 
# check layout success:    1
27289
 
TRUNCATE t1;
27290
 
        
27291
 
# check TRUNCATE success:       1
27292
 
# check layout success:    1
27293
 
# End usability test (inc/partition_check.inc)
27294
 
DROP TABLE t1;
27295
 
DROP TABLE IF EXISTS t1;
27296
 
CREATE TABLE t1 (
27297
 
f_int1 INTEGER,
27298
 
f_int2 INTEGER,
27299
 
f_char1 CHAR(20),
27300
 
f_char2 CHAR(20),
27301
 
f_charbig VARCHAR(1000)
27302
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
27303
 
)
27304
 
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
27305
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27306
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
27307
 
# Start usability test (inc/partition_check.inc)
27308
 
create_command
27309
 
SHOW CREATE TABLE t1;
27310
 
Table   Create Table
27311
 
t1      CREATE TABLE `t1` (
27312
 
  `f_int1` int(11) DEFAULT NULL,
27313
 
  `f_int2` int(11) DEFAULT NULL,
27314
 
  `f_char1` char(20) DEFAULT NULL,
27315
 
  `f_char2` char(20) DEFAULT NULL,
27316
 
  `f_charbig` varchar(1000) DEFAULT NULL,
27317
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
27318
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
27319
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1 + f_int2) PARTITIONS 2  */
27320
 
 
27321
 
unified filelist
27322
 
t1.frm
27323
 
t1.par
27324
 
 
27325
 
# check prerequisites-1 success:    1
27326
 
# check COUNT(*) success:    1
27327
 
# check MIN/MAX(f_int1) success:    1
27328
 
# check MIN/MAX(f_int2) success:    1
27329
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27330
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27331
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
27332
 
WHERE f_int1 IN (2,3);
27333
 
ERROR 23000: Can't write; duplicate key in table 't1'
27334
 
# check prerequisites-3 success:    1
27335
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
27336
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27337
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
27338
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
27339
 
WHERE f_int1 IN (2,3);
27340
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
27341
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27342
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
27343
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
27344
 
WHERE f_int1 IN (2,3);
27345
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
27346
 
# check read via f_int1 success: 1
27347
 
# check read via f_int2 success: 1
27348
 
        
27349
 
# check multiple-1 success:     1
27350
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
27351
 
        
27352
 
# check multiple-2 success:     1
27353
 
INSERT INTO t1 SELECT * FROM t0_template
27354
 
WHERE MOD(f_int1,3) = 0;
27355
 
        
27356
 
# check multiple-3 success:     1
27357
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
27358
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
27359
 
AND @max_row_div2 + @max_row_div4;
27360
 
        
27361
 
# check multiple-4 success:     1
27362
 
DELETE FROM t1
27363
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
27364
 
AND @max_row_div2 + @max_row_div4 + @max_row;
27365
 
        
27366
 
# check multiple-5 success:     1
27367
 
SELECT COUNT(*) INTO @try_count FROM t0_template
27368
 
WHERE MOD(f_int1,3) = 0
27369
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27370
 
SELECT COUNT(*) INTO @clash_count
27371
 
FROM t1 INNER JOIN t0_template USING(f_int1)
27372
 
WHERE MOD(f_int1,3) = 0
27373
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27374
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
27375
 
INSERT INTO t1
27376
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
27377
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27378
 
f_charbig = '#SINGLE#';
27379
 
        
27380
 
# check single-1 success:       1
27381
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
27382
 
INSERT INTO t1
27383
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
27384
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27385
 
f_charbig = '#SINGLE#';
27386
 
        
27387
 
# check single-2 success:       1
27388
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
27389
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
27390
 
UPDATE t1 SET f_int1 = @cur_value2
27391
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
27392
 
        
27393
 
# check single-3 success:       1
27394
 
SET @cur_value1= -1;
27395
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
27396
 
UPDATE t1 SET f_int1 = @cur_value1
27397
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
27398
 
        
27399
 
# check single-4 success:       1
27400
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
27401
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
27402
 
        
27403
 
# check single-5 success:       1
27404
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
27405
 
        
27406
 
# check single-6 success:       1
27407
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
27408
 
        
27409
 
# check single-7 success:       1
27410
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
27411
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
27412
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
27413
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
27414
 
f_charbig = '#NULL#';
27415
 
INSERT INTO t1
27416
 
SET f_int1 = NULL , f_int2 = -@max_row,
27417
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
27418
 
f_charbig = '#NULL#';
27419
 
# check null success:    1
27420
 
        
27421
 
# check null-1 success:         1
27422
 
UPDATE t1 SET f_int1 = -@max_row
27423
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
27424
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
27425
 
        
27426
 
# check null-2 success:         1
27427
 
UPDATE t1 SET f_int1 = NULL
27428
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
27429
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
27430
 
        
27431
 
# check null-3 success:         1
27432
 
DELETE FROM t1
27433
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
27434
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
27435
 
        
27436
 
# check null-4 success:         1
27437
 
DELETE FROM t1
27438
 
WHERE f_int1 = 0 AND f_int2 = 0
27439
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
27440
 
AND f_charbig = '#NULL#';
27441
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27442
 
SELECT f_int1, f_int1, '', '', 'was inserted'
27443
 
   FROM t0_template source_tab
27444
 
WHERE MOD(f_int1,3) = 0
27445
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
27446
 
ON DUPLICATE KEY
27447
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
27448
 
f_int2 = 2 * @max_row + source_tab.f_int1,
27449
 
f_charbig = 'was updated';
27450
 
        
27451
 
# check unique-1-a success:     1
27452
 
        
27453
 
# check unique-1-b success:     1
27454
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
27455
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27456
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27457
 
f_charbig = CONCAT('===',f_char1,'===')
27458
 
WHERE f_charbig = 'was updated';
27459
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27460
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
27461
 
   FROM t0_template source_tab
27462
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27463
 
        
27464
 
# check replace success:        1
27465
 
DELETE FROM t1
27466
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
27467
 
DELETE FROM t1
27468
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
27469
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
27470
 
UPDATE t1 SET f_int2 = f_int1,
27471
 
f_char1 = CAST(f_int1 AS CHAR),
27472
 
f_char2 = CAST(f_int1 AS CHAR),
27473
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
27474
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
27475
 
SET AUTOCOMMIT= 0;
27476
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27477
 
SELECT f_int1, f_int1, '', '', 'was inserted'
27478
 
FROM t0_template source_tab
27479
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27480
 
        
27481
 
# check transactions-1 success:         1
27482
 
COMMIT WORK;
27483
 
        
27484
 
# check transactions-2 success:         1
27485
 
ROLLBACK WORK;
27486
 
        
27487
 
# check transactions-3 success:         1
27488
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
27489
 
COMMIT WORK;
27490
 
ROLLBACK WORK;
27491
 
        
27492
 
# check transactions-4 success:         1
27493
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27494
 
SELECT f_int1, f_int1, '', '', 'was inserted'
27495
 
FROM t0_template source_tab
27496
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27497
 
        
27498
 
# check transactions-5 success:         1
27499
 
ROLLBACK WORK;
27500
 
        
27501
 
# check transactions-6 success:         1
27502
 
# INFO: Storage engine used for t1 seems to be transactional.
27503
 
COMMIT;
27504
 
        
27505
 
# check transactions-7 success:         1
27506
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
27507
 
COMMIT WORK;
27508
 
SET @@session.sql_mode = 'traditional';
27509
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
27510
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27511
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
27512
 
'', '', 'was inserted' FROM t0_template
27513
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27514
 
ERROR 22012: Division by 0
27515
 
COMMIT;
27516
 
        
27517
 
# check transactions-8 success:         1
27518
 
# INFO: Storage engine used for t1 seems to be able to revert
27519
 
#       changes made by the failing statement.
27520
 
SET @@session.sql_mode = '';
27521
 
SET AUTOCOMMIT= 1;
27522
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
27523
 
COMMIT WORK;
27524
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
27525
 
        
27526
 
# check special-1 success:      1
27527
 
UPDATE t1 SET f_charbig = '';
27528
 
        
27529
 
# check special-2 success:      1
27530
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
27531
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27532
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
27533
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27534
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27535
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27536
 
'just inserted' FROM t0_template
27537
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27538
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
27539
 
BEGIN
27540
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27541
 
f_charbig = 'updated by trigger'
27542
 
      WHERE f_int1 = new.f_int1;
27543
 
END|
27544
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27545
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27546
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27547
 
        
27548
 
# check trigger-1 success:      1
27549
 
DROP TRIGGER trg_1;
27550
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27551
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27552
 
f_charbig = 'just inserted'
27553
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27554
 
DELETE FROM t0_aux
27555
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27556
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27557
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27558
 
'just inserted' FROM t0_template
27559
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27560
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
27561
 
BEGIN
27562
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27563
 
f_charbig = 'updated by trigger'
27564
 
      WHERE f_int1 = new.f_int1;
27565
 
END|
27566
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27567
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27568
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27569
 
        
27570
 
# check trigger-2 success:      1
27571
 
DROP TRIGGER trg_1;
27572
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27573
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27574
 
f_charbig = 'just inserted'
27575
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27576
 
DELETE FROM t0_aux
27577
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27578
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27579
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27580
 
'just inserted' FROM t0_template
27581
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27582
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27583
 
BEGIN
27584
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27585
 
f_charbig = 'updated by trigger'
27586
 
      WHERE f_int1 = new.f_int1;
27587
 
END|
27588
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27589
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27590
 
        
27591
 
# check trigger-3 success:      1
27592
 
DROP TRIGGER trg_1;
27593
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27594
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27595
 
f_charbig = 'just inserted'
27596
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27597
 
DELETE FROM t0_aux
27598
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27599
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27600
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27601
 
'just inserted' FROM t0_template
27602
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27603
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27604
 
BEGIN
27605
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27606
 
f_charbig = 'updated by trigger'
27607
 
      WHERE f_int1 = - old.f_int1;
27608
 
END|
27609
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27610
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27611
 
        
27612
 
# check trigger-4 success:      1
27613
 
DROP TRIGGER trg_1;
27614
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27615
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27616
 
f_charbig = 'just inserted'
27617
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27618
 
DELETE FROM t0_aux
27619
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27620
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27621
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27622
 
'just inserted' FROM t0_template
27623
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27624
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27625
 
BEGIN
27626
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27627
 
f_charbig = 'updated by trigger'
27628
 
      WHERE f_int1 = new.f_int1;
27629
 
END|
27630
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27631
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27632
 
        
27633
 
# check trigger-5 success:      1
27634
 
DROP TRIGGER trg_1;
27635
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27636
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27637
 
f_charbig = 'just inserted'
27638
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27639
 
DELETE FROM t0_aux
27640
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27641
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27642
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27643
 
'just inserted' FROM t0_template
27644
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27645
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27646
 
BEGIN
27647
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27648
 
f_charbig = 'updated by trigger'
27649
 
      WHERE f_int1 = - old.f_int1;
27650
 
END|
27651
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27652
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27653
 
        
27654
 
# check trigger-6 success:      1
27655
 
DROP TRIGGER trg_1;
27656
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27657
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27658
 
f_charbig = 'just inserted'
27659
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27660
 
DELETE FROM t0_aux
27661
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27662
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27663
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27664
 
'just inserted' FROM t0_template
27665
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27666
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
27667
 
BEGIN
27668
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27669
 
f_charbig = 'updated by trigger'
27670
 
      WHERE f_int1 = - old.f_int1;
27671
 
END|
27672
 
DELETE FROM t0_aux
27673
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27674
 
        
27675
 
# check trigger-7 success:      1
27676
 
DROP TRIGGER trg_1;
27677
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27678
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27679
 
f_charbig = 'just inserted'
27680
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27681
 
DELETE FROM t0_aux
27682
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27683
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27684
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27685
 
'just inserted' FROM t0_template
27686
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27687
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
27688
 
BEGIN
27689
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27690
 
f_charbig = 'updated by trigger'
27691
 
      WHERE f_int1 = - old.f_int1;
27692
 
END|
27693
 
DELETE FROM t0_aux
27694
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27695
 
        
27696
 
# check trigger-8 success:      1
27697
 
DROP TRIGGER trg_1;
27698
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27699
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27700
 
f_charbig = 'just inserted'
27701
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27702
 
DELETE FROM t0_aux
27703
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27704
 
DELETE FROM t1
27705
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27706
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27707
 
BEGIN
27708
 
SET new.f_int1 = old.f_int1 + @max_row,
27709
 
new.f_int2 = old.f_int2 - @max_row,
27710
 
new.f_charbig = '####updated per update trigger####';
27711
 
END|
27712
 
UPDATE t1
27713
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27714
 
f_charbig = '####updated per update statement itself####';
27715
 
        
27716
 
# check trigger-9 success:      1
27717
 
DROP TRIGGER trg_2;
27718
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27719
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27720
 
f_charbig = CONCAT('===',f_char1,'===');
27721
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27722
 
BEGIN
27723
 
SET new.f_int1 = new.f_int1 + @max_row,
27724
 
new.f_int2 = new.f_int2 - @max_row,
27725
 
new.f_charbig = '####updated per update trigger####';
27726
 
END|
27727
 
UPDATE t1
27728
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27729
 
f_charbig = '####updated per update statement itself####';
27730
 
        
27731
 
# check trigger-10 success:     1
27732
 
DROP TRIGGER trg_2;
27733
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27734
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27735
 
f_charbig = CONCAT('===',f_char1,'===');
27736
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27737
 
BEGIN
27738
 
SET new.f_int1 = @my_max1 + @counter,
27739
 
new.f_int2 = @my_min2 - @counter,
27740
 
new.f_charbig = '####updated per insert trigger####';
27741
 
SET @counter = @counter + 1;
27742
 
END|
27743
 
SET @counter = 1;
27744
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27745
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27746
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27747
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27748
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27749
 
ORDER BY f_int1;
27750
 
DROP TRIGGER trg_3;
27751
 
        
27752
 
# check trigger-11 success:     1
27753
 
DELETE FROM t1
27754
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27755
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27756
 
AND f_charbig = '####updated per insert trigger####';
27757
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27758
 
BEGIN
27759
 
SET new.f_int1 = @my_max1 + @counter,
27760
 
new.f_int2 = @my_min2 - @counter,
27761
 
new.f_charbig = '####updated per insert trigger####';
27762
 
SET @counter = @counter + 1;
27763
 
END|
27764
 
SET @counter = 1;
27765
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27766
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
27767
 
SELECT CAST(f_int1 AS CHAR),
27768
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27769
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27770
 
ORDER BY f_int1;
27771
 
DROP TRIGGER trg_3;
27772
 
        
27773
 
# check trigger-12 success:     1
27774
 
DELETE FROM t1
27775
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27776
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27777
 
AND f_charbig = '####updated per insert trigger####';
27778
 
ANALYZE  TABLE t1;
27779
 
Table   Op      Msg_type        Msg_text
27780
 
test.t1 analyze status  OK
27781
 
CHECK    TABLE t1 EXTENDED;
27782
 
Table   Op      Msg_type        Msg_text
27783
 
test.t1 check   status  OK
27784
 
CHECKSUM TABLE t1 EXTENDED;
27785
 
Table   Checksum
27786
 
test.t1 <some_value>
27787
 
OPTIMIZE TABLE t1;
27788
 
Table   Op      Msg_type        Msg_text
27789
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
27790
 
test.t1 optimize        status  OK
27791
 
# check layout success:    1
27792
 
REPAIR   TABLE t1 EXTENDED;
27793
 
Table   Op      Msg_type        Msg_text
27794
 
test.t1 repair  note    The storage engine for the table doesn't support repair
27795
 
# check layout success:    1
27796
 
TRUNCATE t1;
27797
 
        
27798
 
# check TRUNCATE success:       1
27799
 
# check layout success:    1
27800
 
# End usability test (inc/partition_check.inc)
27801
 
DROP TABLE t1;
27802
 
CREATE TABLE t1 (
27803
 
f_int1 INTEGER,
27804
 
f_int2 INTEGER,
27805
 
f_char1 CHAR(20),
27806
 
f_char2 CHAR(20),
27807
 
f_charbig VARCHAR(1000)
27808
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
27809
 
)
27810
 
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
27811
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27812
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
27813
 
# Start usability test (inc/partition_check.inc)
27814
 
create_command
27815
 
SHOW CREATE TABLE t1;
27816
 
Table   Create Table
27817
 
t1      CREATE TABLE `t1` (
27818
 
  `f_int1` int(11) DEFAULT NULL,
27819
 
  `f_int2` int(11) DEFAULT NULL,
27820
 
  `f_char1` char(20) DEFAULT NULL,
27821
 
  `f_char2` char(20) DEFAULT NULL,
27822
 
  `f_charbig` varchar(1000) DEFAULT NULL,
27823
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
27824
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
27825
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1,f_int2) PARTITIONS 5  */
27826
 
 
27827
 
unified filelist
27828
 
t1.frm
27829
 
t1.par
27830
 
 
27831
 
# check prerequisites-1 success:    1
27832
 
# check COUNT(*) success:    1
27833
 
# check MIN/MAX(f_int1) success:    1
27834
 
# check MIN/MAX(f_int2) success:    1
27835
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27836
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27837
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
27838
 
WHERE f_int1 IN (2,3);
27839
 
ERROR 23000: Can't write; duplicate key in table 't1'
27840
 
# check prerequisites-3 success:    1
27841
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
27842
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27843
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
27844
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
27845
 
WHERE f_int1 IN (2,3);
27846
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
27847
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27848
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
27849
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
27850
 
WHERE f_int1 IN (2,3);
27851
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
27852
 
# check read via f_int1 success: 1
27853
 
# check read via f_int2 success: 1
27854
 
        
27855
 
# check multiple-1 success:     1
27856
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
27857
 
        
27858
 
# check multiple-2 success:     1
27859
 
INSERT INTO t1 SELECT * FROM t0_template
27860
 
WHERE MOD(f_int1,3) = 0;
27861
 
        
27862
 
# check multiple-3 success:     1
27863
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
27864
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
27865
 
AND @max_row_div2 + @max_row_div4;
27866
 
        
27867
 
# check multiple-4 success:     1
27868
 
DELETE FROM t1
27869
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
27870
 
AND @max_row_div2 + @max_row_div4 + @max_row;
27871
 
        
27872
 
# check multiple-5 success:     1
27873
 
SELECT COUNT(*) INTO @try_count FROM t0_template
27874
 
WHERE MOD(f_int1,3) = 0
27875
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27876
 
SELECT COUNT(*) INTO @clash_count
27877
 
FROM t1 INNER JOIN t0_template USING(f_int1)
27878
 
WHERE MOD(f_int1,3) = 0
27879
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27880
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
27881
 
INSERT INTO t1
27882
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
27883
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27884
 
f_charbig = '#SINGLE#';
27885
 
        
27886
 
# check single-1 success:       1
27887
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
27888
 
INSERT INTO t1
27889
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
27890
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27891
 
f_charbig = '#SINGLE#';
27892
 
        
27893
 
# check single-2 success:       1
27894
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
27895
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
27896
 
UPDATE t1 SET f_int1 = @cur_value2
27897
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
27898
 
        
27899
 
# check single-3 success:       1
27900
 
SET @cur_value1= -1;
27901
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
27902
 
UPDATE t1 SET f_int1 = @cur_value1
27903
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
27904
 
        
27905
 
# check single-4 success:       1
27906
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
27907
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
27908
 
        
27909
 
# check single-5 success:       1
27910
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
27911
 
        
27912
 
# check single-6 success:       1
27913
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
27914
 
        
27915
 
# check single-7 success:       1
27916
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
27917
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
27918
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
27919
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
27920
 
f_charbig = '#NULL#';
27921
 
INSERT INTO t1
27922
 
SET f_int1 = NULL , f_int2 = -@max_row,
27923
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
27924
 
f_charbig = '#NULL#';
27925
 
# check null success:    1
27926
 
        
27927
 
# check null-1 success:         1
27928
 
UPDATE t1 SET f_int1 = -@max_row
27929
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
27930
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
27931
 
        
27932
 
# check null-2 success:         1
27933
 
UPDATE t1 SET f_int1 = NULL
27934
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
27935
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
27936
 
        
27937
 
# check null-3 success:         1
27938
 
DELETE FROM t1
27939
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
27940
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
27941
 
        
27942
 
# check null-4 success:         1
27943
 
DELETE FROM t1
27944
 
WHERE f_int1 = 0 AND f_int2 = 0
27945
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
27946
 
AND f_charbig = '#NULL#';
27947
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27948
 
SELECT f_int1, f_int1, '', '', 'was inserted'
27949
 
   FROM t0_template source_tab
27950
 
WHERE MOD(f_int1,3) = 0
27951
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
27952
 
ON DUPLICATE KEY
27953
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
27954
 
f_int2 = 2 * @max_row + source_tab.f_int1,
27955
 
f_charbig = 'was updated';
27956
 
        
27957
 
# check unique-1-a success:     1
27958
 
        
27959
 
# check unique-1-b success:     1
27960
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
27961
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27962
 
f_int2 = CAST(f_char1 AS SIGNED INT),
27963
 
f_charbig = CONCAT('===',f_char1,'===')
27964
 
WHERE f_charbig = 'was updated';
27965
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27966
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
27967
 
   FROM t0_template source_tab
27968
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27969
 
        
27970
 
# check replace success:        1
27971
 
DELETE FROM t1
27972
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
27973
 
DELETE FROM t1
27974
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
27975
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
27976
 
UPDATE t1 SET f_int2 = f_int1,
27977
 
f_char1 = CAST(f_int1 AS CHAR),
27978
 
f_char2 = CAST(f_int1 AS CHAR),
27979
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
27980
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
27981
 
SET AUTOCOMMIT= 0;
27982
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27983
 
SELECT f_int1, f_int1, '', '', 'was inserted'
27984
 
FROM t0_template source_tab
27985
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27986
 
        
27987
 
# check transactions-1 success:         1
27988
 
COMMIT WORK;
27989
 
        
27990
 
# check transactions-2 success:         1
27991
 
ROLLBACK WORK;
27992
 
        
27993
 
# check transactions-3 success:         1
27994
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
27995
 
COMMIT WORK;
27996
 
ROLLBACK WORK;
27997
 
        
27998
 
# check transactions-4 success:         1
27999
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28000
 
SELECT f_int1, f_int1, '', '', 'was inserted'
28001
 
FROM t0_template source_tab
28002
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28003
 
        
28004
 
# check transactions-5 success:         1
28005
 
ROLLBACK WORK;
28006
 
        
28007
 
# check transactions-6 success:         1
28008
 
# INFO: Storage engine used for t1 seems to be transactional.
28009
 
COMMIT;
28010
 
        
28011
 
# check transactions-7 success:         1
28012
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
28013
 
COMMIT WORK;
28014
 
SET @@session.sql_mode = 'traditional';
28015
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
28016
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28017
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
28018
 
'', '', 'was inserted' FROM t0_template
28019
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28020
 
ERROR 22012: Division by 0
28021
 
COMMIT;
28022
 
        
28023
 
# check transactions-8 success:         1
28024
 
# INFO: Storage engine used for t1 seems to be able to revert
28025
 
#       changes made by the failing statement.
28026
 
SET @@session.sql_mode = '';
28027
 
SET AUTOCOMMIT= 1;
28028
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
28029
 
COMMIT WORK;
28030
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
28031
 
        
28032
 
# check special-1 success:      1
28033
 
UPDATE t1 SET f_charbig = '';
28034
 
        
28035
 
# check special-2 success:      1
28036
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
28037
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28038
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
28039
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28040
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28041
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28042
 
'just inserted' FROM t0_template
28043
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28044
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
28045
 
BEGIN
28046
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28047
 
f_charbig = 'updated by trigger'
28048
 
      WHERE f_int1 = new.f_int1;
28049
 
END|
28050
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28051
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28052
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28053
 
        
28054
 
# check trigger-1 success:      1
28055
 
DROP TRIGGER trg_1;
28056
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28057
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28058
 
f_charbig = 'just inserted'
28059
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28060
 
DELETE FROM t0_aux
28061
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28062
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28063
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28064
 
'just inserted' FROM t0_template
28065
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28066
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
28067
 
BEGIN
28068
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28069
 
f_charbig = 'updated by trigger'
28070
 
      WHERE f_int1 = new.f_int1;
28071
 
END|
28072
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28073
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28074
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28075
 
        
28076
 
# check trigger-2 success:      1
28077
 
DROP TRIGGER trg_1;
28078
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28079
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28080
 
f_charbig = 'just inserted'
28081
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28082
 
DELETE FROM t0_aux
28083
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28084
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28085
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28086
 
'just inserted' FROM t0_template
28087
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28088
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28089
 
BEGIN
28090
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28091
 
f_charbig = 'updated by trigger'
28092
 
      WHERE f_int1 = new.f_int1;
28093
 
END|
28094
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28095
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28096
 
        
28097
 
# check trigger-3 success:      1
28098
 
DROP TRIGGER trg_1;
28099
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28100
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28101
 
f_charbig = 'just inserted'
28102
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28103
 
DELETE FROM t0_aux
28104
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28105
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28106
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28107
 
'just inserted' FROM t0_template
28108
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28109
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28110
 
BEGIN
28111
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28112
 
f_charbig = 'updated by trigger'
28113
 
      WHERE f_int1 = - old.f_int1;
28114
 
END|
28115
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28116
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28117
 
        
28118
 
# check trigger-4 success:      1
28119
 
DROP TRIGGER trg_1;
28120
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28121
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28122
 
f_charbig = 'just inserted'
28123
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28124
 
DELETE FROM t0_aux
28125
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28126
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28127
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28128
 
'just inserted' FROM t0_template
28129
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28130
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28131
 
BEGIN
28132
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28133
 
f_charbig = 'updated by trigger'
28134
 
      WHERE f_int1 = new.f_int1;
28135
 
END|
28136
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28137
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28138
 
        
28139
 
# check trigger-5 success:      1
28140
 
DROP TRIGGER trg_1;
28141
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28142
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28143
 
f_charbig = 'just inserted'
28144
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28145
 
DELETE FROM t0_aux
28146
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28147
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28148
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28149
 
'just inserted' FROM t0_template
28150
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28151
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28152
 
BEGIN
28153
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28154
 
f_charbig = 'updated by trigger'
28155
 
      WHERE f_int1 = - old.f_int1;
28156
 
END|
28157
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28158
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28159
 
        
28160
 
# check trigger-6 success:      1
28161
 
DROP TRIGGER trg_1;
28162
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28163
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28164
 
f_charbig = 'just inserted'
28165
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28166
 
DELETE FROM t0_aux
28167
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28168
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28169
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28170
 
'just inserted' FROM t0_template
28171
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28172
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
28173
 
BEGIN
28174
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28175
 
f_charbig = 'updated by trigger'
28176
 
      WHERE f_int1 = - old.f_int1;
28177
 
END|
28178
 
DELETE FROM t0_aux
28179
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28180
 
        
28181
 
# check trigger-7 success:      1
28182
 
DROP TRIGGER trg_1;
28183
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28184
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28185
 
f_charbig = 'just inserted'
28186
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28187
 
DELETE FROM t0_aux
28188
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28189
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28190
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28191
 
'just inserted' FROM t0_template
28192
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28193
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
28194
 
BEGIN
28195
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28196
 
f_charbig = 'updated by trigger'
28197
 
      WHERE f_int1 = - old.f_int1;
28198
 
END|
28199
 
DELETE FROM t0_aux
28200
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28201
 
        
28202
 
# check trigger-8 success:      1
28203
 
DROP TRIGGER trg_1;
28204
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28205
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28206
 
f_charbig = 'just inserted'
28207
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28208
 
DELETE FROM t0_aux
28209
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28210
 
DELETE FROM t1
28211
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28212
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28213
 
BEGIN
28214
 
SET new.f_int1 = old.f_int1 + @max_row,
28215
 
new.f_int2 = old.f_int2 - @max_row,
28216
 
new.f_charbig = '####updated per update trigger####';
28217
 
END|
28218
 
UPDATE t1
28219
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28220
 
f_charbig = '####updated per update statement itself####';
28221
 
        
28222
 
# check trigger-9 success:      1
28223
 
DROP TRIGGER trg_2;
28224
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28225
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28226
 
f_charbig = CONCAT('===',f_char1,'===');
28227
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28228
 
BEGIN
28229
 
SET new.f_int1 = new.f_int1 + @max_row,
28230
 
new.f_int2 = new.f_int2 - @max_row,
28231
 
new.f_charbig = '####updated per update trigger####';
28232
 
END|
28233
 
UPDATE t1
28234
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28235
 
f_charbig = '####updated per update statement itself####';
28236
 
        
28237
 
# check trigger-10 success:     1
28238
 
DROP TRIGGER trg_2;
28239
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28240
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28241
 
f_charbig = CONCAT('===',f_char1,'===');
28242
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28243
 
BEGIN
28244
 
SET new.f_int1 = @my_max1 + @counter,
28245
 
new.f_int2 = @my_min2 - @counter,
28246
 
new.f_charbig = '####updated per insert trigger####';
28247
 
SET @counter = @counter + 1;
28248
 
END|
28249
 
SET @counter = 1;
28250
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28251
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28252
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28253
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28254
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28255
 
ORDER BY f_int1;
28256
 
DROP TRIGGER trg_3;
28257
 
        
28258
 
# check trigger-11 success:     1
28259
 
DELETE FROM t1
28260
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28261
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28262
 
AND f_charbig = '####updated per insert trigger####';
28263
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28264
 
BEGIN
28265
 
SET new.f_int1 = @my_max1 + @counter,
28266
 
new.f_int2 = @my_min2 - @counter,
28267
 
new.f_charbig = '####updated per insert trigger####';
28268
 
SET @counter = @counter + 1;
28269
 
END|
28270
 
SET @counter = 1;
28271
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28272
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
28273
 
SELECT CAST(f_int1 AS CHAR),
28274
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28275
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28276
 
ORDER BY f_int1;
28277
 
DROP TRIGGER trg_3;
28278
 
        
28279
 
# check trigger-12 success:     1
28280
 
DELETE FROM t1
28281
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28282
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28283
 
AND f_charbig = '####updated per insert trigger####';
28284
 
ANALYZE  TABLE t1;
28285
 
Table   Op      Msg_type        Msg_text
28286
 
test.t1 analyze status  OK
28287
 
CHECK    TABLE t1 EXTENDED;
28288
 
Table   Op      Msg_type        Msg_text
28289
 
test.t1 check   status  OK
28290
 
CHECKSUM TABLE t1 EXTENDED;
28291
 
Table   Checksum
28292
 
test.t1 <some_value>
28293
 
OPTIMIZE TABLE t1;
28294
 
Table   Op      Msg_type        Msg_text
28295
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
28296
 
test.t1 optimize        status  OK
28297
 
# check layout success:    1
28298
 
REPAIR   TABLE t1 EXTENDED;
28299
 
Table   Op      Msg_type        Msg_text
28300
 
test.t1 repair  note    The storage engine for the table doesn't support repair
28301
 
# check layout success:    1
28302
 
TRUNCATE t1;
28303
 
        
28304
 
# check TRUNCATE success:       1
28305
 
# check layout success:    1
28306
 
# End usability test (inc/partition_check.inc)
28307
 
DROP TABLE t1;
28308
 
CREATE TABLE t1 (
28309
 
f_int1 INTEGER,
28310
 
f_int2 INTEGER,
28311
 
f_char1 CHAR(20),
28312
 
f_char2 CHAR(20),
28313
 
f_charbig VARCHAR(1000)
28314
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
28315
 
)
28316
 
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
28317
 
(PARTITION part_3 VALUES IN (-3),
28318
 
PARTITION part_2 VALUES IN (-2),
28319
 
PARTITION part_1 VALUES IN (-1),
28320
 
PARTITION part_N VALUES IN (NULL),
28321
 
PARTITION part0 VALUES IN (0),
28322
 
PARTITION part1 VALUES IN (1),
28323
 
PARTITION part2 VALUES IN (2),
28324
 
PARTITION part3 VALUES IN (3));
28325
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28326
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
28327
 
# Start usability test (inc/partition_check.inc)
28328
 
create_command
28329
 
SHOW CREATE TABLE t1;
28330
 
Table   Create Table
28331
 
t1      CREATE TABLE `t1` (
28332
 
  `f_int1` int(11) DEFAULT NULL,
28333
 
  `f_int2` int(11) DEFAULT NULL,
28334
 
  `f_char1` char(20) DEFAULT NULL,
28335
 
  `f_char2` char(20) DEFAULT NULL,
28336
 
  `f_charbig` varchar(1000) DEFAULT NULL,
28337
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
28338
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
28339
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
28340
 
 
28341
 
unified filelist
28342
 
t1.frm
28343
 
t1.par
28344
 
 
28345
 
# check prerequisites-1 success:    1
28346
 
# check COUNT(*) success:    1
28347
 
# check MIN/MAX(f_int1) success:    1
28348
 
# check MIN/MAX(f_int2) success:    1
28349
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28350
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28351
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
28352
 
WHERE f_int1 IN (2,3);
28353
 
ERROR 23000: Can't write; duplicate key in table 't1'
28354
 
# check prerequisites-3 success:    1
28355
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
28356
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28357
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28358
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28359
 
WHERE f_int1 IN (2,3);
28360
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
28361
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28362
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28363
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28364
 
WHERE f_int1 IN (2,3);
28365
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
28366
 
# check read via f_int1 success: 1
28367
 
# check read via f_int2 success: 1
28368
 
        
28369
 
# check multiple-1 success:     1
28370
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
28371
 
        
28372
 
# check multiple-2 success:     1
28373
 
INSERT INTO t1 SELECT * FROM t0_template
28374
 
WHERE MOD(f_int1,3) = 0;
28375
 
        
28376
 
# check multiple-3 success:     1
28377
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
28378
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
28379
 
AND @max_row_div2 + @max_row_div4;
28380
 
        
28381
 
# check multiple-4 success:     1
28382
 
DELETE FROM t1
28383
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
28384
 
AND @max_row_div2 + @max_row_div4 + @max_row;
28385
 
        
28386
 
# check multiple-5 success:     1
28387
 
SELECT COUNT(*) INTO @try_count FROM t0_template
28388
 
WHERE MOD(f_int1,3) = 0
28389
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28390
 
SELECT COUNT(*) INTO @clash_count
28391
 
FROM t1 INNER JOIN t0_template USING(f_int1)
28392
 
WHERE MOD(f_int1,3) = 0
28393
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28394
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
28395
 
INSERT INTO t1
28396
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
28397
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28398
 
f_charbig = '#SINGLE#';
28399
 
        
28400
 
# check single-1 success:       1
28401
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
28402
 
INSERT INTO t1
28403
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
28404
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28405
 
f_charbig = '#SINGLE#';
28406
 
        
28407
 
# check single-2 success:       1
28408
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
28409
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
28410
 
UPDATE t1 SET f_int1 = @cur_value2
28411
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
28412
 
        
28413
 
# check single-3 success:       1
28414
 
SET @cur_value1= -1;
28415
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
28416
 
UPDATE t1 SET f_int1 = @cur_value1
28417
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
28418
 
        
28419
 
# check single-4 success:       1
28420
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
28421
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
28422
 
        
28423
 
# check single-5 success:       1
28424
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
28425
 
        
28426
 
# check single-6 success:       1
28427
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
28428
 
        
28429
 
# check single-7 success:       1
28430
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
28431
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
28432
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
28433
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
28434
 
f_charbig = '#NULL#';
28435
 
INSERT INTO t1
28436
 
SET f_int1 = NULL , f_int2 = -@max_row,
28437
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
28438
 
f_charbig = '#NULL#';
28439
 
# check null success:    1
28440
 
        
28441
 
# check null-1 success:         1
28442
 
UPDATE t1 SET f_int1 = -@max_row
28443
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28444
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28445
 
        
28446
 
# check null-2 success:         1
28447
 
UPDATE t1 SET f_int1 = NULL
28448
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28449
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28450
 
        
28451
 
# check null-3 success:         1
28452
 
DELETE FROM t1
28453
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28454
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28455
 
        
28456
 
# check null-4 success:         1
28457
 
DELETE FROM t1
28458
 
WHERE f_int1 = 0 AND f_int2 = 0
28459
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
28460
 
AND f_charbig = '#NULL#';
28461
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28462
 
SELECT f_int1, f_int1, '', '', 'was inserted'
28463
 
   FROM t0_template source_tab
28464
 
WHERE MOD(f_int1,3) = 0
28465
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
28466
 
ON DUPLICATE KEY
28467
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
28468
 
f_int2 = 2 * @max_row + source_tab.f_int1,
28469
 
f_charbig = 'was updated';
28470
 
        
28471
 
# check unique-1-a success:     1
28472
 
        
28473
 
# check unique-1-b success:     1
28474
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
28475
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28476
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28477
 
f_charbig = CONCAT('===',f_char1,'===')
28478
 
WHERE f_charbig = 'was updated';
28479
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28480
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
28481
 
   FROM t0_template source_tab
28482
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28483
 
        
28484
 
# check replace success:        1
28485
 
DELETE FROM t1
28486
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
28487
 
DELETE FROM t1
28488
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
28489
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
28490
 
UPDATE t1 SET f_int2 = f_int1,
28491
 
f_char1 = CAST(f_int1 AS CHAR),
28492
 
f_char2 = CAST(f_int1 AS CHAR),
28493
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
28494
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
28495
 
SET AUTOCOMMIT= 0;
28496
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28497
 
SELECT f_int1, f_int1, '', '', 'was inserted'
28498
 
FROM t0_template source_tab
28499
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28500
 
        
28501
 
# check transactions-1 success:         1
28502
 
COMMIT WORK;
28503
 
        
28504
 
# check transactions-2 success:         1
28505
 
ROLLBACK WORK;
28506
 
        
28507
 
# check transactions-3 success:         1
28508
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
28509
 
COMMIT WORK;
28510
 
ROLLBACK WORK;
28511
 
        
28512
 
# check transactions-4 success:         1
28513
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28514
 
SELECT f_int1, f_int1, '', '', 'was inserted'
28515
 
FROM t0_template source_tab
28516
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28517
 
        
28518
 
# check transactions-5 success:         1
28519
 
ROLLBACK WORK;
28520
 
        
28521
 
# check transactions-6 success:         1
28522
 
# INFO: Storage engine used for t1 seems to be transactional.
28523
 
COMMIT;
28524
 
        
28525
 
# check transactions-7 success:         1
28526
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
28527
 
COMMIT WORK;
28528
 
SET @@session.sql_mode = 'traditional';
28529
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
28530
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28531
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
28532
 
'', '', 'was inserted' FROM t0_template
28533
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28534
 
ERROR 22012: Division by 0
28535
 
COMMIT;
28536
 
        
28537
 
# check transactions-8 success:         1
28538
 
# INFO: Storage engine used for t1 seems to be able to revert
28539
 
#       changes made by the failing statement.
28540
 
SET @@session.sql_mode = '';
28541
 
SET AUTOCOMMIT= 1;
28542
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
28543
 
COMMIT WORK;
28544
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
28545
 
        
28546
 
# check special-1 success:      1
28547
 
UPDATE t1 SET f_charbig = '';
28548
 
        
28549
 
# check special-2 success:      1
28550
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
28551
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28552
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
28553
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28554
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28555
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28556
 
'just inserted' FROM t0_template
28557
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28558
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
28559
 
BEGIN
28560
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28561
 
f_charbig = 'updated by trigger'
28562
 
      WHERE f_int1 = new.f_int1;
28563
 
END|
28564
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28565
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28566
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28567
 
        
28568
 
# check trigger-1 success:      1
28569
 
DROP TRIGGER trg_1;
28570
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28571
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28572
 
f_charbig = 'just inserted'
28573
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28574
 
DELETE FROM t0_aux
28575
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28576
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28577
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28578
 
'just inserted' FROM t0_template
28579
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28580
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
28581
 
BEGIN
28582
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28583
 
f_charbig = 'updated by trigger'
28584
 
      WHERE f_int1 = new.f_int1;
28585
 
END|
28586
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28587
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28588
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28589
 
        
28590
 
# check trigger-2 success:      1
28591
 
DROP TRIGGER trg_1;
28592
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28593
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28594
 
f_charbig = 'just inserted'
28595
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28596
 
DELETE FROM t0_aux
28597
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28598
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28599
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28600
 
'just inserted' FROM t0_template
28601
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28602
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28603
 
BEGIN
28604
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28605
 
f_charbig = 'updated by trigger'
28606
 
      WHERE f_int1 = new.f_int1;
28607
 
END|
28608
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28609
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28610
 
        
28611
 
# check trigger-3 success:      1
28612
 
DROP TRIGGER trg_1;
28613
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28614
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28615
 
f_charbig = 'just inserted'
28616
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28617
 
DELETE FROM t0_aux
28618
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28619
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28620
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28621
 
'just inserted' FROM t0_template
28622
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28623
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28624
 
BEGIN
28625
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28626
 
f_charbig = 'updated by trigger'
28627
 
      WHERE f_int1 = - old.f_int1;
28628
 
END|
28629
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28630
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28631
 
        
28632
 
# check trigger-4 success:      1
28633
 
DROP TRIGGER trg_1;
28634
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28635
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28636
 
f_charbig = 'just inserted'
28637
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28638
 
DELETE FROM t0_aux
28639
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28640
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28641
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28642
 
'just inserted' FROM t0_template
28643
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28644
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28645
 
BEGIN
28646
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28647
 
f_charbig = 'updated by trigger'
28648
 
      WHERE f_int1 = new.f_int1;
28649
 
END|
28650
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28651
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28652
 
        
28653
 
# check trigger-5 success:      1
28654
 
DROP TRIGGER trg_1;
28655
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28656
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28657
 
f_charbig = 'just inserted'
28658
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28659
 
DELETE FROM t0_aux
28660
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28661
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28662
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28663
 
'just inserted' FROM t0_template
28664
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28665
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28666
 
BEGIN
28667
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28668
 
f_charbig = 'updated by trigger'
28669
 
      WHERE f_int1 = - old.f_int1;
28670
 
END|
28671
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28672
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28673
 
        
28674
 
# check trigger-6 success:      1
28675
 
DROP TRIGGER trg_1;
28676
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28677
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28678
 
f_charbig = 'just inserted'
28679
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28680
 
DELETE FROM t0_aux
28681
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28682
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28683
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28684
 
'just inserted' FROM t0_template
28685
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28686
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
28687
 
BEGIN
28688
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28689
 
f_charbig = 'updated by trigger'
28690
 
      WHERE f_int1 = - old.f_int1;
28691
 
END|
28692
 
DELETE FROM t0_aux
28693
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28694
 
        
28695
 
# check trigger-7 success:      1
28696
 
DROP TRIGGER trg_1;
28697
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28698
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28699
 
f_charbig = 'just inserted'
28700
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28701
 
DELETE FROM t0_aux
28702
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28703
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28704
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28705
 
'just inserted' FROM t0_template
28706
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28707
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
28708
 
BEGIN
28709
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28710
 
f_charbig = 'updated by trigger'
28711
 
      WHERE f_int1 = - old.f_int1;
28712
 
END|
28713
 
DELETE FROM t0_aux
28714
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28715
 
        
28716
 
# check trigger-8 success:      1
28717
 
DROP TRIGGER trg_1;
28718
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28719
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28720
 
f_charbig = 'just inserted'
28721
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28722
 
DELETE FROM t0_aux
28723
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28724
 
DELETE FROM t1
28725
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28726
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28727
 
BEGIN
28728
 
SET new.f_int1 = old.f_int1 + @max_row,
28729
 
new.f_int2 = old.f_int2 - @max_row,
28730
 
new.f_charbig = '####updated per update trigger####';
28731
 
END|
28732
 
UPDATE t1
28733
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28734
 
f_charbig = '####updated per update statement itself####';
28735
 
        
28736
 
# check trigger-9 success:      1
28737
 
DROP TRIGGER trg_2;
28738
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28739
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28740
 
f_charbig = CONCAT('===',f_char1,'===');
28741
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28742
 
BEGIN
28743
 
SET new.f_int1 = new.f_int1 + @max_row,
28744
 
new.f_int2 = new.f_int2 - @max_row,
28745
 
new.f_charbig = '####updated per update trigger####';
28746
 
END|
28747
 
UPDATE t1
28748
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28749
 
f_charbig = '####updated per update statement itself####';
28750
 
        
28751
 
# check trigger-10 success:     1
28752
 
DROP TRIGGER trg_2;
28753
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28754
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28755
 
f_charbig = CONCAT('===',f_char1,'===');
28756
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28757
 
BEGIN
28758
 
SET new.f_int1 = @my_max1 + @counter,
28759
 
new.f_int2 = @my_min2 - @counter,
28760
 
new.f_charbig = '####updated per insert trigger####';
28761
 
SET @counter = @counter + 1;
28762
 
END|
28763
 
SET @counter = 1;
28764
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28765
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28766
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28767
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28768
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28769
 
ORDER BY f_int1;
28770
 
DROP TRIGGER trg_3;
28771
 
        
28772
 
# check trigger-11 success:     1
28773
 
DELETE FROM t1
28774
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28775
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28776
 
AND f_charbig = '####updated per insert trigger####';
28777
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28778
 
BEGIN
28779
 
SET new.f_int1 = @my_max1 + @counter,
28780
 
new.f_int2 = @my_min2 - @counter,
28781
 
new.f_charbig = '####updated per insert trigger####';
28782
 
SET @counter = @counter + 1;
28783
 
END|
28784
 
SET @counter = 1;
28785
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28786
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
28787
 
SELECT CAST(f_int1 AS CHAR),
28788
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28789
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28790
 
ORDER BY f_int1;
28791
 
DROP TRIGGER trg_3;
28792
 
        
28793
 
# check trigger-12 success:     1
28794
 
DELETE FROM t1
28795
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28796
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28797
 
AND f_charbig = '####updated per insert trigger####';
28798
 
ANALYZE  TABLE t1;
28799
 
Table   Op      Msg_type        Msg_text
28800
 
test.t1 analyze status  OK
28801
 
CHECK    TABLE t1 EXTENDED;
28802
 
Table   Op      Msg_type        Msg_text
28803
 
test.t1 check   status  OK
28804
 
CHECKSUM TABLE t1 EXTENDED;
28805
 
Table   Checksum
28806
 
test.t1 <some_value>
28807
 
OPTIMIZE TABLE t1;
28808
 
Table   Op      Msg_type        Msg_text
28809
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
28810
 
test.t1 optimize        status  OK
28811
 
# check layout success:    1
28812
 
REPAIR   TABLE t1 EXTENDED;
28813
 
Table   Op      Msg_type        Msg_text
28814
 
test.t1 repair  note    The storage engine for the table doesn't support repair
28815
 
# check layout success:    1
28816
 
TRUNCATE t1;
28817
 
        
28818
 
# check TRUNCATE success:       1
28819
 
# check layout success:    1
28820
 
# End usability test (inc/partition_check.inc)
28821
 
DROP TABLE t1;
28822
 
CREATE TABLE t1 (
28823
 
f_int1 INTEGER,
28824
 
f_int2 INTEGER,
28825
 
f_char1 CHAR(20),
28826
 
f_char2 CHAR(20),
28827
 
f_charbig VARCHAR(1000)
28828
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
28829
 
)
28830
 
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
28831
 
(PARTITION parta VALUES LESS THAN (0),
28832
 
PARTITION partb VALUES LESS THAN (5),
28833
 
PARTITION partc VALUES LESS THAN (10),
28834
 
PARTITION partd VALUES LESS THAN (10 + 5),
28835
 
PARTITION parte VALUES LESS THAN (20),
28836
 
PARTITION partf VALUES LESS THAN (2147483646));
28837
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28838
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
28839
 
# Start usability test (inc/partition_check.inc)
28840
 
create_command
28841
 
SHOW CREATE TABLE t1;
28842
 
Table   Create Table
28843
 
t1      CREATE TABLE `t1` (
28844
 
  `f_int1` int(11) DEFAULT NULL,
28845
 
  `f_int2` int(11) DEFAULT NULL,
28846
 
  `f_char1` char(20) DEFAULT NULL,
28847
 
  `f_char2` char(20) DEFAULT NULL,
28848
 
  `f_charbig` varchar(1000) DEFAULT NULL,
28849
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
28850
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
28851
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
28852
 
 
28853
 
unified filelist
28854
 
t1.frm
28855
 
t1.par
28856
 
 
28857
 
# check prerequisites-1 success:    1
28858
 
# check COUNT(*) success:    1
28859
 
# check MIN/MAX(f_int1) success:    1
28860
 
# check MIN/MAX(f_int2) success:    1
28861
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28862
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28863
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
28864
 
WHERE f_int1 IN (2,3);
28865
 
ERROR 23000: Can't write; duplicate key in table 't1'
28866
 
# check prerequisites-3 success:    1
28867
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
28868
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28869
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28870
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28871
 
WHERE f_int1 IN (2,3);
28872
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
28873
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28874
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28875
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28876
 
WHERE f_int1 IN (2,3);
28877
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
28878
 
# check read via f_int1 success: 1
28879
 
# check read via f_int2 success: 1
28880
 
        
28881
 
# check multiple-1 success:     1
28882
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
28883
 
        
28884
 
# check multiple-2 success:     1
28885
 
INSERT INTO t1 SELECT * FROM t0_template
28886
 
WHERE MOD(f_int1,3) = 0;
28887
 
        
28888
 
# check multiple-3 success:     1
28889
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
28890
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
28891
 
AND @max_row_div2 + @max_row_div4;
28892
 
        
28893
 
# check multiple-4 success:     1
28894
 
DELETE FROM t1
28895
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
28896
 
AND @max_row_div2 + @max_row_div4 + @max_row;
28897
 
        
28898
 
# check multiple-5 success:     1
28899
 
SELECT COUNT(*) INTO @try_count FROM t0_template
28900
 
WHERE MOD(f_int1,3) = 0
28901
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28902
 
SELECT COUNT(*) INTO @clash_count
28903
 
FROM t1 INNER JOIN t0_template USING(f_int1)
28904
 
WHERE MOD(f_int1,3) = 0
28905
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28906
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
28907
 
INSERT INTO t1
28908
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
28909
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28910
 
f_charbig = '#SINGLE#';
28911
 
        
28912
 
# check single-1 success:       1
28913
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
28914
 
INSERT INTO t1
28915
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
28916
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28917
 
f_charbig = '#SINGLE#';
28918
 
        
28919
 
# check single-2 success:       1
28920
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
28921
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
28922
 
UPDATE t1 SET f_int1 = @cur_value2
28923
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
28924
 
        
28925
 
# check single-3 success:       1
28926
 
SET @cur_value1= -1;
28927
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
28928
 
UPDATE t1 SET f_int1 = @cur_value1
28929
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
28930
 
        
28931
 
# check single-4 success:       1
28932
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
28933
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
28934
 
        
28935
 
# check single-5 success:       1
28936
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
28937
 
        
28938
 
# check single-6 success:       1
28939
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
28940
 
ERROR HY000: Table has no partition for value 2147483647
28941
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
28942
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
28943
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
28944
 
f_charbig = '#NULL#';
28945
 
INSERT INTO t1
28946
 
SET f_int1 = NULL , f_int2 = -@max_row,
28947
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
28948
 
f_charbig = '#NULL#';
28949
 
# check null success:    1
28950
 
        
28951
 
# check null-1 success:         1
28952
 
UPDATE t1 SET f_int1 = -@max_row
28953
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28954
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28955
 
        
28956
 
# check null-2 success:         1
28957
 
UPDATE t1 SET f_int1 = NULL
28958
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28959
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28960
 
        
28961
 
# check null-3 success:         1
28962
 
DELETE FROM t1
28963
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28964
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28965
 
        
28966
 
# check null-4 success:         1
28967
 
DELETE FROM t1
28968
 
WHERE f_int1 = 0 AND f_int2 = 0
28969
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
28970
 
AND f_charbig = '#NULL#';
28971
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28972
 
SELECT f_int1, f_int1, '', '', 'was inserted'
28973
 
   FROM t0_template source_tab
28974
 
WHERE MOD(f_int1,3) = 0
28975
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
28976
 
ON DUPLICATE KEY
28977
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
28978
 
f_int2 = 2 * @max_row + source_tab.f_int1,
28979
 
f_charbig = 'was updated';
28980
 
        
28981
 
# check unique-1-a success:     1
28982
 
        
28983
 
# check unique-1-b success:     1
28984
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
28985
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28986
 
f_int2 = CAST(f_char1 AS SIGNED INT),
28987
 
f_charbig = CONCAT('===',f_char1,'===')
28988
 
WHERE f_charbig = 'was updated';
28989
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28990
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
28991
 
   FROM t0_template source_tab
28992
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28993
 
        
28994
 
# check replace success:        1
28995
 
DELETE FROM t1
28996
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
28997
 
DELETE FROM t1
28998
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
28999
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
29000
 
UPDATE t1 SET f_int2 = f_int1,
29001
 
f_char1 = CAST(f_int1 AS CHAR),
29002
 
f_char2 = CAST(f_int1 AS CHAR),
29003
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
29004
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
29005
 
SET AUTOCOMMIT= 0;
29006
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29007
 
SELECT f_int1, f_int1, '', '', 'was inserted'
29008
 
FROM t0_template source_tab
29009
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29010
 
        
29011
 
# check transactions-1 success:         1
29012
 
COMMIT WORK;
29013
 
        
29014
 
# check transactions-2 success:         1
29015
 
ROLLBACK WORK;
29016
 
        
29017
 
# check transactions-3 success:         1
29018
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
29019
 
COMMIT WORK;
29020
 
ROLLBACK WORK;
29021
 
        
29022
 
# check transactions-4 success:         1
29023
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29024
 
SELECT f_int1, f_int1, '', '', 'was inserted'
29025
 
FROM t0_template source_tab
29026
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29027
 
        
29028
 
# check transactions-5 success:         1
29029
 
ROLLBACK WORK;
29030
 
        
29031
 
# check transactions-6 success:         1
29032
 
# INFO: Storage engine used for t1 seems to be transactional.
29033
 
COMMIT;
29034
 
        
29035
 
# check transactions-7 success:         1
29036
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
29037
 
COMMIT WORK;
29038
 
SET @@session.sql_mode = 'traditional';
29039
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
29040
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29041
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
29042
 
'', '', 'was inserted' FROM t0_template
29043
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29044
 
ERROR 22012: Division by 0
29045
 
COMMIT;
29046
 
        
29047
 
# check transactions-8 success:         1
29048
 
# INFO: Storage engine used for t1 seems to be able to revert
29049
 
#       changes made by the failing statement.
29050
 
SET @@session.sql_mode = '';
29051
 
SET AUTOCOMMIT= 1;
29052
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
29053
 
COMMIT WORK;
29054
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
29055
 
        
29056
 
# check special-1 success:      1
29057
 
UPDATE t1 SET f_charbig = '';
29058
 
        
29059
 
# check special-2 success:      1
29060
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
29061
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29062
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
29063
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29064
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29065
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29066
 
'just inserted' FROM t0_template
29067
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29068
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
29069
 
BEGIN
29070
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29071
 
f_charbig = 'updated by trigger'
29072
 
      WHERE f_int1 = new.f_int1;
29073
 
END|
29074
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29075
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29076
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29077
 
        
29078
 
# check trigger-1 success:      1
29079
 
DROP TRIGGER trg_1;
29080
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29081
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29082
 
f_charbig = 'just inserted'
29083
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29084
 
DELETE FROM t0_aux
29085
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29086
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29087
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29088
 
'just inserted' FROM t0_template
29089
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29090
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
29091
 
BEGIN
29092
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29093
 
f_charbig = 'updated by trigger'
29094
 
      WHERE f_int1 = new.f_int1;
29095
 
END|
29096
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29097
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29098
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29099
 
        
29100
 
# check trigger-2 success:      1
29101
 
DROP TRIGGER trg_1;
29102
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29103
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29104
 
f_charbig = 'just inserted'
29105
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29106
 
DELETE FROM t0_aux
29107
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29108
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29109
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29110
 
'just inserted' FROM t0_template
29111
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29112
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29113
 
BEGIN
29114
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29115
 
f_charbig = 'updated by trigger'
29116
 
      WHERE f_int1 = new.f_int1;
29117
 
END|
29118
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29119
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29120
 
        
29121
 
# check trigger-3 success:      1
29122
 
DROP TRIGGER trg_1;
29123
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29124
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29125
 
f_charbig = 'just inserted'
29126
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29127
 
DELETE FROM t0_aux
29128
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29129
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29130
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29131
 
'just inserted' FROM t0_template
29132
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29133
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29134
 
BEGIN
29135
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29136
 
f_charbig = 'updated by trigger'
29137
 
      WHERE f_int1 = - old.f_int1;
29138
 
END|
29139
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29140
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29141
 
        
29142
 
# check trigger-4 success:      1
29143
 
DROP TRIGGER trg_1;
29144
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29145
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29146
 
f_charbig = 'just inserted'
29147
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29148
 
DELETE FROM t0_aux
29149
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29150
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29151
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29152
 
'just inserted' FROM t0_template
29153
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29154
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29155
 
BEGIN
29156
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29157
 
f_charbig = 'updated by trigger'
29158
 
      WHERE f_int1 = new.f_int1;
29159
 
END|
29160
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29161
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29162
 
        
29163
 
# check trigger-5 success:      1
29164
 
DROP TRIGGER trg_1;
29165
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29166
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29167
 
f_charbig = 'just inserted'
29168
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29169
 
DELETE FROM t0_aux
29170
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29171
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29172
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29173
 
'just inserted' FROM t0_template
29174
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29175
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29176
 
BEGIN
29177
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29178
 
f_charbig = 'updated by trigger'
29179
 
      WHERE f_int1 = - old.f_int1;
29180
 
END|
29181
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29182
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29183
 
        
29184
 
# check trigger-6 success:      1
29185
 
DROP TRIGGER trg_1;
29186
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29187
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29188
 
f_charbig = 'just inserted'
29189
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29190
 
DELETE FROM t0_aux
29191
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29192
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29193
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29194
 
'just inserted' FROM t0_template
29195
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29196
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
29197
 
BEGIN
29198
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29199
 
f_charbig = 'updated by trigger'
29200
 
      WHERE f_int1 = - old.f_int1;
29201
 
END|
29202
 
DELETE FROM t0_aux
29203
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29204
 
        
29205
 
# check trigger-7 success:      1
29206
 
DROP TRIGGER trg_1;
29207
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29208
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29209
 
f_charbig = 'just inserted'
29210
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29211
 
DELETE FROM t0_aux
29212
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29213
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29214
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29215
 
'just inserted' FROM t0_template
29216
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29217
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
29218
 
BEGIN
29219
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29220
 
f_charbig = 'updated by trigger'
29221
 
      WHERE f_int1 = - old.f_int1;
29222
 
END|
29223
 
DELETE FROM t0_aux
29224
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29225
 
        
29226
 
# check trigger-8 success:      1
29227
 
DROP TRIGGER trg_1;
29228
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29229
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29230
 
f_charbig = 'just inserted'
29231
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29232
 
DELETE FROM t0_aux
29233
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29234
 
DELETE FROM t1
29235
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29236
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29237
 
BEGIN
29238
 
SET new.f_int1 = old.f_int1 + @max_row,
29239
 
new.f_int2 = old.f_int2 - @max_row,
29240
 
new.f_charbig = '####updated per update trigger####';
29241
 
END|
29242
 
UPDATE t1
29243
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29244
 
f_charbig = '####updated per update statement itself####';
29245
 
        
29246
 
# check trigger-9 success:      1
29247
 
DROP TRIGGER trg_2;
29248
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29249
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29250
 
f_charbig = CONCAT('===',f_char1,'===');
29251
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29252
 
BEGIN
29253
 
SET new.f_int1 = new.f_int1 + @max_row,
29254
 
new.f_int2 = new.f_int2 - @max_row,
29255
 
new.f_charbig = '####updated per update trigger####';
29256
 
END|
29257
 
UPDATE t1
29258
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29259
 
f_charbig = '####updated per update statement itself####';
29260
 
        
29261
 
# check trigger-10 success:     1
29262
 
DROP TRIGGER trg_2;
29263
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29264
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29265
 
f_charbig = CONCAT('===',f_char1,'===');
29266
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29267
 
BEGIN
29268
 
SET new.f_int1 = @my_max1 + @counter,
29269
 
new.f_int2 = @my_min2 - @counter,
29270
 
new.f_charbig = '####updated per insert trigger####';
29271
 
SET @counter = @counter + 1;
29272
 
END|
29273
 
SET @counter = 1;
29274
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29275
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29276
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29277
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29278
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29279
 
ORDER BY f_int1;
29280
 
DROP TRIGGER trg_3;
29281
 
        
29282
 
# check trigger-11 success:     1
29283
 
DELETE FROM t1
29284
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29285
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29286
 
AND f_charbig = '####updated per insert trigger####';
29287
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29288
 
BEGIN
29289
 
SET new.f_int1 = @my_max1 + @counter,
29290
 
new.f_int2 = @my_min2 - @counter,
29291
 
new.f_charbig = '####updated per insert trigger####';
29292
 
SET @counter = @counter + 1;
29293
 
END|
29294
 
SET @counter = 1;
29295
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29296
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
29297
 
SELECT CAST(f_int1 AS CHAR),
29298
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29299
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29300
 
ORDER BY f_int1;
29301
 
DROP TRIGGER trg_3;
29302
 
        
29303
 
# check trigger-12 success:     1
29304
 
DELETE FROM t1
29305
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29306
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29307
 
AND f_charbig = '####updated per insert trigger####';
29308
 
ANALYZE  TABLE t1;
29309
 
Table   Op      Msg_type        Msg_text
29310
 
test.t1 analyze status  OK
29311
 
CHECK    TABLE t1 EXTENDED;
29312
 
Table   Op      Msg_type        Msg_text
29313
 
test.t1 check   status  OK
29314
 
CHECKSUM TABLE t1 EXTENDED;
29315
 
Table   Checksum
29316
 
test.t1 <some_value>
29317
 
OPTIMIZE TABLE t1;
29318
 
Table   Op      Msg_type        Msg_text
29319
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
29320
 
test.t1 optimize        status  OK
29321
 
# check layout success:    1
29322
 
REPAIR   TABLE t1 EXTENDED;
29323
 
Table   Op      Msg_type        Msg_text
29324
 
test.t1 repair  note    The storage engine for the table doesn't support repair
29325
 
# check layout success:    1
29326
 
TRUNCATE t1;
29327
 
        
29328
 
# check TRUNCATE success:       1
29329
 
# check layout success:    1
29330
 
# End usability test (inc/partition_check.inc)
29331
 
DROP TABLE t1;
29332
 
CREATE TABLE t1 (
29333
 
f_int1 INTEGER,
29334
 
f_int2 INTEGER,
29335
 
f_char1 CHAR(20),
29336
 
f_char2 CHAR(20),
29337
 
f_charbig VARCHAR(1000)
29338
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
29339
 
)
29340
 
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
29341
 
(PARTITION parta VALUES LESS THAN (0),
29342
 
PARTITION partb VALUES LESS THAN (5),
29343
 
PARTITION partc VALUES LESS THAN (10),
29344
 
PARTITION partd VALUES LESS THAN (2147483646));
29345
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29346
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
29347
 
# Start usability test (inc/partition_check.inc)
29348
 
create_command
29349
 
SHOW CREATE TABLE t1;
29350
 
Table   Create Table
29351
 
t1      CREATE TABLE `t1` (
29352
 
  `f_int1` int(11) DEFAULT NULL,
29353
 
  `f_int2` int(11) DEFAULT NULL,
29354
 
  `f_char1` char(20) DEFAULT NULL,
29355
 
  `f_char2` char(20) DEFAULT NULL,
29356
 
  `f_charbig` varchar(1000) DEFAULT NULL,
29357
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
29358
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
29359
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int2) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
29360
 
 
29361
 
unified filelist
29362
 
t1.frm
29363
 
t1.par
29364
 
 
29365
 
# check prerequisites-1 success:    1
29366
 
# check COUNT(*) success:    1
29367
 
# check MIN/MAX(f_int1) success:    1
29368
 
# check MIN/MAX(f_int2) success:    1
29369
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29370
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29371
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
29372
 
WHERE f_int1 IN (2,3);
29373
 
ERROR 23000: Can't write; duplicate key in table 't1'
29374
 
# check prerequisites-3 success:    1
29375
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
29376
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29377
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29378
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29379
 
WHERE f_int1 IN (2,3);
29380
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
29381
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29382
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29383
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29384
 
WHERE f_int1 IN (2,3);
29385
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
29386
 
# check read via f_int1 success: 1
29387
 
# check read via f_int2 success: 1
29388
 
        
29389
 
# check multiple-1 success:     1
29390
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
29391
 
        
29392
 
# check multiple-2 success:     1
29393
 
INSERT INTO t1 SELECT * FROM t0_template
29394
 
WHERE MOD(f_int1,3) = 0;
29395
 
        
29396
 
# check multiple-3 success:     1
29397
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
29398
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
29399
 
AND @max_row_div2 + @max_row_div4;
29400
 
        
29401
 
# check multiple-4 success:     1
29402
 
DELETE FROM t1
29403
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
29404
 
AND @max_row_div2 + @max_row_div4 + @max_row;
29405
 
        
29406
 
# check multiple-5 success:     1
29407
 
SELECT COUNT(*) INTO @try_count FROM t0_template
29408
 
WHERE MOD(f_int1,3) = 0
29409
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29410
 
SELECT COUNT(*) INTO @clash_count
29411
 
FROM t1 INNER JOIN t0_template USING(f_int1)
29412
 
WHERE MOD(f_int1,3) = 0
29413
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29414
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
29415
 
INSERT INTO t1
29416
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
29417
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29418
 
f_charbig = '#SINGLE#';
29419
 
        
29420
 
# check single-1 success:       1
29421
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
29422
 
INSERT INTO t1
29423
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
29424
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29425
 
f_charbig = '#SINGLE#';
29426
 
        
29427
 
# check single-2 success:       1
29428
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
29429
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
29430
 
UPDATE t1 SET f_int1 = @cur_value2
29431
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
29432
 
        
29433
 
# check single-3 success:       1
29434
 
SET @cur_value1= -1;
29435
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
29436
 
UPDATE t1 SET f_int1 = @cur_value1
29437
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
29438
 
        
29439
 
# check single-4 success:       1
29440
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
29441
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
29442
 
        
29443
 
# check single-5 success:       1
29444
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
29445
 
        
29446
 
# check single-6 success:       1
29447
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
29448
 
ERROR HY000: Table has no partition for value 2147483647
29449
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
29450
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
29451
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
29452
 
f_charbig = '#NULL#';
29453
 
INSERT INTO t1
29454
 
SET f_int1 = NULL , f_int2 = -@max_row,
29455
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
29456
 
f_charbig = '#NULL#';
29457
 
# check null success:    1
29458
 
        
29459
 
# check null-1 success:         1
29460
 
UPDATE t1 SET f_int1 = -@max_row
29461
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29462
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29463
 
        
29464
 
# check null-2 success:         1
29465
 
UPDATE t1 SET f_int1 = NULL
29466
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29467
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29468
 
        
29469
 
# check null-3 success:         1
29470
 
DELETE FROM t1
29471
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29472
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29473
 
        
29474
 
# check null-4 success:         1
29475
 
DELETE FROM t1
29476
 
WHERE f_int1 = 0 AND f_int2 = 0
29477
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
29478
 
AND f_charbig = '#NULL#';
29479
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29480
 
SELECT f_int1, f_int1, '', '', 'was inserted'
29481
 
   FROM t0_template source_tab
29482
 
WHERE MOD(f_int1,3) = 0
29483
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
29484
 
ON DUPLICATE KEY
29485
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
29486
 
f_int2 = 2 * @max_row + source_tab.f_int1,
29487
 
f_charbig = 'was updated';
29488
 
        
29489
 
# check unique-1-a success:     1
29490
 
        
29491
 
# check unique-1-b success:     1
29492
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
29493
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29494
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29495
 
f_charbig = CONCAT('===',f_char1,'===')
29496
 
WHERE f_charbig = 'was updated';
29497
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29498
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
29499
 
   FROM t0_template source_tab
29500
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29501
 
        
29502
 
# check replace success:        1
29503
 
DELETE FROM t1
29504
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
29505
 
DELETE FROM t1
29506
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
29507
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
29508
 
UPDATE t1 SET f_int2 = f_int1,
29509
 
f_char1 = CAST(f_int1 AS CHAR),
29510
 
f_char2 = CAST(f_int1 AS CHAR),
29511
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
29512
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
29513
 
SET AUTOCOMMIT= 0;
29514
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29515
 
SELECT f_int1, f_int1, '', '', 'was inserted'
29516
 
FROM t0_template source_tab
29517
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29518
 
        
29519
 
# check transactions-1 success:         1
29520
 
COMMIT WORK;
29521
 
        
29522
 
# check transactions-2 success:         1
29523
 
ROLLBACK WORK;
29524
 
        
29525
 
# check transactions-3 success:         1
29526
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
29527
 
COMMIT WORK;
29528
 
ROLLBACK WORK;
29529
 
        
29530
 
# check transactions-4 success:         1
29531
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29532
 
SELECT f_int1, f_int1, '', '', 'was inserted'
29533
 
FROM t0_template source_tab
29534
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29535
 
        
29536
 
# check transactions-5 success:         1
29537
 
ROLLBACK WORK;
29538
 
        
29539
 
# check transactions-6 success:         1
29540
 
# INFO: Storage engine used for t1 seems to be transactional.
29541
 
COMMIT;
29542
 
        
29543
 
# check transactions-7 success:         1
29544
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
29545
 
COMMIT WORK;
29546
 
SET @@session.sql_mode = 'traditional';
29547
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
29548
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29549
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
29550
 
'', '', 'was inserted' FROM t0_template
29551
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29552
 
ERROR 22012: Division by 0
29553
 
COMMIT;
29554
 
        
29555
 
# check transactions-8 success:         1
29556
 
# INFO: Storage engine used for t1 seems to be able to revert
29557
 
#       changes made by the failing statement.
29558
 
SET @@session.sql_mode = '';
29559
 
SET AUTOCOMMIT= 1;
29560
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
29561
 
COMMIT WORK;
29562
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
29563
 
        
29564
 
# check special-1 success:      1
29565
 
UPDATE t1 SET f_charbig = '';
29566
 
        
29567
 
# check special-2 success:      1
29568
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
29569
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29570
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
29571
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29572
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29573
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29574
 
'just inserted' FROM t0_template
29575
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29576
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
29577
 
BEGIN
29578
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29579
 
f_charbig = 'updated by trigger'
29580
 
      WHERE f_int1 = new.f_int1;
29581
 
END|
29582
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29583
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29584
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29585
 
        
29586
 
# check trigger-1 success:      1
29587
 
DROP TRIGGER trg_1;
29588
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29589
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29590
 
f_charbig = 'just inserted'
29591
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29592
 
DELETE FROM t0_aux
29593
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29594
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29595
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29596
 
'just inserted' FROM t0_template
29597
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29598
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
29599
 
BEGIN
29600
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29601
 
f_charbig = 'updated by trigger'
29602
 
      WHERE f_int1 = new.f_int1;
29603
 
END|
29604
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29605
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29606
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29607
 
        
29608
 
# check trigger-2 success:      1
29609
 
DROP TRIGGER trg_1;
29610
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29611
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29612
 
f_charbig = 'just inserted'
29613
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29614
 
DELETE FROM t0_aux
29615
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29616
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29617
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29618
 
'just inserted' FROM t0_template
29619
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29620
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29621
 
BEGIN
29622
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29623
 
f_charbig = 'updated by trigger'
29624
 
      WHERE f_int1 = new.f_int1;
29625
 
END|
29626
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29627
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29628
 
        
29629
 
# check trigger-3 success:      1
29630
 
DROP TRIGGER trg_1;
29631
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29632
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29633
 
f_charbig = 'just inserted'
29634
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29635
 
DELETE FROM t0_aux
29636
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29637
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29638
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29639
 
'just inserted' FROM t0_template
29640
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29641
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29642
 
BEGIN
29643
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29644
 
f_charbig = 'updated by trigger'
29645
 
      WHERE f_int1 = - old.f_int1;
29646
 
END|
29647
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29648
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29649
 
        
29650
 
# check trigger-4 success:      1
29651
 
DROP TRIGGER trg_1;
29652
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29653
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29654
 
f_charbig = 'just inserted'
29655
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29656
 
DELETE FROM t0_aux
29657
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29658
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29659
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29660
 
'just inserted' FROM t0_template
29661
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29662
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29663
 
BEGIN
29664
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29665
 
f_charbig = 'updated by trigger'
29666
 
      WHERE f_int1 = new.f_int1;
29667
 
END|
29668
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29669
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29670
 
        
29671
 
# check trigger-5 success:      1
29672
 
DROP TRIGGER trg_1;
29673
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29674
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29675
 
f_charbig = 'just inserted'
29676
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29677
 
DELETE FROM t0_aux
29678
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29679
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29680
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29681
 
'just inserted' FROM t0_template
29682
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29683
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29684
 
BEGIN
29685
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29686
 
f_charbig = 'updated by trigger'
29687
 
      WHERE f_int1 = - old.f_int1;
29688
 
END|
29689
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29690
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29691
 
        
29692
 
# check trigger-6 success:      1
29693
 
DROP TRIGGER trg_1;
29694
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29695
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29696
 
f_charbig = 'just inserted'
29697
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29698
 
DELETE FROM t0_aux
29699
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29700
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29701
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29702
 
'just inserted' FROM t0_template
29703
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29704
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
29705
 
BEGIN
29706
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29707
 
f_charbig = 'updated by trigger'
29708
 
      WHERE f_int1 = - old.f_int1;
29709
 
END|
29710
 
DELETE FROM t0_aux
29711
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29712
 
        
29713
 
# check trigger-7 success:      1
29714
 
DROP TRIGGER trg_1;
29715
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29716
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29717
 
f_charbig = 'just inserted'
29718
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29719
 
DELETE FROM t0_aux
29720
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29721
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29722
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29723
 
'just inserted' FROM t0_template
29724
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29725
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
29726
 
BEGIN
29727
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29728
 
f_charbig = 'updated by trigger'
29729
 
      WHERE f_int1 = - old.f_int1;
29730
 
END|
29731
 
DELETE FROM t0_aux
29732
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29733
 
        
29734
 
# check trigger-8 success:      1
29735
 
DROP TRIGGER trg_1;
29736
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29737
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29738
 
f_charbig = 'just inserted'
29739
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29740
 
DELETE FROM t0_aux
29741
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29742
 
DELETE FROM t1
29743
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29744
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29745
 
BEGIN
29746
 
SET new.f_int1 = old.f_int1 + @max_row,
29747
 
new.f_int2 = old.f_int2 - @max_row,
29748
 
new.f_charbig = '####updated per update trigger####';
29749
 
END|
29750
 
UPDATE t1
29751
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29752
 
f_charbig = '####updated per update statement itself####';
29753
 
        
29754
 
# check trigger-9 success:      1
29755
 
DROP TRIGGER trg_2;
29756
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29757
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29758
 
f_charbig = CONCAT('===',f_char1,'===');
29759
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29760
 
BEGIN
29761
 
SET new.f_int1 = new.f_int1 + @max_row,
29762
 
new.f_int2 = new.f_int2 - @max_row,
29763
 
new.f_charbig = '####updated per update trigger####';
29764
 
END|
29765
 
UPDATE t1
29766
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29767
 
f_charbig = '####updated per update statement itself####';
29768
 
        
29769
 
# check trigger-10 success:     1
29770
 
DROP TRIGGER trg_2;
29771
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29772
 
f_int2 = CAST(f_char1 AS SIGNED INT),
29773
 
f_charbig = CONCAT('===',f_char1,'===');
29774
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29775
 
BEGIN
29776
 
SET new.f_int1 = @my_max1 + @counter,
29777
 
new.f_int2 = @my_min2 - @counter,
29778
 
new.f_charbig = '####updated per insert trigger####';
29779
 
SET @counter = @counter + 1;
29780
 
END|
29781
 
SET @counter = 1;
29782
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29783
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29784
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29785
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29786
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29787
 
ORDER BY f_int1;
29788
 
DROP TRIGGER trg_3;
29789
 
        
29790
 
# check trigger-11 success:     1
29791
 
DELETE FROM t1
29792
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29793
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29794
 
AND f_charbig = '####updated per insert trigger####';
29795
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29796
 
BEGIN
29797
 
SET new.f_int1 = @my_max1 + @counter,
29798
 
new.f_int2 = @my_min2 - @counter,
29799
 
new.f_charbig = '####updated per insert trigger####';
29800
 
SET @counter = @counter + 1;
29801
 
END|
29802
 
SET @counter = 1;
29803
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29804
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
29805
 
SELECT CAST(f_int1 AS CHAR),
29806
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29807
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29808
 
ORDER BY f_int1;
29809
 
DROP TRIGGER trg_3;
29810
 
        
29811
 
# check trigger-12 success:     1
29812
 
DELETE FROM t1
29813
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29814
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29815
 
AND f_charbig = '####updated per insert trigger####';
29816
 
ANALYZE  TABLE t1;
29817
 
Table   Op      Msg_type        Msg_text
29818
 
test.t1 analyze status  OK
29819
 
CHECK    TABLE t1 EXTENDED;
29820
 
Table   Op      Msg_type        Msg_text
29821
 
test.t1 check   status  OK
29822
 
CHECKSUM TABLE t1 EXTENDED;
29823
 
Table   Checksum
29824
 
test.t1 <some_value>
29825
 
OPTIMIZE TABLE t1;
29826
 
Table   Op      Msg_type        Msg_text
29827
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
29828
 
test.t1 optimize        status  OK
29829
 
# check layout success:    1
29830
 
REPAIR   TABLE t1 EXTENDED;
29831
 
Table   Op      Msg_type        Msg_text
29832
 
test.t1 repair  note    The storage engine for the table doesn't support repair
29833
 
# check layout success:    1
29834
 
TRUNCATE t1;
29835
 
        
29836
 
# check TRUNCATE success:       1
29837
 
# check layout success:    1
29838
 
# End usability test (inc/partition_check.inc)
29839
 
DROP TABLE t1;
29840
 
CREATE TABLE t1 (
29841
 
f_int1 INTEGER,
29842
 
f_int2 INTEGER,
29843
 
f_char1 CHAR(20),
29844
 
f_char2 CHAR(20),
29845
 
f_charbig VARCHAR(1000)
29846
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
29847
 
)
29848
 
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
29849
 
(PARTITION part1 VALUES LESS THAN (0)
29850
 
(SUBPARTITION subpart11, SUBPARTITION subpart12),
29851
 
PARTITION part2 VALUES LESS THAN (5)
29852
 
(SUBPARTITION subpart21, SUBPARTITION subpart22),
29853
 
PARTITION part3 VALUES LESS THAN (10)
29854
 
(SUBPARTITION subpart31, SUBPARTITION subpart32),
29855
 
PARTITION part4 VALUES LESS THAN (2147483646)
29856
 
(SUBPARTITION subpart41, SUBPARTITION subpart42));
29857
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29858
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
29859
 
# Start usability test (inc/partition_check.inc)
29860
 
create_command
29861
 
SHOW CREATE TABLE t1;
29862
 
Table   Create Table
29863
 
t1      CREATE TABLE `t1` (
29864
 
  `f_int1` int(11) DEFAULT NULL,
29865
 
  `f_int2` int(11) DEFAULT NULL,
29866
 
  `f_char1` char(20) DEFAULT NULL,
29867
 
  `f_char2` char(20) DEFAULT NULL,
29868
 
  `f_charbig` varchar(1000) DEFAULT NULL,
29869
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
29870
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
29871
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int2) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
29872
 
 
29873
 
unified filelist
29874
 
t1.frm
29875
 
t1.par
29876
 
 
29877
 
# check prerequisites-1 success:    1
29878
 
# check COUNT(*) success:    1
29879
 
# check MIN/MAX(f_int1) success:    1
29880
 
# check MIN/MAX(f_int2) success:    1
29881
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29882
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29883
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
29884
 
WHERE f_int1 IN (2,3);
29885
 
ERROR 23000: Can't write; duplicate key in table 't1'
29886
 
# check prerequisites-3 success:    1
29887
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
29888
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29889
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29890
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29891
 
WHERE f_int1 IN (2,3);
29892
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
29893
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29894
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29895
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29896
 
WHERE f_int1 IN (2,3);
29897
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
29898
 
# check read via f_int1 success: 1
29899
 
# check read via f_int2 success: 1
29900
 
        
29901
 
# check multiple-1 success:     1
29902
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
29903
 
        
29904
 
# check multiple-2 success:     1
29905
 
INSERT INTO t1 SELECT * FROM t0_template
29906
 
WHERE MOD(f_int1,3) = 0;
29907
 
        
29908
 
# check multiple-3 success:     1
29909
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
29910
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
29911
 
AND @max_row_div2 + @max_row_div4;
29912
 
        
29913
 
# check multiple-4 success:     1
29914
 
DELETE FROM t1
29915
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
29916
 
AND @max_row_div2 + @max_row_div4 + @max_row;
29917
 
        
29918
 
# check multiple-5 success:     1
29919
 
SELECT COUNT(*) INTO @try_count FROM t0_template
29920
 
WHERE MOD(f_int1,3) = 0
29921
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29922
 
SELECT COUNT(*) INTO @clash_count
29923
 
FROM t1 INNER JOIN t0_template USING(f_int1)
29924
 
WHERE MOD(f_int1,3) = 0
29925
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29926
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
29927
 
INSERT INTO t1
29928
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
29929
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29930
 
f_charbig = '#SINGLE#';
29931
 
        
29932
 
# check single-1 success:       1
29933
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
29934
 
INSERT INTO t1
29935
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
29936
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29937
 
f_charbig = '#SINGLE#';
29938
 
        
29939
 
# check single-2 success:       1
29940
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
29941
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
29942
 
UPDATE t1 SET f_int1 = @cur_value2
29943
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
29944
 
        
29945
 
# check single-3 success:       1
29946
 
SET @cur_value1= -1;
29947
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
29948
 
UPDATE t1 SET f_int1 = @cur_value1
29949
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
29950
 
        
29951
 
# check single-4 success:       1
29952
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
29953
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
29954
 
        
29955
 
# check single-5 success:       1
29956
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
29957
 
        
29958
 
# check single-6 success:       1
29959
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
29960
 
ERROR HY000: Table has no partition for value 2147483647
29961
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
29962
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
29963
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
29964
 
f_charbig = '#NULL#';
29965
 
INSERT INTO t1
29966
 
SET f_int1 = NULL , f_int2 = -@max_row,
29967
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
29968
 
f_charbig = '#NULL#';
29969
 
# check null success:    1
29970
 
        
29971
 
# check null-1 success:         1
29972
 
UPDATE t1 SET f_int1 = -@max_row
29973
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29974
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29975
 
        
29976
 
# check null-2 success:         1
29977
 
UPDATE t1 SET f_int1 = NULL
29978
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29979
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29980
 
        
29981
 
# check null-3 success:         1
29982
 
DELETE FROM t1
29983
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29984
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29985
 
        
29986
 
# check null-4 success:         1
29987
 
DELETE FROM t1
29988
 
WHERE f_int1 = 0 AND f_int2 = 0
29989
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
29990
 
AND f_charbig = '#NULL#';
29991
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29992
 
SELECT f_int1, f_int1, '', '', 'was inserted'
29993
 
   FROM t0_template source_tab
29994
 
WHERE MOD(f_int1,3) = 0
29995
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
29996
 
ON DUPLICATE KEY
29997
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
29998
 
f_int2 = 2 * @max_row + source_tab.f_int1,
29999
 
f_charbig = 'was updated';
30000
 
        
30001
 
# check unique-1-a success:     1
30002
 
        
30003
 
# check unique-1-b success:     1
30004
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
30005
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30006
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30007
 
f_charbig = CONCAT('===',f_char1,'===')
30008
 
WHERE f_charbig = 'was updated';
30009
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30010
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
30011
 
   FROM t0_template source_tab
30012
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30013
 
        
30014
 
# check replace success:        1
30015
 
DELETE FROM t1
30016
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
30017
 
DELETE FROM t1
30018
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
30019
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
30020
 
UPDATE t1 SET f_int2 = f_int1,
30021
 
f_char1 = CAST(f_int1 AS CHAR),
30022
 
f_char2 = CAST(f_int1 AS CHAR),
30023
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
30024
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
30025
 
SET AUTOCOMMIT= 0;
30026
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30027
 
SELECT f_int1, f_int1, '', '', 'was inserted'
30028
 
FROM t0_template source_tab
30029
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30030
 
        
30031
 
# check transactions-1 success:         1
30032
 
COMMIT WORK;
30033
 
        
30034
 
# check transactions-2 success:         1
30035
 
ROLLBACK WORK;
30036
 
        
30037
 
# check transactions-3 success:         1
30038
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
30039
 
COMMIT WORK;
30040
 
ROLLBACK WORK;
30041
 
        
30042
 
# check transactions-4 success:         1
30043
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30044
 
SELECT f_int1, f_int1, '', '', 'was inserted'
30045
 
FROM t0_template source_tab
30046
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30047
 
        
30048
 
# check transactions-5 success:         1
30049
 
ROLLBACK WORK;
30050
 
        
30051
 
# check transactions-6 success:         1
30052
 
# INFO: Storage engine used for t1 seems to be transactional.
30053
 
COMMIT;
30054
 
        
30055
 
# check transactions-7 success:         1
30056
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
30057
 
COMMIT WORK;
30058
 
SET @@session.sql_mode = 'traditional';
30059
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
30060
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30061
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
30062
 
'', '', 'was inserted' FROM t0_template
30063
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30064
 
ERROR 22012: Division by 0
30065
 
COMMIT;
30066
 
        
30067
 
# check transactions-8 success:         1
30068
 
# INFO: Storage engine used for t1 seems to be able to revert
30069
 
#       changes made by the failing statement.
30070
 
SET @@session.sql_mode = '';
30071
 
SET AUTOCOMMIT= 1;
30072
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
30073
 
COMMIT WORK;
30074
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
30075
 
        
30076
 
# check special-1 success:      1
30077
 
UPDATE t1 SET f_charbig = '';
30078
 
        
30079
 
# check special-2 success:      1
30080
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
30081
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30082
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
30083
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30084
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30085
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30086
 
'just inserted' FROM t0_template
30087
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30088
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
30089
 
BEGIN
30090
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30091
 
f_charbig = 'updated by trigger'
30092
 
      WHERE f_int1 = new.f_int1;
30093
 
END|
30094
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30095
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30096
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30097
 
        
30098
 
# check trigger-1 success:      1
30099
 
DROP TRIGGER trg_1;
30100
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30101
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30102
 
f_charbig = 'just inserted'
30103
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30104
 
DELETE FROM t0_aux
30105
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30106
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30107
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30108
 
'just inserted' FROM t0_template
30109
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30110
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
30111
 
BEGIN
30112
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30113
 
f_charbig = 'updated by trigger'
30114
 
      WHERE f_int1 = new.f_int1;
30115
 
END|
30116
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30117
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30118
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30119
 
        
30120
 
# check trigger-2 success:      1
30121
 
DROP TRIGGER trg_1;
30122
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30123
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30124
 
f_charbig = 'just inserted'
30125
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30126
 
DELETE FROM t0_aux
30127
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30128
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30129
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30130
 
'just inserted' FROM t0_template
30131
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30132
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30133
 
BEGIN
30134
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30135
 
f_charbig = 'updated by trigger'
30136
 
      WHERE f_int1 = new.f_int1;
30137
 
END|
30138
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30139
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30140
 
        
30141
 
# check trigger-3 success:      1
30142
 
DROP TRIGGER trg_1;
30143
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30144
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30145
 
f_charbig = 'just inserted'
30146
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30147
 
DELETE FROM t0_aux
30148
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30149
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30150
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30151
 
'just inserted' FROM t0_template
30152
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30153
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30154
 
BEGIN
30155
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30156
 
f_charbig = 'updated by trigger'
30157
 
      WHERE f_int1 = - old.f_int1;
30158
 
END|
30159
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30160
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30161
 
        
30162
 
# check trigger-4 success:      1
30163
 
DROP TRIGGER trg_1;
30164
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30165
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30166
 
f_charbig = 'just inserted'
30167
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30168
 
DELETE FROM t0_aux
30169
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30170
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30171
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30172
 
'just inserted' FROM t0_template
30173
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30174
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30175
 
BEGIN
30176
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30177
 
f_charbig = 'updated by trigger'
30178
 
      WHERE f_int1 = new.f_int1;
30179
 
END|
30180
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30181
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30182
 
        
30183
 
# check trigger-5 success:      1
30184
 
DROP TRIGGER trg_1;
30185
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30186
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30187
 
f_charbig = 'just inserted'
30188
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30189
 
DELETE FROM t0_aux
30190
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30191
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30192
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30193
 
'just inserted' FROM t0_template
30194
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30195
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30196
 
BEGIN
30197
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30198
 
f_charbig = 'updated by trigger'
30199
 
      WHERE f_int1 = - old.f_int1;
30200
 
END|
30201
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30202
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30203
 
        
30204
 
# check trigger-6 success:      1
30205
 
DROP TRIGGER trg_1;
30206
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30207
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30208
 
f_charbig = 'just inserted'
30209
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30210
 
DELETE FROM t0_aux
30211
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30212
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30213
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30214
 
'just inserted' FROM t0_template
30215
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30216
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
30217
 
BEGIN
30218
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30219
 
f_charbig = 'updated by trigger'
30220
 
      WHERE f_int1 = - old.f_int1;
30221
 
END|
30222
 
DELETE FROM t0_aux
30223
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30224
 
        
30225
 
# check trigger-7 success:      1
30226
 
DROP TRIGGER trg_1;
30227
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30228
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30229
 
f_charbig = 'just inserted'
30230
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30231
 
DELETE FROM t0_aux
30232
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30233
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30234
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30235
 
'just inserted' FROM t0_template
30236
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30237
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
30238
 
BEGIN
30239
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30240
 
f_charbig = 'updated by trigger'
30241
 
      WHERE f_int1 = - old.f_int1;
30242
 
END|
30243
 
DELETE FROM t0_aux
30244
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30245
 
        
30246
 
# check trigger-8 success:      1
30247
 
DROP TRIGGER trg_1;
30248
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30249
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30250
 
f_charbig = 'just inserted'
30251
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30252
 
DELETE FROM t0_aux
30253
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30254
 
DELETE FROM t1
30255
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30256
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30257
 
BEGIN
30258
 
SET new.f_int1 = old.f_int1 + @max_row,
30259
 
new.f_int2 = old.f_int2 - @max_row,
30260
 
new.f_charbig = '####updated per update trigger####';
30261
 
END|
30262
 
UPDATE t1
30263
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30264
 
f_charbig = '####updated per update statement itself####';
30265
 
        
30266
 
# check trigger-9 success:      1
30267
 
DROP TRIGGER trg_2;
30268
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30269
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30270
 
f_charbig = CONCAT('===',f_char1,'===');
30271
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30272
 
BEGIN
30273
 
SET new.f_int1 = new.f_int1 + @max_row,
30274
 
new.f_int2 = new.f_int2 - @max_row,
30275
 
new.f_charbig = '####updated per update trigger####';
30276
 
END|
30277
 
UPDATE t1
30278
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30279
 
f_charbig = '####updated per update statement itself####';
30280
 
        
30281
 
# check trigger-10 success:     1
30282
 
DROP TRIGGER trg_2;
30283
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30284
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30285
 
f_charbig = CONCAT('===',f_char1,'===');
30286
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30287
 
BEGIN
30288
 
SET new.f_int1 = @my_max1 + @counter,
30289
 
new.f_int2 = @my_min2 - @counter,
30290
 
new.f_charbig = '####updated per insert trigger####';
30291
 
SET @counter = @counter + 1;
30292
 
END|
30293
 
SET @counter = 1;
30294
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30295
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30296
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30297
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30298
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30299
 
ORDER BY f_int1;
30300
 
DROP TRIGGER trg_3;
30301
 
        
30302
 
# check trigger-11 success:     1
30303
 
DELETE FROM t1
30304
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30305
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30306
 
AND f_charbig = '####updated per insert trigger####';
30307
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30308
 
BEGIN
30309
 
SET new.f_int1 = @my_max1 + @counter,
30310
 
new.f_int2 = @my_min2 - @counter,
30311
 
new.f_charbig = '####updated per insert trigger####';
30312
 
SET @counter = @counter + 1;
30313
 
END|
30314
 
SET @counter = 1;
30315
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30316
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
30317
 
SELECT CAST(f_int1 AS CHAR),
30318
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30319
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30320
 
ORDER BY f_int1;
30321
 
DROP TRIGGER trg_3;
30322
 
        
30323
 
# check trigger-12 success:     1
30324
 
DELETE FROM t1
30325
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30326
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30327
 
AND f_charbig = '####updated per insert trigger####';
30328
 
ANALYZE  TABLE t1;
30329
 
Table   Op      Msg_type        Msg_text
30330
 
test.t1 analyze status  OK
30331
 
CHECK    TABLE t1 EXTENDED;
30332
 
Table   Op      Msg_type        Msg_text
30333
 
test.t1 check   status  OK
30334
 
CHECKSUM TABLE t1 EXTENDED;
30335
 
Table   Checksum
30336
 
test.t1 <some_value>
30337
 
OPTIMIZE TABLE t1;
30338
 
Table   Op      Msg_type        Msg_text
30339
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
30340
 
test.t1 optimize        status  OK
30341
 
# check layout success:    1
30342
 
REPAIR   TABLE t1 EXTENDED;
30343
 
Table   Op      Msg_type        Msg_text
30344
 
test.t1 repair  note    The storage engine for the table doesn't support repair
30345
 
# check layout success:    1
30346
 
TRUNCATE t1;
30347
 
        
30348
 
# check TRUNCATE success:       1
30349
 
# check layout success:    1
30350
 
# End usability test (inc/partition_check.inc)
30351
 
DROP TABLE t1;
30352
 
CREATE TABLE t1 (
30353
 
f_int1 INTEGER,
30354
 
f_int2 INTEGER,
30355
 
f_char1 CHAR(20),
30356
 
f_char2 CHAR(20),
30357
 
f_charbig VARCHAR(1000)
30358
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
30359
 
)
30360
 
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
30361
 
(PARTITION part1 VALUES IN (0)
30362
 
(SUBPARTITION sp11, SUBPARTITION sp12),
30363
 
PARTITION part2 VALUES IN (1)
30364
 
(SUBPARTITION sp21, SUBPARTITION sp22),
30365
 
PARTITION part3 VALUES IN (2)
30366
 
(SUBPARTITION sp31, SUBPARTITION sp32),
30367
 
PARTITION part4 VALUES IN (NULL)
30368
 
(SUBPARTITION sp41, SUBPARTITION sp42));
30369
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30370
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
30371
 
# Start usability test (inc/partition_check.inc)
30372
 
create_command
30373
 
SHOW CREATE TABLE t1;
30374
 
Table   Create Table
30375
 
t1      CREATE TABLE `t1` (
30376
 
  `f_int1` int(11) DEFAULT NULL,
30377
 
  `f_int2` int(11) DEFAULT NULL,
30378
 
  `f_char1` char(20) DEFAULT NULL,
30379
 
  `f_char2` char(20) DEFAULT NULL,
30380
 
  `f_charbig` varchar(1000) DEFAULT NULL,
30381
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
30382
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
30383
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int2 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
30384
 
 
30385
 
unified filelist
30386
 
t1.frm
30387
 
t1.par
30388
 
 
30389
 
# check prerequisites-1 success:    1
30390
 
# check COUNT(*) success:    1
30391
 
# check MIN/MAX(f_int1) success:    1
30392
 
# check MIN/MAX(f_int2) success:    1
30393
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30394
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30395
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
30396
 
WHERE f_int1 IN (2,3);
30397
 
ERROR 23000: Can't write; duplicate key in table 't1'
30398
 
# check prerequisites-3 success:    1
30399
 
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
30400
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30401
 
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
30402
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
30403
 
WHERE f_int1 IN (2,3);
30404
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
30405
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30406
 
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
30407
 
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
30408
 
WHERE f_int1 IN (2,3);
30409
 
DELETE FROM t1 WHERE f_charbig = 'delete me';
30410
 
# check read via f_int1 success: 1
30411
 
# check read via f_int2 success: 1
30412
 
        
30413
 
# check multiple-1 success:     1
30414
 
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
30415
 
        
30416
 
# check multiple-2 success:     1
30417
 
INSERT INTO t1 SELECT * FROM t0_template
30418
 
WHERE MOD(f_int1,3) = 0;
30419
 
        
30420
 
# check multiple-3 success:     1
30421
 
UPDATE t1 SET f_int1 = f_int1 + @max_row
30422
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
30423
 
AND @max_row_div2 + @max_row_div4;
30424
 
        
30425
 
# check multiple-4 success:     1
30426
 
DELETE FROM t1
30427
 
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
30428
 
AND @max_row_div2 + @max_row_div4 + @max_row;
30429
 
        
30430
 
# check multiple-5 success:     1
30431
 
SELECT COUNT(*) INTO @try_count FROM t0_template
30432
 
WHERE MOD(f_int1,3) = 0
30433
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30434
 
SELECT COUNT(*) INTO @clash_count
30435
 
FROM t1 INNER JOIN t0_template USING(f_int1)
30436
 
WHERE MOD(f_int1,3) = 0
30437
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30438
 
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
30439
 
INSERT INTO t1
30440
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
30441
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
30442
 
f_charbig = '#SINGLE#';
30443
 
        
30444
 
# check single-1 success:       1
30445
 
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
30446
 
INSERT INTO t1
30447
 
SET f_int1 = @cur_value , f_int2 = @cur_value,
30448
 
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
30449
 
f_charbig = '#SINGLE#';
30450
 
        
30451
 
# check single-2 success:       1
30452
 
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
30453
 
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
30454
 
UPDATE t1 SET f_int1 = @cur_value2
30455
 
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
30456
 
        
30457
 
# check single-3 success:       1
30458
 
SET @cur_value1= -1;
30459
 
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
30460
 
UPDATE t1 SET f_int1 = @cur_value1
30461
 
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
30462
 
        
30463
 
# check single-4 success:       1
30464
 
SELECT MAX(f_int1) INTO @cur_value FROM t1;
30465
 
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
30466
 
        
30467
 
# check single-5 success:       1
30468
 
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
30469
 
        
30470
 
# check single-6 success:       1
30471
 
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
30472
 
        
30473
 
# check single-7 success:       1
30474
 
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
30475
 
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
30476
 
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
30477
 
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
30478
 
f_charbig = '#NULL#';
30479
 
INSERT INTO t1
30480
 
SET f_int1 = NULL , f_int2 = -@max_row,
30481
 
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
30482
 
f_charbig = '#NULL#';
30483
 
# check null success:    1
30484
 
        
30485
 
# check null-1 success:         1
30486
 
UPDATE t1 SET f_int1 = -@max_row
30487
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
30488
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
30489
 
        
30490
 
# check null-2 success:         1
30491
 
UPDATE t1 SET f_int1 = NULL
30492
 
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
30493
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
30494
 
        
30495
 
# check null-3 success:         1
30496
 
DELETE FROM t1
30497
 
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
30498
 
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
30499
 
        
30500
 
# check null-4 success:         1
30501
 
DELETE FROM t1
30502
 
WHERE f_int1 = 0 AND f_int2 = 0
30503
 
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
30504
 
AND f_charbig = '#NULL#';
30505
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30506
 
SELECT f_int1, f_int1, '', '', 'was inserted'
30507
 
   FROM t0_template source_tab
30508
 
WHERE MOD(f_int1,3) = 0
30509
 
AND f_int1 BETWEEN @max_row_div2 AND @max_row
30510
 
ON DUPLICATE KEY
30511
 
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
30512
 
f_int2 = 2 * @max_row + source_tab.f_int1,
30513
 
f_charbig = 'was updated';
30514
 
        
30515
 
# check unique-1-a success:     1
30516
 
        
30517
 
# check unique-1-b success:     1
30518
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
30519
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30520
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30521
 
f_charbig = CONCAT('===',f_char1,'===')
30522
 
WHERE f_charbig = 'was updated';
30523
 
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30524
 
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
30525
 
   FROM t0_template source_tab
30526
 
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30527
 
        
30528
 
# check replace success:        1
30529
 
DELETE FROM t1
30530
 
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
30531
 
DELETE FROM t1
30532
 
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
30533
 
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
30534
 
UPDATE t1 SET f_int2 = f_int1,
30535
 
f_char1 = CAST(f_int1 AS CHAR),
30536
 
f_char2 = CAST(f_int1 AS CHAR),
30537
 
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
30538
 
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
30539
 
SET AUTOCOMMIT= 0;
30540
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30541
 
SELECT f_int1, f_int1, '', '', 'was inserted'
30542
 
FROM t0_template source_tab
30543
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30544
 
        
30545
 
# check transactions-1 success:         1
30546
 
COMMIT WORK;
30547
 
        
30548
 
# check transactions-2 success:         1
30549
 
ROLLBACK WORK;
30550
 
        
30551
 
# check transactions-3 success:         1
30552
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
30553
 
COMMIT WORK;
30554
 
ROLLBACK WORK;
30555
 
        
30556
 
# check transactions-4 success:         1
30557
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30558
 
SELECT f_int1, f_int1, '', '', 'was inserted'
30559
 
FROM t0_template source_tab
30560
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30561
 
        
30562
 
# check transactions-5 success:         1
30563
 
ROLLBACK WORK;
30564
 
        
30565
 
# check transactions-6 success:         1
30566
 
# INFO: Storage engine used for t1 seems to be transactional.
30567
 
COMMIT;
30568
 
        
30569
 
# check transactions-7 success:         1
30570
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
30571
 
COMMIT WORK;
30572
 
SET @@session.sql_mode = 'traditional';
30573
 
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
30574
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30575
 
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
30576
 
'', '', 'was inserted' FROM t0_template
30577
 
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30578
 
ERROR 22012: Division by 0
30579
 
COMMIT;
30580
 
        
30581
 
# check transactions-8 success:         1
30582
 
# INFO: Storage engine used for t1 seems to be able to revert
30583
 
#       changes made by the failing statement.
30584
 
SET @@session.sql_mode = '';
30585
 
SET AUTOCOMMIT= 1;
30586
 
DELETE FROM t1 WHERE f_charbig = 'was inserted';
30587
 
COMMIT WORK;
30588
 
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
30589
 
        
30590
 
# check special-1 success:      1
30591
 
UPDATE t1 SET f_charbig = '';
30592
 
        
30593
 
# check special-2 success:      1
30594
 
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
30595
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30596
 
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
30597
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30598
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30599
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30600
 
'just inserted' FROM t0_template
30601
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30602
 
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
30603
 
BEGIN
30604
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30605
 
f_charbig = 'updated by trigger'
30606
 
      WHERE f_int1 = new.f_int1;
30607
 
END|
30608
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30609
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30610
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30611
 
        
30612
 
# check trigger-1 success:      1
30613
 
DROP TRIGGER trg_1;
30614
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30615
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30616
 
f_charbig = 'just inserted'
30617
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30618
 
DELETE FROM t0_aux
30619
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30620
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30621
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30622
 
'just inserted' FROM t0_template
30623
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30624
 
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
30625
 
BEGIN
30626
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30627
 
f_charbig = 'updated by trigger'
30628
 
      WHERE f_int1 = new.f_int1;
30629
 
END|
30630
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30631
 
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30632
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30633
 
        
30634
 
# check trigger-2 success:      1
30635
 
DROP TRIGGER trg_1;
30636
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30637
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30638
 
f_charbig = 'just inserted'
30639
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30640
 
DELETE FROM t0_aux
30641
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30642
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30643
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30644
 
'just inserted' FROM t0_template
30645
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30646
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30647
 
BEGIN
30648
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30649
 
f_charbig = 'updated by trigger'
30650
 
      WHERE f_int1 = new.f_int1;
30651
 
END|
30652
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30653
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30654
 
        
30655
 
# check trigger-3 success:      1
30656
 
DROP TRIGGER trg_1;
30657
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30658
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30659
 
f_charbig = 'just inserted'
30660
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30661
 
DELETE FROM t0_aux
30662
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30663
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30664
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30665
 
'just inserted' FROM t0_template
30666
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30667
 
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30668
 
BEGIN
30669
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30670
 
f_charbig = 'updated by trigger'
30671
 
      WHERE f_int1 = - old.f_int1;
30672
 
END|
30673
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30674
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30675
 
        
30676
 
# check trigger-4 success:      1
30677
 
DROP TRIGGER trg_1;
30678
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30679
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30680
 
f_charbig = 'just inserted'
30681
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30682
 
DELETE FROM t0_aux
30683
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30684
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30685
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30686
 
'just inserted' FROM t0_template
30687
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30688
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30689
 
BEGIN
30690
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30691
 
f_charbig = 'updated by trigger'
30692
 
      WHERE f_int1 = new.f_int1;
30693
 
END|
30694
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30695
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30696
 
        
30697
 
# check trigger-5 success:      1
30698
 
DROP TRIGGER trg_1;
30699
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30700
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30701
 
f_charbig = 'just inserted'
30702
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30703
 
DELETE FROM t0_aux
30704
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30705
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30706
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30707
 
'just inserted' FROM t0_template
30708
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30709
 
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30710
 
BEGIN
30711
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30712
 
f_charbig = 'updated by trigger'
30713
 
      WHERE f_int1 = - old.f_int1;
30714
 
END|
30715
 
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30716
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30717
 
        
30718
 
# check trigger-6 success:      1
30719
 
DROP TRIGGER trg_1;
30720
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30721
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30722
 
f_charbig = 'just inserted'
30723
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30724
 
DELETE FROM t0_aux
30725
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30726
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30727
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30728
 
'just inserted' FROM t0_template
30729
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30730
 
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
30731
 
BEGIN
30732
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30733
 
f_charbig = 'updated by trigger'
30734
 
      WHERE f_int1 = - old.f_int1;
30735
 
END|
30736
 
DELETE FROM t0_aux
30737
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30738
 
        
30739
 
# check trigger-7 success:      1
30740
 
DROP TRIGGER trg_1;
30741
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30742
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30743
 
f_charbig = 'just inserted'
30744
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30745
 
DELETE FROM t0_aux
30746
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30747
 
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30748
 
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30749
 
'just inserted' FROM t0_template
30750
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30751
 
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
30752
 
BEGIN
30753
 
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30754
 
f_charbig = 'updated by trigger'
30755
 
      WHERE f_int1 = - old.f_int1;
30756
 
END|
30757
 
DELETE FROM t0_aux
30758
 
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30759
 
        
30760
 
# check trigger-8 success:      1
30761
 
DROP TRIGGER trg_1;
30762
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30763
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30764
 
f_charbig = 'just inserted'
30765
 
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30766
 
DELETE FROM t0_aux
30767
 
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30768
 
DELETE FROM t1
30769
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30770
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30771
 
BEGIN
30772
 
SET new.f_int1 = old.f_int1 + @max_row,
30773
 
new.f_int2 = old.f_int2 - @max_row,
30774
 
new.f_charbig = '####updated per update trigger####';
30775
 
END|
30776
 
UPDATE t1
30777
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30778
 
f_charbig = '####updated per update statement itself####';
30779
 
        
30780
 
# check trigger-9 success:      1
30781
 
DROP TRIGGER trg_2;
30782
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30783
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30784
 
f_charbig = CONCAT('===',f_char1,'===');
30785
 
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30786
 
BEGIN
30787
 
SET new.f_int1 = new.f_int1 + @max_row,
30788
 
new.f_int2 = new.f_int2 - @max_row,
30789
 
new.f_charbig = '####updated per update trigger####';
30790
 
END|
30791
 
UPDATE t1
30792
 
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30793
 
f_charbig = '####updated per update statement itself####';
30794
 
        
30795
 
# check trigger-10 success:     1
30796
 
DROP TRIGGER trg_2;
30797
 
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30798
 
f_int2 = CAST(f_char1 AS SIGNED INT),
30799
 
f_charbig = CONCAT('===',f_char1,'===');
30800
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30801
 
BEGIN
30802
 
SET new.f_int1 = @my_max1 + @counter,
30803
 
new.f_int2 = @my_min2 - @counter,
30804
 
new.f_charbig = '####updated per insert trigger####';
30805
 
SET @counter = @counter + 1;
30806
 
END|
30807
 
SET @counter = 1;
30808
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30809
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30810
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30811
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30812
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30813
 
ORDER BY f_int1;
30814
 
DROP TRIGGER trg_3;
30815
 
        
30816
 
# check trigger-11 success:     1
30817
 
DELETE FROM t1
30818
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30819
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30820
 
AND f_charbig = '####updated per insert trigger####';
30821
 
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30822
 
BEGIN
30823
 
SET new.f_int1 = @my_max1 + @counter,
30824
 
new.f_int2 = @my_min2 - @counter,
30825
 
new.f_charbig = '####updated per insert trigger####';
30826
 
SET @counter = @counter + 1;
30827
 
END|
30828
 
SET @counter = 1;
30829
 
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30830
 
INSERT INTO t1 (f_char1, f_char2, f_charbig)
30831
 
SELECT CAST(f_int1 AS CHAR),
30832
 
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30833
 
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30834
 
ORDER BY f_int1;
30835
 
DROP TRIGGER trg_3;
30836
 
        
30837
 
# check trigger-12 success:     1
30838
 
DELETE FROM t1
30839
 
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30840
 
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30841
 
AND f_charbig = '####updated per insert trigger####';
30842
 
ANALYZE  TABLE t1;
30843
 
Table   Op      Msg_type        Msg_text
30844
 
test.t1 analyze status  OK
30845
 
CHECK    TABLE t1 EXTENDED;
30846
 
Table   Op      Msg_type        Msg_text
30847
 
test.t1 check   status  OK
30848
 
CHECKSUM TABLE t1 EXTENDED;
30849
 
Table   Checksum
30850
 
test.t1 <some_value>
30851
 
OPTIMIZE TABLE t1;
30852
 
Table   Op      Msg_type        Msg_text
30853
 
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
30854
 
test.t1 optimize        status  OK
30855
 
# check layout success:    1
30856
 
REPAIR   TABLE t1 EXTENDED;
30857
 
Table   Op      Msg_type        Msg_text
30858
 
test.t1 repair  note    The storage engine for the table doesn't support repair
30859
 
# check layout success:    1
30860
 
TRUNCATE t1;
30861
 
        
30862
 
# check TRUNCATE success:       1
30863
 
# check layout success:    1
30864
 
# End usability test (inc/partition_check.inc)
30865
 
DROP TABLE t1;
30866
 
CREATE TABLE t1 (
30867
 
f_int1 INTEGER,
30868
 
f_int2 INTEGER,
30869
 
f_char1 CHAR(20),
30870
 
f_char2 CHAR(20),
30871
 
f_charbig VARCHAR(1000)
30872
 
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
30873
 
)
30874
 
PARTITION BY LIST(ABS(MOD(f_int1,2)))
30875
 
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
30876
 
(PARTITION part1 VALUES IN (0),
30877
 
PARTITION part2 VALUES IN (1),
30878
 
PARTITION part3 VALUES IN (NULL));
30879
 
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30880
 
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
30881
 
# Start usability test (inc/partition_check.inc)
30882
 
create_command
30883
 
SHOW CREATE TABLE t1;
30884
 
Table   Create Table
30885
 
t1      CREATE TABLE `t1` (
30886
 
  `f_int1` int(11) DEFAULT NULL,
30887
 
  `f_int2` int(11) DEFAULT NULL,
30888
 
  `f_char1` char(20) DEFAULT NULL,
30889
 
  `f_char2` char(20) DEFAULT NULL,
30890
 
  `f_charbig` varchar(1000) DEFAULT NULL,
30891
 
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
30892
 
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
30893
 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int2) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB, PARTITION part2 VALUES IN (1) ENGINE = InnoDB, PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
19718
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
19719
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
19720
PARTITIONS 2 */
 
19721
 
 
19722
unified filelist
 
19723
t1.frm
 
19724
t1.par
 
19725
 
 
19726
# check prerequisites-1 success:    1
 
19727
# check COUNT(*) success:    1
 
19728
# check MIN/MAX(f_int1) success:    1
 
19729
# check MIN/MAX(f_int2) success:    1
 
19730
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19731
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19732
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19733
WHERE f_int1 IN (2,3);
 
19734
ERROR 23000: Can't write; duplicate key in table 't1'
 
19735
# check prerequisites-3 success:    1
 
19736
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
19737
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19738
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
19739
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
19740
WHERE f_int1 IN (2,3);
 
19741
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19742
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19743
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
19744
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
19745
WHERE f_int1 IN (2,3);
 
19746
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19747
# check read via f_int1 success: 1
 
19748
# check read via f_int2 success: 1
 
19749
        
 
19750
# check multiple-1 success:     1
 
19751
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19752
        
 
19753
# check multiple-2 success:     1
 
19754
INSERT INTO t1 SELECT * FROM t0_template
 
19755
WHERE MOD(f_int1,3) = 0;
 
19756
        
 
19757
# check multiple-3 success:     1
 
19758
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19759
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19760
AND @max_row_div2 + @max_row_div4;
 
19761
        
 
19762
# check multiple-4 success:     1
 
19763
DELETE FROM t1
 
19764
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19765
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19766
        
 
19767
# check multiple-5 success:     1
 
19768
SELECT COUNT(*) INTO @try_count FROM t0_template
 
19769
WHERE MOD(f_int1,3) = 0
 
19770
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19771
SELECT COUNT(*) INTO @clash_count
 
19772
FROM t1 INNER JOIN t0_template USING(f_int1)
 
19773
WHERE MOD(f_int1,3) = 0
 
19774
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19775
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19776
INSERT INTO t1
 
19777
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19778
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19779
f_charbig = '#SINGLE#';
 
19780
        
 
19781
# check single-1 success:       1
 
19782
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19783
INSERT INTO t1
 
19784
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19785
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19786
f_charbig = '#SINGLE#';
 
19787
        
 
19788
# check single-2 success:       1
 
19789
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19790
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19791
UPDATE t1 SET f_int1 = @cur_value2
 
19792
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19793
        
 
19794
# check single-3 success:       1
 
19795
SET @cur_value1= -1;
 
19796
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19797
UPDATE t1 SET f_int1 = @cur_value1
 
19798
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19799
        
 
19800
# check single-4 success:       1
 
19801
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19802
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19803
        
 
19804
# check single-5 success:       1
 
19805
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19806
        
 
19807
# check single-6 success:       1
 
19808
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19809
        
 
19810
# check single-7 success:       1
 
19811
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
19812
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19813
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19814
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19815
f_charbig = '#NULL#';
 
19816
INSERT INTO t1
 
19817
SET f_int1 = NULL , f_int2 = -@max_row,
 
19818
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19819
f_charbig = '#NULL#';
 
19820
ERROR 23000: Column 'f_int1' cannot be null
 
19821
# check null success:    1
 
19822
DELETE FROM t1
 
19823
WHERE f_int1 = 0 AND f_int2 = 0
 
19824
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19825
AND f_charbig = '#NULL#';
 
19826
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19827
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19828
   FROM t0_template source_tab
 
19829
WHERE MOD(f_int1,3) = 0
 
19830
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
19831
ON DUPLICATE KEY
 
19832
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
19833
f_int2 = 2 * @max_row + source_tab.f_int1,
 
19834
f_charbig = 'was updated';
 
19835
        
 
19836
# check unique-1-a success:     1
 
19837
        
 
19838
# check unique-1-b success:     1
 
19839
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19840
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19841
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19842
f_charbig = CONCAT('===',f_char1,'===')
 
19843
WHERE f_charbig = 'was updated';
 
19844
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19845
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
19846
   FROM t0_template source_tab
 
19847
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19848
        
 
19849
# check replace success:        1
 
19850
DELETE FROM t1
 
19851
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
19852
DELETE FROM t1
 
19853
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
19854
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
19855
UPDATE t1 SET f_int2 = f_int1,
 
19856
f_char1 = CAST(f_int1 AS CHAR),
 
19857
f_char2 = CAST(f_int1 AS CHAR),
 
19858
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
19859
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
19860
SET AUTOCOMMIT= 0;
 
19861
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19862
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19863
FROM t0_template source_tab
 
19864
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19865
        
 
19866
# check transactions-1 success:         1
 
19867
COMMIT WORK;
 
19868
        
 
19869
# check transactions-2 success:         1
 
19870
ROLLBACK WORK;
 
19871
        
 
19872
# check transactions-3 success:         1
 
19873
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19874
COMMIT WORK;
 
19875
ROLLBACK WORK;
 
19876
        
 
19877
# check transactions-4 success:         1
 
19878
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19879
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19880
FROM t0_template source_tab
 
19881
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19882
        
 
19883
# check transactions-5 success:         1
 
19884
ROLLBACK WORK;
 
19885
        
 
19886
# check transactions-6 success:         1
 
19887
# INFO: Storage engine used for t1 seems to be transactional.
 
19888
COMMIT;
 
19889
        
 
19890
# check transactions-7 success:         1
 
19891
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19892
COMMIT WORK;
 
19893
SET @@session.sql_mode = 'traditional';
 
19894
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19895
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19896
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19897
'', '', 'was inserted' FROM t0_template
 
19898
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19899
ERROR 22012: Division by 0
 
19900
COMMIT;
 
19901
        
 
19902
# check transactions-8 success:         1
 
19903
# INFO: Storage engine used for t1 seems to be able to revert
 
19904
#       changes made by the failing statement.
 
19905
SET @@session.sql_mode = '';
 
19906
SET AUTOCOMMIT= 1;
 
19907
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19908
COMMIT WORK;
 
19909
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19910
        
 
19911
# check special-1 success:      1
 
19912
UPDATE t1 SET f_charbig = '';
 
19913
        
 
19914
# check special-2 success:      1
 
19915
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19916
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19917
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19918
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19919
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19920
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19921
'just inserted' FROM t0_template
 
19922
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19923
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19924
BEGIN
 
19925
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19926
f_charbig = 'updated by trigger'
 
19927
      WHERE f_int1 = new.f_int1;
 
19928
END|
 
19929
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19930
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19931
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19932
        
 
19933
# check trigger-1 success:      1
 
19934
DROP TRIGGER trg_1;
 
19935
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19936
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19937
f_charbig = 'just inserted'
 
19938
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19939
DELETE FROM t0_aux
 
19940
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19941
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19942
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19943
'just inserted' FROM t0_template
 
19944
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19945
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19946
BEGIN
 
19947
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19948
f_charbig = 'updated by trigger'
 
19949
      WHERE f_int1 = new.f_int1;
 
19950
END|
 
19951
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19952
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19953
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19954
        
 
19955
# check trigger-2 success:      1
 
19956
DROP TRIGGER trg_1;
 
19957
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19958
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19959
f_charbig = 'just inserted'
 
19960
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19961
DELETE FROM t0_aux
 
19962
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19963
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19964
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19965
'just inserted' FROM t0_template
 
19966
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19967
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19968
BEGIN
 
19969
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19970
f_charbig = 'updated by trigger'
 
19971
      WHERE f_int1 = new.f_int1;
 
19972
END|
 
19973
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19974
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19975
        
 
19976
# check trigger-3 success:      1
 
19977
DROP TRIGGER trg_1;
 
19978
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19979
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19980
f_charbig = 'just inserted'
 
19981
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19982
DELETE FROM t0_aux
 
19983
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19984
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19985
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19986
'just inserted' FROM t0_template
 
19987
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19988
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19989
BEGIN
 
19990
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19991
f_charbig = 'updated by trigger'
 
19992
      WHERE f_int1 = - old.f_int1;
 
19993
END|
 
19994
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19995
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19996
        
 
19997
# check trigger-4 success:      1
 
19998
DROP TRIGGER trg_1;
 
19999
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20000
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20001
f_charbig = 'just inserted'
 
20002
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20003
DELETE FROM t0_aux
 
20004
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20005
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20006
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20007
'just inserted' FROM t0_template
 
20008
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20009
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20010
BEGIN
 
20011
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20012
f_charbig = 'updated by trigger'
 
20013
      WHERE f_int1 = new.f_int1;
 
20014
END|
 
20015
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20016
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20017
        
 
20018
# check trigger-5 success:      1
 
20019
DROP TRIGGER trg_1;
 
20020
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20021
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20022
f_charbig = 'just inserted'
 
20023
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20024
DELETE FROM t0_aux
 
20025
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20027
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20028
'just inserted' FROM t0_template
 
20029
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20030
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20031
BEGIN
 
20032
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20033
f_charbig = 'updated by trigger'
 
20034
      WHERE f_int1 = - old.f_int1;
 
20035
END|
 
20036
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20037
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20038
        
 
20039
# check trigger-6 success:      1
 
20040
DROP TRIGGER trg_1;
 
20041
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20042
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20043
f_charbig = 'just inserted'
 
20044
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20045
DELETE FROM t0_aux
 
20046
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20047
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20048
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20049
'just inserted' FROM t0_template
 
20050
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20051
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20052
BEGIN
 
20053
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20054
f_charbig = 'updated by trigger'
 
20055
      WHERE f_int1 = - old.f_int1;
 
20056
END|
 
20057
DELETE FROM t0_aux
 
20058
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20059
        
 
20060
# check trigger-7 success:      1
 
20061
DROP TRIGGER trg_1;
 
20062
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20063
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20064
f_charbig = 'just inserted'
 
20065
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20066
DELETE FROM t0_aux
 
20067
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20068
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20069
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20070
'just inserted' FROM t0_template
 
20071
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20072
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20073
BEGIN
 
20074
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20075
f_charbig = 'updated by trigger'
 
20076
      WHERE f_int1 = - old.f_int1;
 
20077
END|
 
20078
DELETE FROM t0_aux
 
20079
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20080
        
 
20081
# check trigger-8 success:      1
 
20082
DROP TRIGGER trg_1;
 
20083
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20084
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20085
f_charbig = 'just inserted'
 
20086
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20087
DELETE FROM t0_aux
 
20088
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20089
DELETE FROM t1
 
20090
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20091
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20092
BEGIN
 
20093
SET new.f_int1 = old.f_int1 + @max_row,
 
20094
new.f_int2 = old.f_int2 - @max_row,
 
20095
new.f_charbig = '####updated per update trigger####';
 
20096
END|
 
20097
UPDATE t1
 
20098
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20099
f_charbig = '####updated per update statement itself####';
 
20100
        
 
20101
# check trigger-9 success:      1
 
20102
DROP TRIGGER trg_2;
 
20103
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20104
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20105
f_charbig = CONCAT('===',f_char1,'===');
 
20106
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20107
BEGIN
 
20108
SET new.f_int1 = new.f_int1 + @max_row,
 
20109
new.f_int2 = new.f_int2 - @max_row,
 
20110
new.f_charbig = '####updated per update trigger####';
 
20111
END|
 
20112
UPDATE t1
 
20113
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20114
f_charbig = '####updated per update statement itself####';
 
20115
        
 
20116
# check trigger-10 success:     1
 
20117
DROP TRIGGER trg_2;
 
20118
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20119
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20120
f_charbig = CONCAT('===',f_char1,'===');
 
20121
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20122
BEGIN
 
20123
SET new.f_int1 = @my_max1 + @counter,
 
20124
new.f_int2 = @my_min2 - @counter,
 
20125
new.f_charbig = '####updated per insert trigger####';
 
20126
SET @counter = @counter + 1;
 
20127
END|
 
20128
SET @counter = 1;
 
20129
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20130
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20131
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20132
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20133
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20134
ORDER BY f_int1;
 
20135
DROP TRIGGER trg_3;
 
20136
        
 
20137
# check trigger-11 success:     1
 
20138
DELETE FROM t1
 
20139
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20140
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20141
AND f_charbig = '####updated per insert trigger####';
 
20142
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20143
BEGIN
 
20144
SET new.f_int1 = @my_max1 + @counter,
 
20145
new.f_int2 = @my_min2 - @counter,
 
20146
new.f_charbig = '####updated per insert trigger####';
 
20147
SET @counter = @counter + 1;
 
20148
END|
 
20149
SET @counter = 1;
 
20150
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20151
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20152
SELECT CAST(f_int1 AS CHAR),
 
20153
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20154
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20155
ORDER BY f_int1;
 
20156
DROP TRIGGER trg_3;
 
20157
        
 
20158
# check trigger-12 success:     1
 
20159
DELETE FROM t1
 
20160
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20161
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20162
AND f_charbig = '####updated per insert trigger####';
 
20163
ANALYZE  TABLE t1;
 
20164
Table   Op      Msg_type        Msg_text
 
20165
test.t1 analyze status  OK
 
20166
CHECK    TABLE t1 EXTENDED;
 
20167
Table   Op      Msg_type        Msg_text
 
20168
test.t1 check   status  OK
 
20169
CHECKSUM TABLE t1 EXTENDED;
 
20170
Table   Checksum
 
20171
test.t1 <some_value>
 
20172
OPTIMIZE TABLE t1;
 
20173
Table   Op      Msg_type        Msg_text
 
20174
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
20175
test.t1 optimize        status  OK
 
20176
# check layout success:    1
 
20177
REPAIR   TABLE t1 EXTENDED;
 
20178
Table   Op      Msg_type        Msg_text
 
20179
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20180
# check layout success:    1
 
20181
TRUNCATE t1;
 
20182
        
 
20183
# check TRUNCATE success:       1
 
20184
# check layout success:    1
 
20185
# End usability test (inc/partition_check.inc)
 
20186
DROP TABLE t1;
 
20187
CREATE TABLE t1 (
 
20188
f_int1 INTEGER,
 
20189
f_int2 INTEGER,
 
20190
f_char1 CHAR(20),
 
20191
f_char2 CHAR(20),
 
20192
f_charbig VARCHAR(1000)
 
20193
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
20194
)
 
20195
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
20196
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20197
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
20198
# Start usability test (inc/partition_check.inc)
 
20199
create_command
 
20200
SHOW CREATE TABLE t1;
 
20201
Table   Create Table
 
20202
t1      CREATE TABLE `t1` (
 
20203
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
20204
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
20205
  `f_char1` char(20) DEFAULT NULL,
 
20206
  `f_char2` char(20) DEFAULT NULL,
 
20207
  `f_charbig` varchar(1000) DEFAULT NULL,
 
20208
  PRIMARY KEY (`f_int2`,`f_int1`),
 
20209
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
20210
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
20211
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
20212
PARTITIONS 5 */
 
20213
 
 
20214
unified filelist
 
20215
t1.frm
 
20216
t1.par
 
20217
 
 
20218
# check prerequisites-1 success:    1
 
20219
# check COUNT(*) success:    1
 
20220
# check MIN/MAX(f_int1) success:    1
 
20221
# check MIN/MAX(f_int2) success:    1
 
20222
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20223
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20224
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20225
WHERE f_int1 IN (2,3);
 
20226
ERROR 23000: Can't write; duplicate key in table 't1'
 
20227
# check prerequisites-3 success:    1
 
20228
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
20229
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20230
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
20231
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
20232
WHERE f_int1 IN (2,3);
 
20233
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20234
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20235
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
20236
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
20237
WHERE f_int1 IN (2,3);
 
20238
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20239
# check read via f_int1 success: 1
 
20240
# check read via f_int2 success: 1
 
20241
        
 
20242
# check multiple-1 success:     1
 
20243
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20244
        
 
20245
# check multiple-2 success:     1
 
20246
INSERT INTO t1 SELECT * FROM t0_template
 
20247
WHERE MOD(f_int1,3) = 0;
 
20248
        
 
20249
# check multiple-3 success:     1
 
20250
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20251
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20252
AND @max_row_div2 + @max_row_div4;
 
20253
        
 
20254
# check multiple-4 success:     1
 
20255
DELETE FROM t1
 
20256
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20257
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20258
        
 
20259
# check multiple-5 success:     1
 
20260
SELECT COUNT(*) INTO @try_count FROM t0_template
 
20261
WHERE MOD(f_int1,3) = 0
 
20262
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20263
SELECT COUNT(*) INTO @clash_count
 
20264
FROM t1 INNER JOIN t0_template USING(f_int1)
 
20265
WHERE MOD(f_int1,3) = 0
 
20266
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20267
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20268
INSERT INTO t1
 
20269
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20270
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20271
f_charbig = '#SINGLE#';
 
20272
        
 
20273
# check single-1 success:       1
 
20274
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20275
INSERT INTO t1
 
20276
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20277
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20278
f_charbig = '#SINGLE#';
 
20279
        
 
20280
# check single-2 success:       1
 
20281
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20282
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20283
UPDATE t1 SET f_int1 = @cur_value2
 
20284
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20285
        
 
20286
# check single-3 success:       1
 
20287
SET @cur_value1= -1;
 
20288
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20289
UPDATE t1 SET f_int1 = @cur_value1
 
20290
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20291
        
 
20292
# check single-4 success:       1
 
20293
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20294
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20295
        
 
20296
# check single-5 success:       1
 
20297
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20298
        
 
20299
# check single-6 success:       1
 
20300
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20301
        
 
20302
# check single-7 success:       1
 
20303
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
20304
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20305
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20306
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20307
f_charbig = '#NULL#';
 
20308
INSERT INTO t1
 
20309
SET f_int1 = NULL , f_int2 = -@max_row,
 
20310
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20311
f_charbig = '#NULL#';
 
20312
ERROR 23000: Column 'f_int1' cannot be null
 
20313
# check null success:    1
 
20314
DELETE FROM t1
 
20315
WHERE f_int1 = 0 AND f_int2 = 0
 
20316
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20317
AND f_charbig = '#NULL#';
 
20318
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20319
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20320
   FROM t0_template source_tab
 
20321
WHERE MOD(f_int1,3) = 0
 
20322
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
20323
ON DUPLICATE KEY
 
20324
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
20325
f_int2 = 2 * @max_row + source_tab.f_int1,
 
20326
f_charbig = 'was updated';
 
20327
        
 
20328
# check unique-1-a success:     1
 
20329
        
 
20330
# check unique-1-b success:     1
 
20331
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20332
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20333
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20334
f_charbig = CONCAT('===',f_char1,'===')
 
20335
WHERE f_charbig = 'was updated';
 
20336
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20337
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
20338
   FROM t0_template source_tab
 
20339
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20340
        
 
20341
# check replace success:        1
 
20342
DELETE FROM t1
 
20343
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
20344
DELETE FROM t1
 
20345
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
20346
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
20347
UPDATE t1 SET f_int2 = f_int1,
 
20348
f_char1 = CAST(f_int1 AS CHAR),
 
20349
f_char2 = CAST(f_int1 AS CHAR),
 
20350
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
20351
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
20352
SET AUTOCOMMIT= 0;
 
20353
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20354
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20355
FROM t0_template source_tab
 
20356
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20357
        
 
20358
# check transactions-1 success:         1
 
20359
COMMIT WORK;
 
20360
        
 
20361
# check transactions-2 success:         1
 
20362
ROLLBACK WORK;
 
20363
        
 
20364
# check transactions-3 success:         1
 
20365
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20366
COMMIT WORK;
 
20367
ROLLBACK WORK;
 
20368
        
 
20369
# check transactions-4 success:         1
 
20370
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20371
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20372
FROM t0_template source_tab
 
20373
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20374
        
 
20375
# check transactions-5 success:         1
 
20376
ROLLBACK WORK;
 
20377
        
 
20378
# check transactions-6 success:         1
 
20379
# INFO: Storage engine used for t1 seems to be transactional.
 
20380
COMMIT;
 
20381
        
 
20382
# check transactions-7 success:         1
 
20383
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20384
COMMIT WORK;
 
20385
SET @@session.sql_mode = 'traditional';
 
20386
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20387
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20388
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20389
'', '', 'was inserted' FROM t0_template
 
20390
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20391
ERROR 22012: Division by 0
 
20392
COMMIT;
 
20393
        
 
20394
# check transactions-8 success:         1
 
20395
# INFO: Storage engine used for t1 seems to be able to revert
 
20396
#       changes made by the failing statement.
 
20397
SET @@session.sql_mode = '';
 
20398
SET AUTOCOMMIT= 1;
 
20399
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20400
COMMIT WORK;
 
20401
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20402
        
 
20403
# check special-1 success:      1
 
20404
UPDATE t1 SET f_charbig = '';
 
20405
        
 
20406
# check special-2 success:      1
 
20407
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20408
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20409
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20410
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20411
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20412
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20413
'just inserted' FROM t0_template
 
20414
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20415
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20416
BEGIN
 
20417
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20418
f_charbig = 'updated by trigger'
 
20419
      WHERE f_int1 = new.f_int1;
 
20420
END|
 
20421
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20422
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20424
        
 
20425
# check trigger-1 success:      1
 
20426
DROP TRIGGER trg_1;
 
20427
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20428
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20429
f_charbig = 'just inserted'
 
20430
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20431
DELETE FROM t0_aux
 
20432
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20433
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20434
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20435
'just inserted' FROM t0_template
 
20436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20437
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20438
BEGIN
 
20439
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20440
f_charbig = 'updated by trigger'
 
20441
      WHERE f_int1 = new.f_int1;
 
20442
END|
 
20443
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20444
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20446
        
 
20447
# check trigger-2 success:      1
 
20448
DROP TRIGGER trg_1;
 
20449
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20450
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20451
f_charbig = 'just inserted'
 
20452
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20453
DELETE FROM t0_aux
 
20454
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20455
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20456
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20457
'just inserted' FROM t0_template
 
20458
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20459
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20460
BEGIN
 
20461
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20462
f_charbig = 'updated by trigger'
 
20463
      WHERE f_int1 = new.f_int1;
 
20464
END|
 
20465
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20466
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20467
        
 
20468
# check trigger-3 success:      1
 
20469
DROP TRIGGER trg_1;
 
20470
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20471
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20472
f_charbig = 'just inserted'
 
20473
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20474
DELETE FROM t0_aux
 
20475
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20476
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20477
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20478
'just inserted' FROM t0_template
 
20479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20480
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20481
BEGIN
 
20482
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20483
f_charbig = 'updated by trigger'
 
20484
      WHERE f_int1 = - old.f_int1;
 
20485
END|
 
20486
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20487
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20488
        
 
20489
# check trigger-4 success:      1
 
20490
DROP TRIGGER trg_1;
 
20491
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20492
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20493
f_charbig = 'just inserted'
 
20494
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20495
DELETE FROM t0_aux
 
20496
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20497
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20498
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20499
'just inserted' FROM t0_template
 
20500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20501
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20502
BEGIN
 
20503
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20504
f_charbig = 'updated by trigger'
 
20505
      WHERE f_int1 = new.f_int1;
 
20506
END|
 
20507
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20508
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20509
        
 
20510
# check trigger-5 success:      1
 
20511
DROP TRIGGER trg_1;
 
20512
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20513
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20514
f_charbig = 'just inserted'
 
20515
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20516
DELETE FROM t0_aux
 
20517
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20518
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20519
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20520
'just inserted' FROM t0_template
 
20521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20522
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20523
BEGIN
 
20524
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20525
f_charbig = 'updated by trigger'
 
20526
      WHERE f_int1 = - old.f_int1;
 
20527
END|
 
20528
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20529
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20530
        
 
20531
# check trigger-6 success:      1
 
20532
DROP TRIGGER trg_1;
 
20533
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20534
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20535
f_charbig = 'just inserted'
 
20536
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20537
DELETE FROM t0_aux
 
20538
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20539
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20540
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20541
'just inserted' FROM t0_template
 
20542
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20543
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20544
BEGIN
 
20545
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20546
f_charbig = 'updated by trigger'
 
20547
      WHERE f_int1 = - old.f_int1;
 
20548
END|
 
20549
DELETE FROM t0_aux
 
20550
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20551
        
 
20552
# check trigger-7 success:      1
 
20553
DROP TRIGGER trg_1;
 
20554
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20555
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20556
f_charbig = 'just inserted'
 
20557
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20558
DELETE FROM t0_aux
 
20559
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20560
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20561
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20562
'just inserted' FROM t0_template
 
20563
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20564
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20565
BEGIN
 
20566
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20567
f_charbig = 'updated by trigger'
 
20568
      WHERE f_int1 = - old.f_int1;
 
20569
END|
 
20570
DELETE FROM t0_aux
 
20571
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20572
        
 
20573
# check trigger-8 success:      1
 
20574
DROP TRIGGER trg_1;
 
20575
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20576
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20577
f_charbig = 'just inserted'
 
20578
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20579
DELETE FROM t0_aux
 
20580
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20581
DELETE FROM t1
 
20582
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20583
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20584
BEGIN
 
20585
SET new.f_int1 = old.f_int1 + @max_row,
 
20586
new.f_int2 = old.f_int2 - @max_row,
 
20587
new.f_charbig = '####updated per update trigger####';
 
20588
END|
 
20589
UPDATE t1
 
20590
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20591
f_charbig = '####updated per update statement itself####';
 
20592
        
 
20593
# check trigger-9 success:      1
 
20594
DROP TRIGGER trg_2;
 
20595
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20596
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20597
f_charbig = CONCAT('===',f_char1,'===');
 
20598
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20599
BEGIN
 
20600
SET new.f_int1 = new.f_int1 + @max_row,
 
20601
new.f_int2 = new.f_int2 - @max_row,
 
20602
new.f_charbig = '####updated per update trigger####';
 
20603
END|
 
20604
UPDATE t1
 
20605
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20606
f_charbig = '####updated per update statement itself####';
 
20607
        
 
20608
# check trigger-10 success:     1
 
20609
DROP TRIGGER trg_2;
 
20610
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20611
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20612
f_charbig = CONCAT('===',f_char1,'===');
 
20613
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20614
BEGIN
 
20615
SET new.f_int1 = @my_max1 + @counter,
 
20616
new.f_int2 = @my_min2 - @counter,
 
20617
new.f_charbig = '####updated per insert trigger####';
 
20618
SET @counter = @counter + 1;
 
20619
END|
 
20620
SET @counter = 1;
 
20621
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20622
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20623
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20624
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20625
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20626
ORDER BY f_int1;
 
20627
DROP TRIGGER trg_3;
 
20628
        
 
20629
# check trigger-11 success:     1
 
20630
DELETE FROM t1
 
20631
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20632
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20633
AND f_charbig = '####updated per insert trigger####';
 
20634
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20635
BEGIN
 
20636
SET new.f_int1 = @my_max1 + @counter,
 
20637
new.f_int2 = @my_min2 - @counter,
 
20638
new.f_charbig = '####updated per insert trigger####';
 
20639
SET @counter = @counter + 1;
 
20640
END|
 
20641
SET @counter = 1;
 
20642
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20643
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20644
SELECT CAST(f_int1 AS CHAR),
 
20645
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20646
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20647
ORDER BY f_int1;
 
20648
DROP TRIGGER trg_3;
 
20649
        
 
20650
# check trigger-12 success:     1
 
20651
DELETE FROM t1
 
20652
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20653
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20654
AND f_charbig = '####updated per insert trigger####';
 
20655
ANALYZE  TABLE t1;
 
20656
Table   Op      Msg_type        Msg_text
 
20657
test.t1 analyze status  OK
 
20658
CHECK    TABLE t1 EXTENDED;
 
20659
Table   Op      Msg_type        Msg_text
 
20660
test.t1 check   status  OK
 
20661
CHECKSUM TABLE t1 EXTENDED;
 
20662
Table   Checksum
 
20663
test.t1 <some_value>
 
20664
OPTIMIZE TABLE t1;
 
20665
Table   Op      Msg_type        Msg_text
 
20666
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
20667
test.t1 optimize        status  OK
 
20668
# check layout success:    1
 
20669
REPAIR   TABLE t1 EXTENDED;
 
20670
Table   Op      Msg_type        Msg_text
 
20671
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20672
# check layout success:    1
 
20673
TRUNCATE t1;
 
20674
        
 
20675
# check TRUNCATE success:       1
 
20676
# check layout success:    1
 
20677
# End usability test (inc/partition_check.inc)
 
20678
DROP TABLE t1;
 
20679
CREATE TABLE t1 (
 
20680
f_int1 INTEGER,
 
20681
f_int2 INTEGER,
 
20682
f_char1 CHAR(20),
 
20683
f_char2 CHAR(20),
 
20684
f_charbig VARCHAR(1000)
 
20685
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
20686
)
 
20687
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
20688
(PARTITION part_3 VALUES IN (-3),
 
20689
PARTITION part_2 VALUES IN (-2),
 
20690
PARTITION part_1 VALUES IN (-1),
 
20691
PARTITION part_N VALUES IN (NULL),
 
20692
PARTITION part0 VALUES IN (0),
 
20693
PARTITION part1 VALUES IN (1),
 
20694
PARTITION part2 VALUES IN (2),
 
20695
PARTITION part3 VALUES IN (3));
 
20696
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20697
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
20698
# Start usability test (inc/partition_check.inc)
 
20699
create_command
 
20700
SHOW CREATE TABLE t1;
 
20701
Table   Create Table
 
20702
t1      CREATE TABLE `t1` (
 
20703
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
20704
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
20705
  `f_char1` char(20) DEFAULT NULL,
 
20706
  `f_char2` char(20) DEFAULT NULL,
 
20707
  `f_charbig` varchar(1000) DEFAULT NULL,
 
20708
  PRIMARY KEY (`f_int2`,`f_int1`),
 
20709
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
20710
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
20711
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
20712
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
20713
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
20714
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
20715
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
20716
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
20717
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
20718
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
20719
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
20720
 
 
20721
unified filelist
 
20722
t1.frm
 
20723
t1.par
 
20724
 
 
20725
# check prerequisites-1 success:    1
 
20726
# check COUNT(*) success:    1
 
20727
# check MIN/MAX(f_int1) success:    1
 
20728
# check MIN/MAX(f_int2) success:    1
 
20729
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20730
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20731
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20732
WHERE f_int1 IN (2,3);
 
20733
ERROR 23000: Can't write; duplicate key in table 't1'
 
20734
# check prerequisites-3 success:    1
 
20735
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
20736
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20737
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
20738
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
20739
WHERE f_int1 IN (2,3);
 
20740
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20741
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20742
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
20743
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
20744
WHERE f_int1 IN (2,3);
 
20745
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20746
# check read via f_int1 success: 1
 
20747
# check read via f_int2 success: 1
 
20748
        
 
20749
# check multiple-1 success:     1
 
20750
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20751
        
 
20752
# check multiple-2 success:     1
 
20753
INSERT INTO t1 SELECT * FROM t0_template
 
20754
WHERE MOD(f_int1,3) = 0;
 
20755
        
 
20756
# check multiple-3 success:     1
 
20757
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20758
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20759
AND @max_row_div2 + @max_row_div4;
 
20760
        
 
20761
# check multiple-4 success:     1
 
20762
DELETE FROM t1
 
20763
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20764
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20765
        
 
20766
# check multiple-5 success:     1
 
20767
SELECT COUNT(*) INTO @try_count FROM t0_template
 
20768
WHERE MOD(f_int1,3) = 0
 
20769
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20770
SELECT COUNT(*) INTO @clash_count
 
20771
FROM t1 INNER JOIN t0_template USING(f_int1)
 
20772
WHERE MOD(f_int1,3) = 0
 
20773
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20774
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20775
INSERT INTO t1
 
20776
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20777
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20778
f_charbig = '#SINGLE#';
 
20779
        
 
20780
# check single-1 success:       1
 
20781
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20782
INSERT INTO t1
 
20783
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20784
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20785
f_charbig = '#SINGLE#';
 
20786
        
 
20787
# check single-2 success:       1
 
20788
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20789
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20790
UPDATE t1 SET f_int1 = @cur_value2
 
20791
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20792
        
 
20793
# check single-3 success:       1
 
20794
SET @cur_value1= -1;
 
20795
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20796
UPDATE t1 SET f_int1 = @cur_value1
 
20797
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20798
        
 
20799
# check single-4 success:       1
 
20800
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20801
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20802
        
 
20803
# check single-5 success:       1
 
20804
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20805
        
 
20806
# check single-6 success:       1
 
20807
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20808
        
 
20809
# check single-7 success:       1
 
20810
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
20811
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20812
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20813
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20814
f_charbig = '#NULL#';
 
20815
INSERT INTO t1
 
20816
SET f_int1 = NULL , f_int2 = -@max_row,
 
20817
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20818
f_charbig = '#NULL#';
 
20819
ERROR 23000: Column 'f_int1' cannot be null
 
20820
# check null success:    1
 
20821
DELETE FROM t1
 
20822
WHERE f_int1 = 0 AND f_int2 = 0
 
20823
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20824
AND f_charbig = '#NULL#';
 
20825
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20826
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20827
   FROM t0_template source_tab
 
20828
WHERE MOD(f_int1,3) = 0
 
20829
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
20830
ON DUPLICATE KEY
 
20831
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
20832
f_int2 = 2 * @max_row + source_tab.f_int1,
 
20833
f_charbig = 'was updated';
 
20834
        
 
20835
# check unique-1-a success:     1
 
20836
        
 
20837
# check unique-1-b success:     1
 
20838
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20839
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20840
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20841
f_charbig = CONCAT('===',f_char1,'===')
 
20842
WHERE f_charbig = 'was updated';
 
20843
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20844
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
20845
   FROM t0_template source_tab
 
20846
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20847
        
 
20848
# check replace success:        1
 
20849
DELETE FROM t1
 
20850
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
20851
DELETE FROM t1
 
20852
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
20853
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
20854
UPDATE t1 SET f_int2 = f_int1,
 
20855
f_char1 = CAST(f_int1 AS CHAR),
 
20856
f_char2 = CAST(f_int1 AS CHAR),
 
20857
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
20858
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
20859
SET AUTOCOMMIT= 0;
 
20860
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20861
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20862
FROM t0_template source_tab
 
20863
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20864
        
 
20865
# check transactions-1 success:         1
 
20866
COMMIT WORK;
 
20867
        
 
20868
# check transactions-2 success:         1
 
20869
ROLLBACK WORK;
 
20870
        
 
20871
# check transactions-3 success:         1
 
20872
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20873
COMMIT WORK;
 
20874
ROLLBACK WORK;
 
20875
        
 
20876
# check transactions-4 success:         1
 
20877
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20878
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20879
FROM t0_template source_tab
 
20880
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20881
        
 
20882
# check transactions-5 success:         1
 
20883
ROLLBACK WORK;
 
20884
        
 
20885
# check transactions-6 success:         1
 
20886
# INFO: Storage engine used for t1 seems to be transactional.
 
20887
COMMIT;
 
20888
        
 
20889
# check transactions-7 success:         1
 
20890
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20891
COMMIT WORK;
 
20892
SET @@session.sql_mode = 'traditional';
 
20893
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20894
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20895
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20896
'', '', 'was inserted' FROM t0_template
 
20897
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20898
ERROR 22012: Division by 0
 
20899
COMMIT;
 
20900
        
 
20901
# check transactions-8 success:         1
 
20902
# INFO: Storage engine used for t1 seems to be able to revert
 
20903
#       changes made by the failing statement.
 
20904
SET @@session.sql_mode = '';
 
20905
SET AUTOCOMMIT= 1;
 
20906
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20907
COMMIT WORK;
 
20908
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20909
        
 
20910
# check special-1 success:      1
 
20911
UPDATE t1 SET f_charbig = '';
 
20912
        
 
20913
# check special-2 success:      1
 
20914
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20915
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20916
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20918
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20919
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20920
'just inserted' FROM t0_template
 
20921
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20922
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20923
BEGIN
 
20924
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20925
f_charbig = 'updated by trigger'
 
20926
      WHERE f_int1 = new.f_int1;
 
20927
END|
 
20928
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20929
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20931
        
 
20932
# check trigger-1 success:      1
 
20933
DROP TRIGGER trg_1;
 
20934
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20935
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20936
f_charbig = 'just inserted'
 
20937
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20938
DELETE FROM t0_aux
 
20939
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20940
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20941
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20942
'just inserted' FROM t0_template
 
20943
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20944
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20945
BEGIN
 
20946
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20947
f_charbig = 'updated by trigger'
 
20948
      WHERE f_int1 = new.f_int1;
 
20949
END|
 
20950
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20951
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20952
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20953
        
 
20954
# check trigger-2 success:      1
 
20955
DROP TRIGGER trg_1;
 
20956
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20957
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20958
f_charbig = 'just inserted'
 
20959
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20960
DELETE FROM t0_aux
 
20961
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20962
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20963
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20964
'just inserted' FROM t0_template
 
20965
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20966
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20967
BEGIN
 
20968
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20969
f_charbig = 'updated by trigger'
 
20970
      WHERE f_int1 = new.f_int1;
 
20971
END|
 
20972
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20973
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20974
        
 
20975
# check trigger-3 success:      1
 
20976
DROP TRIGGER trg_1;
 
20977
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20978
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20979
f_charbig = 'just inserted'
 
20980
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20981
DELETE FROM t0_aux
 
20982
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20983
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20984
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20985
'just inserted' FROM t0_template
 
20986
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20987
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20988
BEGIN
 
20989
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20990
f_charbig = 'updated by trigger'
 
20991
      WHERE f_int1 = - old.f_int1;
 
20992
END|
 
20993
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20994
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20995
        
 
20996
# check trigger-4 success:      1
 
20997
DROP TRIGGER trg_1;
 
20998
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20999
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21000
f_charbig = 'just inserted'
 
21001
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21002
DELETE FROM t0_aux
 
21003
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21004
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21005
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21006
'just inserted' FROM t0_template
 
21007
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21008
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21009
BEGIN
 
21010
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21011
f_charbig = 'updated by trigger'
 
21012
      WHERE f_int1 = new.f_int1;
 
21013
END|
 
21014
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21015
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21016
        
 
21017
# check trigger-5 success:      1
 
21018
DROP TRIGGER trg_1;
 
21019
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21020
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21021
f_charbig = 'just inserted'
 
21022
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21023
DELETE FROM t0_aux
 
21024
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21025
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21026
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21027
'just inserted' FROM t0_template
 
21028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21029
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21030
BEGIN
 
21031
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21032
f_charbig = 'updated by trigger'
 
21033
      WHERE f_int1 = - old.f_int1;
 
21034
END|
 
21035
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21036
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21037
        
 
21038
# check trigger-6 success:      1
 
21039
DROP TRIGGER trg_1;
 
21040
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21041
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21042
f_charbig = 'just inserted'
 
21043
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21044
DELETE FROM t0_aux
 
21045
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21046
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21047
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21048
'just inserted' FROM t0_template
 
21049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21050
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21051
BEGIN
 
21052
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21053
f_charbig = 'updated by trigger'
 
21054
      WHERE f_int1 = - old.f_int1;
 
21055
END|
 
21056
DELETE FROM t0_aux
 
21057
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21058
        
 
21059
# check trigger-7 success:      1
 
21060
DROP TRIGGER trg_1;
 
21061
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21062
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21063
f_charbig = 'just inserted'
 
21064
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21065
DELETE FROM t0_aux
 
21066
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21067
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21068
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21069
'just inserted' FROM t0_template
 
21070
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21071
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21072
BEGIN
 
21073
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21074
f_charbig = 'updated by trigger'
 
21075
      WHERE f_int1 = - old.f_int1;
 
21076
END|
 
21077
DELETE FROM t0_aux
 
21078
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21079
        
 
21080
# check trigger-8 success:      1
 
21081
DROP TRIGGER trg_1;
 
21082
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21083
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21084
f_charbig = 'just inserted'
 
21085
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21086
DELETE FROM t0_aux
 
21087
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21088
DELETE FROM t1
 
21089
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21090
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21091
BEGIN
 
21092
SET new.f_int1 = old.f_int1 + @max_row,
 
21093
new.f_int2 = old.f_int2 - @max_row,
 
21094
new.f_charbig = '####updated per update trigger####';
 
21095
END|
 
21096
UPDATE t1
 
21097
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21098
f_charbig = '####updated per update statement itself####';
 
21099
        
 
21100
# check trigger-9 success:      1
 
21101
DROP TRIGGER trg_2;
 
21102
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21103
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21104
f_charbig = CONCAT('===',f_char1,'===');
 
21105
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21106
BEGIN
 
21107
SET new.f_int1 = new.f_int1 + @max_row,
 
21108
new.f_int2 = new.f_int2 - @max_row,
 
21109
new.f_charbig = '####updated per update trigger####';
 
21110
END|
 
21111
UPDATE t1
 
21112
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21113
f_charbig = '####updated per update statement itself####';
 
21114
        
 
21115
# check trigger-10 success:     1
 
21116
DROP TRIGGER trg_2;
 
21117
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21118
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21119
f_charbig = CONCAT('===',f_char1,'===');
 
21120
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21121
BEGIN
 
21122
SET new.f_int1 = @my_max1 + @counter,
 
21123
new.f_int2 = @my_min2 - @counter,
 
21124
new.f_charbig = '####updated per insert trigger####';
 
21125
SET @counter = @counter + 1;
 
21126
END|
 
21127
SET @counter = 1;
 
21128
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21129
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21130
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21131
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21133
ORDER BY f_int1;
 
21134
DROP TRIGGER trg_3;
 
21135
        
 
21136
# check trigger-11 success:     1
 
21137
DELETE FROM t1
 
21138
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21139
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21140
AND f_charbig = '####updated per insert trigger####';
 
21141
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21142
BEGIN
 
21143
SET new.f_int1 = @my_max1 + @counter,
 
21144
new.f_int2 = @my_min2 - @counter,
 
21145
new.f_charbig = '####updated per insert trigger####';
 
21146
SET @counter = @counter + 1;
 
21147
END|
 
21148
SET @counter = 1;
 
21149
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21150
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21151
SELECT CAST(f_int1 AS CHAR),
 
21152
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21153
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21154
ORDER BY f_int1;
 
21155
DROP TRIGGER trg_3;
 
21156
        
 
21157
# check trigger-12 success:     1
 
21158
DELETE FROM t1
 
21159
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21160
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21161
AND f_charbig = '####updated per insert trigger####';
 
21162
ANALYZE  TABLE t1;
 
21163
Table   Op      Msg_type        Msg_text
 
21164
test.t1 analyze status  OK
 
21165
CHECK    TABLE t1 EXTENDED;
 
21166
Table   Op      Msg_type        Msg_text
 
21167
test.t1 check   status  OK
 
21168
CHECKSUM TABLE t1 EXTENDED;
 
21169
Table   Checksum
 
21170
test.t1 <some_value>
 
21171
OPTIMIZE TABLE t1;
 
21172
Table   Op      Msg_type        Msg_text
 
21173
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
21174
test.t1 optimize        status  OK
 
21175
# check layout success:    1
 
21176
REPAIR   TABLE t1 EXTENDED;
 
21177
Table   Op      Msg_type        Msg_text
 
21178
test.t1 repair  note    The storage engine for the table doesn't support repair
 
21179
# check layout success:    1
 
21180
TRUNCATE t1;
 
21181
        
 
21182
# check TRUNCATE success:       1
 
21183
# check layout success:    1
 
21184
# End usability test (inc/partition_check.inc)
 
21185
DROP TABLE t1;
 
21186
CREATE TABLE t1 (
 
21187
f_int1 INTEGER,
 
21188
f_int2 INTEGER,
 
21189
f_char1 CHAR(20),
 
21190
f_char2 CHAR(20),
 
21191
f_charbig VARCHAR(1000)
 
21192
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
21193
)
 
21194
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
21195
(PARTITION parta VALUES LESS THAN (0),
 
21196
PARTITION partb VALUES LESS THAN (5),
 
21197
PARTITION partc VALUES LESS THAN (10),
 
21198
PARTITION partd VALUES LESS THAN (10 + 5),
 
21199
PARTITION parte VALUES LESS THAN (20),
 
21200
PARTITION partf VALUES LESS THAN (2147483646));
 
21201
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21202
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
21203
# Start usability test (inc/partition_check.inc)
 
21204
create_command
 
21205
SHOW CREATE TABLE t1;
 
21206
Table   Create Table
 
21207
t1      CREATE TABLE `t1` (
 
21208
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
21209
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
21210
  `f_char1` char(20) DEFAULT NULL,
 
21211
  `f_char2` char(20) DEFAULT NULL,
 
21212
  `f_charbig` varchar(1000) DEFAULT NULL,
 
21213
  PRIMARY KEY (`f_int2`,`f_int1`),
 
21214
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
21215
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
21216
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
21217
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
21218
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
21219
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
21220
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
21221
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
21222
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
21223
 
 
21224
unified filelist
 
21225
t1.frm
 
21226
t1.par
 
21227
 
 
21228
# check prerequisites-1 success:    1
 
21229
# check COUNT(*) success:    1
 
21230
# check MIN/MAX(f_int1) success:    1
 
21231
# check MIN/MAX(f_int2) success:    1
 
21232
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21233
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21234
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21235
WHERE f_int1 IN (2,3);
 
21236
ERROR 23000: Can't write; duplicate key in table 't1'
 
21237
# check prerequisites-3 success:    1
 
21238
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
21239
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21240
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
21241
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
21242
WHERE f_int1 IN (2,3);
 
21243
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21244
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21245
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
21246
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
21247
WHERE f_int1 IN (2,3);
 
21248
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21249
# check read via f_int1 success: 1
 
21250
# check read via f_int2 success: 1
 
21251
        
 
21252
# check multiple-1 success:     1
 
21253
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21254
        
 
21255
# check multiple-2 success:     1
 
21256
INSERT INTO t1 SELECT * FROM t0_template
 
21257
WHERE MOD(f_int1,3) = 0;
 
21258
        
 
21259
# check multiple-3 success:     1
 
21260
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21261
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21262
AND @max_row_div2 + @max_row_div4;
 
21263
        
 
21264
# check multiple-4 success:     1
 
21265
DELETE FROM t1
 
21266
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21267
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21268
        
 
21269
# check multiple-5 success:     1
 
21270
SELECT COUNT(*) INTO @try_count FROM t0_template
 
21271
WHERE MOD(f_int1,3) = 0
 
21272
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21273
SELECT COUNT(*) INTO @clash_count
 
21274
FROM t1 INNER JOIN t0_template USING(f_int1)
 
21275
WHERE MOD(f_int1,3) = 0
 
21276
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21277
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21278
INSERT INTO t1
 
21279
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21280
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21281
f_charbig = '#SINGLE#';
 
21282
        
 
21283
# check single-1 success:       1
 
21284
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21285
INSERT INTO t1
 
21286
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21287
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21288
f_charbig = '#SINGLE#';
 
21289
        
 
21290
# check single-2 success:       1
 
21291
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21292
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21293
UPDATE t1 SET f_int1 = @cur_value2
 
21294
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21295
        
 
21296
# check single-3 success:       1
 
21297
SET @cur_value1= -1;
 
21298
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21299
UPDATE t1 SET f_int1 = @cur_value1
 
21300
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21301
        
 
21302
# check single-4 success:       1
 
21303
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21304
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21305
        
 
21306
# check single-5 success:       1
 
21307
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21308
        
 
21309
# check single-6 success:       1
 
21310
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21311
ERROR HY000: Table has no partition for value 2147483647
 
21312
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21313
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21314
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21315
f_charbig = '#NULL#';
 
21316
INSERT INTO t1
 
21317
SET f_int1 = NULL , f_int2 = -@max_row,
 
21318
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21319
f_charbig = '#NULL#';
 
21320
ERROR 23000: Column 'f_int1' cannot be null
 
21321
# check null success:    1
 
21322
DELETE FROM t1
 
21323
WHERE f_int1 = 0 AND f_int2 = 0
 
21324
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21325
AND f_charbig = '#NULL#';
 
21326
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21327
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21328
   FROM t0_template source_tab
 
21329
WHERE MOD(f_int1,3) = 0
 
21330
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
21331
ON DUPLICATE KEY
 
21332
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
21333
f_int2 = 2 * @max_row + source_tab.f_int1,
 
21334
f_charbig = 'was updated';
 
21335
        
 
21336
# check unique-1-a success:     1
 
21337
        
 
21338
# check unique-1-b success:     1
 
21339
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21340
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21341
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21342
f_charbig = CONCAT('===',f_char1,'===')
 
21343
WHERE f_charbig = 'was updated';
 
21344
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21345
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
21346
   FROM t0_template source_tab
 
21347
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21348
        
 
21349
# check replace success:        1
 
21350
DELETE FROM t1
 
21351
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
21352
DELETE FROM t1
 
21353
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
21354
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
21355
UPDATE t1 SET f_int2 = f_int1,
 
21356
f_char1 = CAST(f_int1 AS CHAR),
 
21357
f_char2 = CAST(f_int1 AS CHAR),
 
21358
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
21359
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
21360
SET AUTOCOMMIT= 0;
 
21361
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21362
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21363
FROM t0_template source_tab
 
21364
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21365
        
 
21366
# check transactions-1 success:         1
 
21367
COMMIT WORK;
 
21368
        
 
21369
# check transactions-2 success:         1
 
21370
ROLLBACK WORK;
 
21371
        
 
21372
# check transactions-3 success:         1
 
21373
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21374
COMMIT WORK;
 
21375
ROLLBACK WORK;
 
21376
        
 
21377
# check transactions-4 success:         1
 
21378
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21379
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21380
FROM t0_template source_tab
 
21381
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21382
        
 
21383
# check transactions-5 success:         1
 
21384
ROLLBACK WORK;
 
21385
        
 
21386
# check transactions-6 success:         1
 
21387
# INFO: Storage engine used for t1 seems to be transactional.
 
21388
COMMIT;
 
21389
        
 
21390
# check transactions-7 success:         1
 
21391
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21392
COMMIT WORK;
 
21393
SET @@session.sql_mode = 'traditional';
 
21394
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21395
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21396
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21397
'', '', 'was inserted' FROM t0_template
 
21398
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21399
ERROR 22012: Division by 0
 
21400
COMMIT;
 
21401
        
 
21402
# check transactions-8 success:         1
 
21403
# INFO: Storage engine used for t1 seems to be able to revert
 
21404
#       changes made by the failing statement.
 
21405
SET @@session.sql_mode = '';
 
21406
SET AUTOCOMMIT= 1;
 
21407
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21408
COMMIT WORK;
 
21409
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21410
        
 
21411
# check special-1 success:      1
 
21412
UPDATE t1 SET f_charbig = '';
 
21413
        
 
21414
# check special-2 success:      1
 
21415
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21416
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21417
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21418
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21419
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21420
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21421
'just inserted' FROM t0_template
 
21422
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21423
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21424
BEGIN
 
21425
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21426
f_charbig = 'updated by trigger'
 
21427
      WHERE f_int1 = new.f_int1;
 
21428
END|
 
21429
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21430
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21431
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21432
        
 
21433
# check trigger-1 success:      1
 
21434
DROP TRIGGER trg_1;
 
21435
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21436
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21437
f_charbig = 'just inserted'
 
21438
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21439
DELETE FROM t0_aux
 
21440
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21441
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21442
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21443
'just inserted' FROM t0_template
 
21444
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21445
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21446
BEGIN
 
21447
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21448
f_charbig = 'updated by trigger'
 
21449
      WHERE f_int1 = new.f_int1;
 
21450
END|
 
21451
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21452
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21454
        
 
21455
# check trigger-2 success:      1
 
21456
DROP TRIGGER trg_1;
 
21457
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21458
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21459
f_charbig = 'just inserted'
 
21460
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21461
DELETE FROM t0_aux
 
21462
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21463
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21464
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21465
'just inserted' FROM t0_template
 
21466
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21467
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21468
BEGIN
 
21469
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21470
f_charbig = 'updated by trigger'
 
21471
      WHERE f_int1 = new.f_int1;
 
21472
END|
 
21473
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21474
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21475
        
 
21476
# check trigger-3 success:      1
 
21477
DROP TRIGGER trg_1;
 
21478
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21479
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21480
f_charbig = 'just inserted'
 
21481
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21482
DELETE FROM t0_aux
 
21483
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21485
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21486
'just inserted' FROM t0_template
 
21487
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21488
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21489
BEGIN
 
21490
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21491
f_charbig = 'updated by trigger'
 
21492
      WHERE f_int1 = - old.f_int1;
 
21493
END|
 
21494
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21495
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21496
        
 
21497
# check trigger-4 success:      1
 
21498
DROP TRIGGER trg_1;
 
21499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21500
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21501
f_charbig = 'just inserted'
 
21502
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21503
DELETE FROM t0_aux
 
21504
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21505
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21506
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21507
'just inserted' FROM t0_template
 
21508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21509
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21510
BEGIN
 
21511
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21512
f_charbig = 'updated by trigger'
 
21513
      WHERE f_int1 = new.f_int1;
 
21514
END|
 
21515
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21516
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21517
        
 
21518
# check trigger-5 success:      1
 
21519
DROP TRIGGER trg_1;
 
21520
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21521
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21522
f_charbig = 'just inserted'
 
21523
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21524
DELETE FROM t0_aux
 
21525
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21526
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21527
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21528
'just inserted' FROM t0_template
 
21529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21530
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21531
BEGIN
 
21532
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21533
f_charbig = 'updated by trigger'
 
21534
      WHERE f_int1 = - old.f_int1;
 
21535
END|
 
21536
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21537
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21538
        
 
21539
# check trigger-6 success:      1
 
21540
DROP TRIGGER trg_1;
 
21541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21543
f_charbig = 'just inserted'
 
21544
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21545
DELETE FROM t0_aux
 
21546
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21549
'just inserted' FROM t0_template
 
21550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21551
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21552
BEGIN
 
21553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21554
f_charbig = 'updated by trigger'
 
21555
      WHERE f_int1 = - old.f_int1;
 
21556
END|
 
21557
DELETE FROM t0_aux
 
21558
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21559
        
 
21560
# check trigger-7 success:      1
 
21561
DROP TRIGGER trg_1;
 
21562
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21563
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21564
f_charbig = 'just inserted'
 
21565
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21566
DELETE FROM t0_aux
 
21567
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21568
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21569
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21570
'just inserted' FROM t0_template
 
21571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21572
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21573
BEGIN
 
21574
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21575
f_charbig = 'updated by trigger'
 
21576
      WHERE f_int1 = - old.f_int1;
 
21577
END|
 
21578
DELETE FROM t0_aux
 
21579
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21580
        
 
21581
# check trigger-8 success:      1
 
21582
DROP TRIGGER trg_1;
 
21583
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21584
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21585
f_charbig = 'just inserted'
 
21586
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21587
DELETE FROM t0_aux
 
21588
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21589
DELETE FROM t1
 
21590
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21591
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21592
BEGIN
 
21593
SET new.f_int1 = old.f_int1 + @max_row,
 
21594
new.f_int2 = old.f_int2 - @max_row,
 
21595
new.f_charbig = '####updated per update trigger####';
 
21596
END|
 
21597
UPDATE t1
 
21598
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21599
f_charbig = '####updated per update statement itself####';
 
21600
        
 
21601
# check trigger-9 success:      1
 
21602
DROP TRIGGER trg_2;
 
21603
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21604
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21605
f_charbig = CONCAT('===',f_char1,'===');
 
21606
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21607
BEGIN
 
21608
SET new.f_int1 = new.f_int1 + @max_row,
 
21609
new.f_int2 = new.f_int2 - @max_row,
 
21610
new.f_charbig = '####updated per update trigger####';
 
21611
END|
 
21612
UPDATE t1
 
21613
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21614
f_charbig = '####updated per update statement itself####';
 
21615
        
 
21616
# check trigger-10 success:     1
 
21617
DROP TRIGGER trg_2;
 
21618
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21619
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21620
f_charbig = CONCAT('===',f_char1,'===');
 
21621
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21622
BEGIN
 
21623
SET new.f_int1 = @my_max1 + @counter,
 
21624
new.f_int2 = @my_min2 - @counter,
 
21625
new.f_charbig = '####updated per insert trigger####';
 
21626
SET @counter = @counter + 1;
 
21627
END|
 
21628
SET @counter = 1;
 
21629
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21630
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21631
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21632
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21633
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21634
ORDER BY f_int1;
 
21635
DROP TRIGGER trg_3;
 
21636
        
 
21637
# check trigger-11 success:     1
 
21638
DELETE FROM t1
 
21639
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21640
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21641
AND f_charbig = '####updated per insert trigger####';
 
21642
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21643
BEGIN
 
21644
SET new.f_int1 = @my_max1 + @counter,
 
21645
new.f_int2 = @my_min2 - @counter,
 
21646
new.f_charbig = '####updated per insert trigger####';
 
21647
SET @counter = @counter + 1;
 
21648
END|
 
21649
SET @counter = 1;
 
21650
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21651
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21652
SELECT CAST(f_int1 AS CHAR),
 
21653
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21655
ORDER BY f_int1;
 
21656
DROP TRIGGER trg_3;
 
21657
        
 
21658
# check trigger-12 success:     1
 
21659
DELETE FROM t1
 
21660
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21661
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21662
AND f_charbig = '####updated per insert trigger####';
 
21663
ANALYZE  TABLE t1;
 
21664
Table   Op      Msg_type        Msg_text
 
21665
test.t1 analyze status  OK
 
21666
CHECK    TABLE t1 EXTENDED;
 
21667
Table   Op      Msg_type        Msg_text
 
21668
test.t1 check   status  OK
 
21669
CHECKSUM TABLE t1 EXTENDED;
 
21670
Table   Checksum
 
21671
test.t1 <some_value>
 
21672
OPTIMIZE TABLE t1;
 
21673
Table   Op      Msg_type        Msg_text
 
21674
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
21675
test.t1 optimize        status  OK
 
21676
# check layout success:    1
 
21677
REPAIR   TABLE t1 EXTENDED;
 
21678
Table   Op      Msg_type        Msg_text
 
21679
test.t1 repair  note    The storage engine for the table doesn't support repair
 
21680
# check layout success:    1
 
21681
TRUNCATE t1;
 
21682
        
 
21683
# check TRUNCATE success:       1
 
21684
# check layout success:    1
 
21685
# End usability test (inc/partition_check.inc)
 
21686
DROP TABLE t1;
 
21687
CREATE TABLE t1 (
 
21688
f_int1 INTEGER,
 
21689
f_int2 INTEGER,
 
21690
f_char1 CHAR(20),
 
21691
f_char2 CHAR(20),
 
21692
f_charbig VARCHAR(1000)
 
21693
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
21694
)
 
21695
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
21696
(PARTITION parta VALUES LESS THAN (0),
 
21697
PARTITION partb VALUES LESS THAN (5),
 
21698
PARTITION partc VALUES LESS THAN (10),
 
21699
PARTITION partd VALUES LESS THAN (2147483646));
 
21700
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21701
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
21702
# Start usability test (inc/partition_check.inc)
 
21703
create_command
 
21704
SHOW CREATE TABLE t1;
 
21705
Table   Create Table
 
21706
t1      CREATE TABLE `t1` (
 
21707
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
21708
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
21709
  `f_char1` char(20) DEFAULT NULL,
 
21710
  `f_char2` char(20) DEFAULT NULL,
 
21711
  `f_charbig` varchar(1000) DEFAULT NULL,
 
21712
  PRIMARY KEY (`f_int2`,`f_int1`),
 
21713
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
21714
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
21715
/*!50100 PARTITION BY RANGE (f_int1)
 
21716
SUBPARTITION BY HASH (f_int2)
 
21717
SUBPARTITIONS 2
 
21718
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
21719
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
21720
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
21721
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
21722
 
 
21723
unified filelist
 
21724
t1.frm
 
21725
t1.par
 
21726
 
 
21727
# check prerequisites-1 success:    1
 
21728
# check COUNT(*) success:    1
 
21729
# check MIN/MAX(f_int1) success:    1
 
21730
# check MIN/MAX(f_int2) success:    1
 
21731
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21732
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21733
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21734
WHERE f_int1 IN (2,3);
 
21735
ERROR 23000: Can't write; duplicate key in table 't1'
 
21736
# check prerequisites-3 success:    1
 
21737
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
21738
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21739
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
21740
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
21741
WHERE f_int1 IN (2,3);
 
21742
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21743
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21744
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
21745
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
21746
WHERE f_int1 IN (2,3);
 
21747
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21748
# check read via f_int1 success: 1
 
21749
# check read via f_int2 success: 1
 
21750
        
 
21751
# check multiple-1 success:     1
 
21752
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21753
        
 
21754
# check multiple-2 success:     1
 
21755
INSERT INTO t1 SELECT * FROM t0_template
 
21756
WHERE MOD(f_int1,3) = 0;
 
21757
        
 
21758
# check multiple-3 success:     1
 
21759
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21760
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21761
AND @max_row_div2 + @max_row_div4;
 
21762
        
 
21763
# check multiple-4 success:     1
 
21764
DELETE FROM t1
 
21765
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21766
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21767
        
 
21768
# check multiple-5 success:     1
 
21769
SELECT COUNT(*) INTO @try_count FROM t0_template
 
21770
WHERE MOD(f_int1,3) = 0
 
21771
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21772
SELECT COUNT(*) INTO @clash_count
 
21773
FROM t1 INNER JOIN t0_template USING(f_int1)
 
21774
WHERE MOD(f_int1,3) = 0
 
21775
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21776
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21777
INSERT INTO t1
 
21778
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21779
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21780
f_charbig = '#SINGLE#';
 
21781
        
 
21782
# check single-1 success:       1
 
21783
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21784
INSERT INTO t1
 
21785
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21786
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21787
f_charbig = '#SINGLE#';
 
21788
        
 
21789
# check single-2 success:       1
 
21790
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21791
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21792
UPDATE t1 SET f_int1 = @cur_value2
 
21793
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21794
        
 
21795
# check single-3 success:       1
 
21796
SET @cur_value1= -1;
 
21797
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21798
UPDATE t1 SET f_int1 = @cur_value1
 
21799
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21800
        
 
21801
# check single-4 success:       1
 
21802
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21803
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21804
        
 
21805
# check single-5 success:       1
 
21806
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21807
        
 
21808
# check single-6 success:       1
 
21809
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21810
ERROR HY000: Table has no partition for value 2147483647
 
21811
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21812
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21813
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21814
f_charbig = '#NULL#';
 
21815
INSERT INTO t1
 
21816
SET f_int1 = NULL , f_int2 = -@max_row,
 
21817
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21818
f_charbig = '#NULL#';
 
21819
ERROR 23000: Column 'f_int1' cannot be null
 
21820
# check null success:    1
 
21821
DELETE FROM t1
 
21822
WHERE f_int1 = 0 AND f_int2 = 0
 
21823
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21824
AND f_charbig = '#NULL#';
 
21825
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21826
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21827
   FROM t0_template source_tab
 
21828
WHERE MOD(f_int1,3) = 0
 
21829
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
21830
ON DUPLICATE KEY
 
21831
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
21832
f_int2 = 2 * @max_row + source_tab.f_int1,
 
21833
f_charbig = 'was updated';
 
21834
        
 
21835
# check unique-1-a success:     1
 
21836
        
 
21837
# check unique-1-b success:     1
 
21838
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21839
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21840
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21841
f_charbig = CONCAT('===',f_char1,'===')
 
21842
WHERE f_charbig = 'was updated';
 
21843
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21844
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
21845
   FROM t0_template source_tab
 
21846
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21847
        
 
21848
# check replace success:        1
 
21849
DELETE FROM t1
 
21850
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
21851
DELETE FROM t1
 
21852
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
21853
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
21854
UPDATE t1 SET f_int2 = f_int1,
 
21855
f_char1 = CAST(f_int1 AS CHAR),
 
21856
f_char2 = CAST(f_int1 AS CHAR),
 
21857
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
21858
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
21859
SET AUTOCOMMIT= 0;
 
21860
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21861
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21862
FROM t0_template source_tab
 
21863
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21864
        
 
21865
# check transactions-1 success:         1
 
21866
COMMIT WORK;
 
21867
        
 
21868
# check transactions-2 success:         1
 
21869
ROLLBACK WORK;
 
21870
        
 
21871
# check transactions-3 success:         1
 
21872
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21873
COMMIT WORK;
 
21874
ROLLBACK WORK;
 
21875
        
 
21876
# check transactions-4 success:         1
 
21877
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21878
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21879
FROM t0_template source_tab
 
21880
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21881
        
 
21882
# check transactions-5 success:         1
 
21883
ROLLBACK WORK;
 
21884
        
 
21885
# check transactions-6 success:         1
 
21886
# INFO: Storage engine used for t1 seems to be transactional.
 
21887
COMMIT;
 
21888
        
 
21889
# check transactions-7 success:         1
 
21890
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21891
COMMIT WORK;
 
21892
SET @@session.sql_mode = 'traditional';
 
21893
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21894
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21895
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21896
'', '', 'was inserted' FROM t0_template
 
21897
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21898
ERROR 22012: Division by 0
 
21899
COMMIT;
 
21900
        
 
21901
# check transactions-8 success:         1
 
21902
# INFO: Storage engine used for t1 seems to be able to revert
 
21903
#       changes made by the failing statement.
 
21904
SET @@session.sql_mode = '';
 
21905
SET AUTOCOMMIT= 1;
 
21906
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21907
COMMIT WORK;
 
21908
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21909
        
 
21910
# check special-1 success:      1
 
21911
UPDATE t1 SET f_charbig = '';
 
21912
        
 
21913
# check special-2 success:      1
 
21914
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21915
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21916
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21918
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21919
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21920
'just inserted' FROM t0_template
 
21921
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21922
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21923
BEGIN
 
21924
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21925
f_charbig = 'updated by trigger'
 
21926
      WHERE f_int1 = new.f_int1;
 
21927
END|
 
21928
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21929
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21931
        
 
21932
# check trigger-1 success:      1
 
21933
DROP TRIGGER trg_1;
 
21934
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21935
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21936
f_charbig = 'just inserted'
 
21937
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21938
DELETE FROM t0_aux
 
21939
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21940
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21941
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21942
'just inserted' FROM t0_template
 
21943
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21944
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21945
BEGIN
 
21946
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21947
f_charbig = 'updated by trigger'
 
21948
      WHERE f_int1 = new.f_int1;
 
21949
END|
 
21950
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21951
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21952
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21953
        
 
21954
# check trigger-2 success:      1
 
21955
DROP TRIGGER trg_1;
 
21956
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21957
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21958
f_charbig = 'just inserted'
 
21959
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21960
DELETE FROM t0_aux
 
21961
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21962
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21963
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21964
'just inserted' FROM t0_template
 
21965
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21966
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21967
BEGIN
 
21968
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21969
f_charbig = 'updated by trigger'
 
21970
      WHERE f_int1 = new.f_int1;
 
21971
END|
 
21972
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21973
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21974
        
 
21975
# check trigger-3 success:      1
 
21976
DROP TRIGGER trg_1;
 
21977
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21978
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21979
f_charbig = 'just inserted'
 
21980
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21981
DELETE FROM t0_aux
 
21982
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21983
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21984
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21985
'just inserted' FROM t0_template
 
21986
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21987
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21988
BEGIN
 
21989
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21990
f_charbig = 'updated by trigger'
 
21991
      WHERE f_int1 = - old.f_int1;
 
21992
END|
 
21993
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21994
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21995
        
 
21996
# check trigger-4 success:      1
 
21997
DROP TRIGGER trg_1;
 
21998
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21999
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22000
f_charbig = 'just inserted'
 
22001
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22002
DELETE FROM t0_aux
 
22003
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22004
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22005
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22006
'just inserted' FROM t0_template
 
22007
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22008
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22009
BEGIN
 
22010
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22011
f_charbig = 'updated by trigger'
 
22012
      WHERE f_int1 = new.f_int1;
 
22013
END|
 
22014
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22015
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22016
        
 
22017
# check trigger-5 success:      1
 
22018
DROP TRIGGER trg_1;
 
22019
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22020
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22021
f_charbig = 'just inserted'
 
22022
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22023
DELETE FROM t0_aux
 
22024
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22025
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22026
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22027
'just inserted' FROM t0_template
 
22028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22029
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22030
BEGIN
 
22031
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22032
f_charbig = 'updated by trigger'
 
22033
      WHERE f_int1 = - old.f_int1;
 
22034
END|
 
22035
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22036
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22037
        
 
22038
# check trigger-6 success:      1
 
22039
DROP TRIGGER trg_1;
 
22040
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22041
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22042
f_charbig = 'just inserted'
 
22043
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22044
DELETE FROM t0_aux
 
22045
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22046
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22047
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22048
'just inserted' FROM t0_template
 
22049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22050
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22051
BEGIN
 
22052
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22053
f_charbig = 'updated by trigger'
 
22054
      WHERE f_int1 = - old.f_int1;
 
22055
END|
 
22056
DELETE FROM t0_aux
 
22057
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22058
        
 
22059
# check trigger-7 success:      1
 
22060
DROP TRIGGER trg_1;
 
22061
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22062
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22063
f_charbig = 'just inserted'
 
22064
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22065
DELETE FROM t0_aux
 
22066
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22067
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22068
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22069
'just inserted' FROM t0_template
 
22070
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22071
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22072
BEGIN
 
22073
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22074
f_charbig = 'updated by trigger'
 
22075
      WHERE f_int1 = - old.f_int1;
 
22076
END|
 
22077
DELETE FROM t0_aux
 
22078
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22079
        
 
22080
# check trigger-8 success:      1
 
22081
DROP TRIGGER trg_1;
 
22082
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22083
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22084
f_charbig = 'just inserted'
 
22085
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22086
DELETE FROM t0_aux
 
22087
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22088
DELETE FROM t1
 
22089
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22090
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22091
BEGIN
 
22092
SET new.f_int1 = old.f_int1 + @max_row,
 
22093
new.f_int2 = old.f_int2 - @max_row,
 
22094
new.f_charbig = '####updated per update trigger####';
 
22095
END|
 
22096
UPDATE t1
 
22097
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22098
f_charbig = '####updated per update statement itself####';
 
22099
        
 
22100
# check trigger-9 success:      1
 
22101
DROP TRIGGER trg_2;
 
22102
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22103
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22104
f_charbig = CONCAT('===',f_char1,'===');
 
22105
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22106
BEGIN
 
22107
SET new.f_int1 = new.f_int1 + @max_row,
 
22108
new.f_int2 = new.f_int2 - @max_row,
 
22109
new.f_charbig = '####updated per update trigger####';
 
22110
END|
 
22111
UPDATE t1
 
22112
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22113
f_charbig = '####updated per update statement itself####';
 
22114
        
 
22115
# check trigger-10 success:     1
 
22116
DROP TRIGGER trg_2;
 
22117
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22118
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22119
f_charbig = CONCAT('===',f_char1,'===');
 
22120
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22121
BEGIN
 
22122
SET new.f_int1 = @my_max1 + @counter,
 
22123
new.f_int2 = @my_min2 - @counter,
 
22124
new.f_charbig = '####updated per insert trigger####';
 
22125
SET @counter = @counter + 1;
 
22126
END|
 
22127
SET @counter = 1;
 
22128
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22129
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22130
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22131
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22133
ORDER BY f_int1;
 
22134
DROP TRIGGER trg_3;
 
22135
        
 
22136
# check trigger-11 success:     1
 
22137
DELETE FROM t1
 
22138
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22139
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22140
AND f_charbig = '####updated per insert trigger####';
 
22141
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22142
BEGIN
 
22143
SET new.f_int1 = @my_max1 + @counter,
 
22144
new.f_int2 = @my_min2 - @counter,
 
22145
new.f_charbig = '####updated per insert trigger####';
 
22146
SET @counter = @counter + 1;
 
22147
END|
 
22148
SET @counter = 1;
 
22149
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22150
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22151
SELECT CAST(f_int1 AS CHAR),
 
22152
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22153
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22154
ORDER BY f_int1;
 
22155
DROP TRIGGER trg_3;
 
22156
        
 
22157
# check trigger-12 success:     1
 
22158
DELETE FROM t1
 
22159
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22160
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22161
AND f_charbig = '####updated per insert trigger####';
 
22162
ANALYZE  TABLE t1;
 
22163
Table   Op      Msg_type        Msg_text
 
22164
test.t1 analyze status  OK
 
22165
CHECK    TABLE t1 EXTENDED;
 
22166
Table   Op      Msg_type        Msg_text
 
22167
test.t1 check   status  OK
 
22168
CHECKSUM TABLE t1 EXTENDED;
 
22169
Table   Checksum
 
22170
test.t1 <some_value>
 
22171
OPTIMIZE TABLE t1;
 
22172
Table   Op      Msg_type        Msg_text
 
22173
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
22174
test.t1 optimize        status  OK
 
22175
# check layout success:    1
 
22176
REPAIR   TABLE t1 EXTENDED;
 
22177
Table   Op      Msg_type        Msg_text
 
22178
test.t1 repair  note    The storage engine for the table doesn't support repair
 
22179
# check layout success:    1
 
22180
TRUNCATE t1;
 
22181
        
 
22182
# check TRUNCATE success:       1
 
22183
# check layout success:    1
 
22184
# End usability test (inc/partition_check.inc)
 
22185
DROP TABLE t1;
 
22186
CREATE TABLE t1 (
 
22187
f_int1 INTEGER,
 
22188
f_int2 INTEGER,
 
22189
f_char1 CHAR(20),
 
22190
f_char2 CHAR(20),
 
22191
f_charbig VARCHAR(1000)
 
22192
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
22193
)
 
22194
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
22195
(PARTITION part1 VALUES LESS THAN (0)
 
22196
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
22197
PARTITION part2 VALUES LESS THAN (5)
 
22198
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
22199
PARTITION part3 VALUES LESS THAN (10)
 
22200
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
22201
PARTITION part4 VALUES LESS THAN (2147483646)
 
22202
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
22203
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22204
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
22205
# Start usability test (inc/partition_check.inc)
 
22206
create_command
 
22207
SHOW CREATE TABLE t1;
 
22208
Table   Create Table
 
22209
t1      CREATE TABLE `t1` (
 
22210
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
22211
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
22212
  `f_char1` char(20) DEFAULT NULL,
 
22213
  `f_char2` char(20) DEFAULT NULL,
 
22214
  `f_charbig` varchar(1000) DEFAULT NULL,
 
22215
  PRIMARY KEY (`f_int2`,`f_int1`),
 
22216
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
22217
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
22218
/*!50100 PARTITION BY RANGE (f_int1)
 
22219
SUBPARTITION BY KEY (f_int2)
 
22220
(PARTITION part1 VALUES LESS THAN (0)
 
22221
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
22222
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
22223
 PARTITION part2 VALUES LESS THAN (5)
 
22224
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
22225
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
22226
 PARTITION part3 VALUES LESS THAN (10)
 
22227
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
22228
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
22229
 PARTITION part4 VALUES LESS THAN (2147483646)
 
22230
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
22231
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
22232
 
 
22233
unified filelist
 
22234
t1.frm
 
22235
t1.par
 
22236
 
 
22237
# check prerequisites-1 success:    1
 
22238
# check COUNT(*) success:    1
 
22239
# check MIN/MAX(f_int1) success:    1
 
22240
# check MIN/MAX(f_int2) success:    1
 
22241
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22242
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22243
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22244
WHERE f_int1 IN (2,3);
 
22245
ERROR 23000: Can't write; duplicate key in table 't1'
 
22246
# check prerequisites-3 success:    1
 
22247
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
22248
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22249
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
22250
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
22251
WHERE f_int1 IN (2,3);
 
22252
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22253
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22254
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
22255
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
22256
WHERE f_int1 IN (2,3);
 
22257
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22258
# check read via f_int1 success: 1
 
22259
# check read via f_int2 success: 1
 
22260
        
 
22261
# check multiple-1 success:     1
 
22262
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22263
        
 
22264
# check multiple-2 success:     1
 
22265
INSERT INTO t1 SELECT * FROM t0_template
 
22266
WHERE MOD(f_int1,3) = 0;
 
22267
        
 
22268
# check multiple-3 success:     1
 
22269
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22270
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22271
AND @max_row_div2 + @max_row_div4;
 
22272
        
 
22273
# check multiple-4 success:     1
 
22274
DELETE FROM t1
 
22275
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22276
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22277
        
 
22278
# check multiple-5 success:     1
 
22279
SELECT COUNT(*) INTO @try_count FROM t0_template
 
22280
WHERE MOD(f_int1,3) = 0
 
22281
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22282
SELECT COUNT(*) INTO @clash_count
 
22283
FROM t1 INNER JOIN t0_template USING(f_int1)
 
22284
WHERE MOD(f_int1,3) = 0
 
22285
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22286
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22287
INSERT INTO t1
 
22288
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22289
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22290
f_charbig = '#SINGLE#';
 
22291
        
 
22292
# check single-1 success:       1
 
22293
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22294
INSERT INTO t1
 
22295
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22296
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22297
f_charbig = '#SINGLE#';
 
22298
        
 
22299
# check single-2 success:       1
 
22300
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22301
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22302
UPDATE t1 SET f_int1 = @cur_value2
 
22303
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22304
        
 
22305
# check single-3 success:       1
 
22306
SET @cur_value1= -1;
 
22307
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22308
UPDATE t1 SET f_int1 = @cur_value1
 
22309
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22310
        
 
22311
# check single-4 success:       1
 
22312
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22313
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22314
        
 
22315
# check single-5 success:       1
 
22316
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22317
        
 
22318
# check single-6 success:       1
 
22319
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22320
ERROR HY000: Table has no partition for value 2147483647
 
22321
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22322
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22323
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22324
f_charbig = '#NULL#';
 
22325
INSERT INTO t1
 
22326
SET f_int1 = NULL , f_int2 = -@max_row,
 
22327
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22328
f_charbig = '#NULL#';
 
22329
ERROR 23000: Column 'f_int1' cannot be null
 
22330
# check null success:    1
 
22331
DELETE FROM t1
 
22332
WHERE f_int1 = 0 AND f_int2 = 0
 
22333
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22334
AND f_charbig = '#NULL#';
 
22335
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22336
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22337
   FROM t0_template source_tab
 
22338
WHERE MOD(f_int1,3) = 0
 
22339
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
22340
ON DUPLICATE KEY
 
22341
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
22342
f_int2 = 2 * @max_row + source_tab.f_int1,
 
22343
f_charbig = 'was updated';
 
22344
        
 
22345
# check unique-1-a success:     1
 
22346
        
 
22347
# check unique-1-b success:     1
 
22348
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22349
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22350
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22351
f_charbig = CONCAT('===',f_char1,'===')
 
22352
WHERE f_charbig = 'was updated';
 
22353
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22354
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
22355
   FROM t0_template source_tab
 
22356
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22357
        
 
22358
# check replace success:        1
 
22359
DELETE FROM t1
 
22360
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
22361
DELETE FROM t1
 
22362
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
22363
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
22364
UPDATE t1 SET f_int2 = f_int1,
 
22365
f_char1 = CAST(f_int1 AS CHAR),
 
22366
f_char2 = CAST(f_int1 AS CHAR),
 
22367
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
22368
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
22369
SET AUTOCOMMIT= 0;
 
22370
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22371
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22372
FROM t0_template source_tab
 
22373
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22374
        
 
22375
# check transactions-1 success:         1
 
22376
COMMIT WORK;
 
22377
        
 
22378
# check transactions-2 success:         1
 
22379
ROLLBACK WORK;
 
22380
        
 
22381
# check transactions-3 success:         1
 
22382
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22383
COMMIT WORK;
 
22384
ROLLBACK WORK;
 
22385
        
 
22386
# check transactions-4 success:         1
 
22387
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22388
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22389
FROM t0_template source_tab
 
22390
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22391
        
 
22392
# check transactions-5 success:         1
 
22393
ROLLBACK WORK;
 
22394
        
 
22395
# check transactions-6 success:         1
 
22396
# INFO: Storage engine used for t1 seems to be transactional.
 
22397
COMMIT;
 
22398
        
 
22399
# check transactions-7 success:         1
 
22400
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22401
COMMIT WORK;
 
22402
SET @@session.sql_mode = 'traditional';
 
22403
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22404
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22405
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22406
'', '', 'was inserted' FROM t0_template
 
22407
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22408
ERROR 22012: Division by 0
 
22409
COMMIT;
 
22410
        
 
22411
# check transactions-8 success:         1
 
22412
# INFO: Storage engine used for t1 seems to be able to revert
 
22413
#       changes made by the failing statement.
 
22414
SET @@session.sql_mode = '';
 
22415
SET AUTOCOMMIT= 1;
 
22416
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22417
COMMIT WORK;
 
22418
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22419
        
 
22420
# check special-1 success:      1
 
22421
UPDATE t1 SET f_charbig = '';
 
22422
        
 
22423
# check special-2 success:      1
 
22424
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22425
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22426
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22427
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22428
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22429
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22430
'just inserted' FROM t0_template
 
22431
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22432
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22433
BEGIN
 
22434
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22435
f_charbig = 'updated by trigger'
 
22436
      WHERE f_int1 = new.f_int1;
 
22437
END|
 
22438
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22439
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22440
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22441
        
 
22442
# check trigger-1 success:      1
 
22443
DROP TRIGGER trg_1;
 
22444
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22445
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22446
f_charbig = 'just inserted'
 
22447
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22448
DELETE FROM t0_aux
 
22449
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22450
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22451
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22452
'just inserted' FROM t0_template
 
22453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22454
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22455
BEGIN
 
22456
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22457
f_charbig = 'updated by trigger'
 
22458
      WHERE f_int1 = new.f_int1;
 
22459
END|
 
22460
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22461
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22462
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22463
        
 
22464
# check trigger-2 success:      1
 
22465
DROP TRIGGER trg_1;
 
22466
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22467
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22468
f_charbig = 'just inserted'
 
22469
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22470
DELETE FROM t0_aux
 
22471
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22472
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22473
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22474
'just inserted' FROM t0_template
 
22475
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22476
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22477
BEGIN
 
22478
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22479
f_charbig = 'updated by trigger'
 
22480
      WHERE f_int1 = new.f_int1;
 
22481
END|
 
22482
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22483
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22484
        
 
22485
# check trigger-3 success:      1
 
22486
DROP TRIGGER trg_1;
 
22487
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22488
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22489
f_charbig = 'just inserted'
 
22490
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22491
DELETE FROM t0_aux
 
22492
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22493
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22494
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22495
'just inserted' FROM t0_template
 
22496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22497
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22498
BEGIN
 
22499
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22500
f_charbig = 'updated by trigger'
 
22501
      WHERE f_int1 = - old.f_int1;
 
22502
END|
 
22503
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22504
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22505
        
 
22506
# check trigger-4 success:      1
 
22507
DROP TRIGGER trg_1;
 
22508
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22509
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22510
f_charbig = 'just inserted'
 
22511
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22512
DELETE FROM t0_aux
 
22513
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22514
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22515
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22516
'just inserted' FROM t0_template
 
22517
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22518
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22519
BEGIN
 
22520
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22521
f_charbig = 'updated by trigger'
 
22522
      WHERE f_int1 = new.f_int1;
 
22523
END|
 
22524
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22525
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22526
        
 
22527
# check trigger-5 success:      1
 
22528
DROP TRIGGER trg_1;
 
22529
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22530
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22531
f_charbig = 'just inserted'
 
22532
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22533
DELETE FROM t0_aux
 
22534
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22535
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22536
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22537
'just inserted' FROM t0_template
 
22538
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22539
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22540
BEGIN
 
22541
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22542
f_charbig = 'updated by trigger'
 
22543
      WHERE f_int1 = - old.f_int1;
 
22544
END|
 
22545
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22546
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22547
        
 
22548
# check trigger-6 success:      1
 
22549
DROP TRIGGER trg_1;
 
22550
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22551
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22552
f_charbig = 'just inserted'
 
22553
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22554
DELETE FROM t0_aux
 
22555
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22556
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22557
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22558
'just inserted' FROM t0_template
 
22559
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22560
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22561
BEGIN
 
22562
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22563
f_charbig = 'updated by trigger'
 
22564
      WHERE f_int1 = - old.f_int1;
 
22565
END|
 
22566
DELETE FROM t0_aux
 
22567
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22568
        
 
22569
# check trigger-7 success:      1
 
22570
DROP TRIGGER trg_1;
 
22571
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22572
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22573
f_charbig = 'just inserted'
 
22574
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22575
DELETE FROM t0_aux
 
22576
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22577
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22578
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22579
'just inserted' FROM t0_template
 
22580
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22581
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22582
BEGIN
 
22583
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22584
f_charbig = 'updated by trigger'
 
22585
      WHERE f_int1 = - old.f_int1;
 
22586
END|
 
22587
DELETE FROM t0_aux
 
22588
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22589
        
 
22590
# check trigger-8 success:      1
 
22591
DROP TRIGGER trg_1;
 
22592
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22593
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22594
f_charbig = 'just inserted'
 
22595
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22596
DELETE FROM t0_aux
 
22597
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22598
DELETE FROM t1
 
22599
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22600
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22601
BEGIN
 
22602
SET new.f_int1 = old.f_int1 + @max_row,
 
22603
new.f_int2 = old.f_int2 - @max_row,
 
22604
new.f_charbig = '####updated per update trigger####';
 
22605
END|
 
22606
UPDATE t1
 
22607
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22608
f_charbig = '####updated per update statement itself####';
 
22609
        
 
22610
# check trigger-9 success:      1
 
22611
DROP TRIGGER trg_2;
 
22612
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22613
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22614
f_charbig = CONCAT('===',f_char1,'===');
 
22615
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22616
BEGIN
 
22617
SET new.f_int1 = new.f_int1 + @max_row,
 
22618
new.f_int2 = new.f_int2 - @max_row,
 
22619
new.f_charbig = '####updated per update trigger####';
 
22620
END|
 
22621
UPDATE t1
 
22622
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22623
f_charbig = '####updated per update statement itself####';
 
22624
        
 
22625
# check trigger-10 success:     1
 
22626
DROP TRIGGER trg_2;
 
22627
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22628
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22629
f_charbig = CONCAT('===',f_char1,'===');
 
22630
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22631
BEGIN
 
22632
SET new.f_int1 = @my_max1 + @counter,
 
22633
new.f_int2 = @my_min2 - @counter,
 
22634
new.f_charbig = '####updated per insert trigger####';
 
22635
SET @counter = @counter + 1;
 
22636
END|
 
22637
SET @counter = 1;
 
22638
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22639
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22640
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22641
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22643
ORDER BY f_int1;
 
22644
DROP TRIGGER trg_3;
 
22645
        
 
22646
# check trigger-11 success:     1
 
22647
DELETE FROM t1
 
22648
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22649
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22650
AND f_charbig = '####updated per insert trigger####';
 
22651
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22652
BEGIN
 
22653
SET new.f_int1 = @my_max1 + @counter,
 
22654
new.f_int2 = @my_min2 - @counter,
 
22655
new.f_charbig = '####updated per insert trigger####';
 
22656
SET @counter = @counter + 1;
 
22657
END|
 
22658
SET @counter = 1;
 
22659
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22660
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22661
SELECT CAST(f_int1 AS CHAR),
 
22662
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22663
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22664
ORDER BY f_int1;
 
22665
DROP TRIGGER trg_3;
 
22666
        
 
22667
# check trigger-12 success:     1
 
22668
DELETE FROM t1
 
22669
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22670
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22671
AND f_charbig = '####updated per insert trigger####';
 
22672
ANALYZE  TABLE t1;
 
22673
Table   Op      Msg_type        Msg_text
 
22674
test.t1 analyze status  OK
 
22675
CHECK    TABLE t1 EXTENDED;
 
22676
Table   Op      Msg_type        Msg_text
 
22677
test.t1 check   status  OK
 
22678
CHECKSUM TABLE t1 EXTENDED;
 
22679
Table   Checksum
 
22680
test.t1 <some_value>
 
22681
OPTIMIZE TABLE t1;
 
22682
Table   Op      Msg_type        Msg_text
 
22683
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
22684
test.t1 optimize        status  OK
 
22685
# check layout success:    1
 
22686
REPAIR   TABLE t1 EXTENDED;
 
22687
Table   Op      Msg_type        Msg_text
 
22688
test.t1 repair  note    The storage engine for the table doesn't support repair
 
22689
# check layout success:    1
 
22690
TRUNCATE t1;
 
22691
        
 
22692
# check TRUNCATE success:       1
 
22693
# check layout success:    1
 
22694
# End usability test (inc/partition_check.inc)
 
22695
DROP TABLE t1;
 
22696
CREATE TABLE t1 (
 
22697
f_int1 INTEGER,
 
22698
f_int2 INTEGER,
 
22699
f_char1 CHAR(20),
 
22700
f_char2 CHAR(20),
 
22701
f_charbig VARCHAR(1000)
 
22702
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
22703
)
 
22704
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
22705
(PARTITION part1 VALUES IN (0)
 
22706
(SUBPARTITION sp11, SUBPARTITION sp12),
 
22707
PARTITION part2 VALUES IN (1)
 
22708
(SUBPARTITION sp21, SUBPARTITION sp22),
 
22709
PARTITION part3 VALUES IN (2)
 
22710
(SUBPARTITION sp31, SUBPARTITION sp32),
 
22711
PARTITION part4 VALUES IN (NULL)
 
22712
(SUBPARTITION sp41, SUBPARTITION sp42));
 
22713
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22714
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
22715
# Start usability test (inc/partition_check.inc)
 
22716
create_command
 
22717
SHOW CREATE TABLE t1;
 
22718
Table   Create Table
 
22719
t1      CREATE TABLE `t1` (
 
22720
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
22721
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
22722
  `f_char1` char(20) DEFAULT NULL,
 
22723
  `f_char2` char(20) DEFAULT NULL,
 
22724
  `f_charbig` varchar(1000) DEFAULT NULL,
 
22725
  PRIMARY KEY (`f_int2`,`f_int1`),
 
22726
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
22727
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
22728
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
22729
SUBPARTITION BY HASH (f_int2 + 1)
 
22730
(PARTITION part1 VALUES IN (0)
 
22731
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
22732
  SUBPARTITION sp12 ENGINE = InnoDB),
 
22733
 PARTITION part2 VALUES IN (1)
 
22734
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
22735
  SUBPARTITION sp22 ENGINE = InnoDB),
 
22736
 PARTITION part3 VALUES IN (2)
 
22737
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
22738
  SUBPARTITION sp32 ENGINE = InnoDB),
 
22739
 PARTITION part4 VALUES IN (NULL)
 
22740
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
22741
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
22742
 
 
22743
unified filelist
 
22744
t1.frm
 
22745
t1.par
 
22746
 
 
22747
# check prerequisites-1 success:    1
 
22748
# check COUNT(*) success:    1
 
22749
# check MIN/MAX(f_int1) success:    1
 
22750
# check MIN/MAX(f_int2) success:    1
 
22751
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22752
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22753
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22754
WHERE f_int1 IN (2,3);
 
22755
ERROR 23000: Can't write; duplicate key in table 't1'
 
22756
# check prerequisites-3 success:    1
 
22757
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
22758
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22759
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
22760
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
22761
WHERE f_int1 IN (2,3);
 
22762
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22763
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22764
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
22765
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
22766
WHERE f_int1 IN (2,3);
 
22767
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22768
# check read via f_int1 success: 1
 
22769
# check read via f_int2 success: 1
 
22770
        
 
22771
# check multiple-1 success:     1
 
22772
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22773
        
 
22774
# check multiple-2 success:     1
 
22775
INSERT INTO t1 SELECT * FROM t0_template
 
22776
WHERE MOD(f_int1,3) = 0;
 
22777
        
 
22778
# check multiple-3 success:     1
 
22779
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22780
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22781
AND @max_row_div2 + @max_row_div4;
 
22782
        
 
22783
# check multiple-4 success:     1
 
22784
DELETE FROM t1
 
22785
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22786
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22787
        
 
22788
# check multiple-5 success:     1
 
22789
SELECT COUNT(*) INTO @try_count FROM t0_template
 
22790
WHERE MOD(f_int1,3) = 0
 
22791
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22792
SELECT COUNT(*) INTO @clash_count
 
22793
FROM t1 INNER JOIN t0_template USING(f_int1)
 
22794
WHERE MOD(f_int1,3) = 0
 
22795
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22796
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22797
INSERT INTO t1
 
22798
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22799
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22800
f_charbig = '#SINGLE#';
 
22801
        
 
22802
# check single-1 success:       1
 
22803
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22804
INSERT INTO t1
 
22805
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22806
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22807
f_charbig = '#SINGLE#';
 
22808
        
 
22809
# check single-2 success:       1
 
22810
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22811
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22812
UPDATE t1 SET f_int1 = @cur_value2
 
22813
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22814
        
 
22815
# check single-3 success:       1
 
22816
SET @cur_value1= -1;
 
22817
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22818
UPDATE t1 SET f_int1 = @cur_value1
 
22819
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22820
        
 
22821
# check single-4 success:       1
 
22822
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22823
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22824
        
 
22825
# check single-5 success:       1
 
22826
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22827
        
 
22828
# check single-6 success:       1
 
22829
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22830
        
 
22831
# check single-7 success:       1
 
22832
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
22833
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22834
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22835
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22836
f_charbig = '#NULL#';
 
22837
INSERT INTO t1
 
22838
SET f_int1 = NULL , f_int2 = -@max_row,
 
22839
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22840
f_charbig = '#NULL#';
 
22841
ERROR 23000: Column 'f_int1' cannot be null
 
22842
# check null success:    1
 
22843
DELETE FROM t1
 
22844
WHERE f_int1 = 0 AND f_int2 = 0
 
22845
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22846
AND f_charbig = '#NULL#';
 
22847
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22848
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22849
   FROM t0_template source_tab
 
22850
WHERE MOD(f_int1,3) = 0
 
22851
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
22852
ON DUPLICATE KEY
 
22853
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
22854
f_int2 = 2 * @max_row + source_tab.f_int1,
 
22855
f_charbig = 'was updated';
 
22856
        
 
22857
# check unique-1-a success:     1
 
22858
        
 
22859
# check unique-1-b success:     1
 
22860
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22861
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22862
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22863
f_charbig = CONCAT('===',f_char1,'===')
 
22864
WHERE f_charbig = 'was updated';
 
22865
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22866
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
22867
   FROM t0_template source_tab
 
22868
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22869
        
 
22870
# check replace success:        1
 
22871
DELETE FROM t1
 
22872
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
22873
DELETE FROM t1
 
22874
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
22875
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
22876
UPDATE t1 SET f_int2 = f_int1,
 
22877
f_char1 = CAST(f_int1 AS CHAR),
 
22878
f_char2 = CAST(f_int1 AS CHAR),
 
22879
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
22880
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
22881
SET AUTOCOMMIT= 0;
 
22882
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22883
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22884
FROM t0_template source_tab
 
22885
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22886
        
 
22887
# check transactions-1 success:         1
 
22888
COMMIT WORK;
 
22889
        
 
22890
# check transactions-2 success:         1
 
22891
ROLLBACK WORK;
 
22892
        
 
22893
# check transactions-3 success:         1
 
22894
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22895
COMMIT WORK;
 
22896
ROLLBACK WORK;
 
22897
        
 
22898
# check transactions-4 success:         1
 
22899
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22900
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22901
FROM t0_template source_tab
 
22902
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22903
        
 
22904
# check transactions-5 success:         1
 
22905
ROLLBACK WORK;
 
22906
        
 
22907
# check transactions-6 success:         1
 
22908
# INFO: Storage engine used for t1 seems to be transactional.
 
22909
COMMIT;
 
22910
        
 
22911
# check transactions-7 success:         1
 
22912
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22913
COMMIT WORK;
 
22914
SET @@session.sql_mode = 'traditional';
 
22915
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22916
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22917
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22918
'', '', 'was inserted' FROM t0_template
 
22919
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22920
ERROR 22012: Division by 0
 
22921
COMMIT;
 
22922
        
 
22923
# check transactions-8 success:         1
 
22924
# INFO: Storage engine used for t1 seems to be able to revert
 
22925
#       changes made by the failing statement.
 
22926
SET @@session.sql_mode = '';
 
22927
SET AUTOCOMMIT= 1;
 
22928
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22929
COMMIT WORK;
 
22930
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22931
        
 
22932
# check special-1 success:      1
 
22933
UPDATE t1 SET f_charbig = '';
 
22934
        
 
22935
# check special-2 success:      1
 
22936
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22937
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22938
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22939
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22940
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22941
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22942
'just inserted' FROM t0_template
 
22943
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22944
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22945
BEGIN
 
22946
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22947
f_charbig = 'updated by trigger'
 
22948
      WHERE f_int1 = new.f_int1;
 
22949
END|
 
22950
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22951
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22952
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22953
        
 
22954
# check trigger-1 success:      1
 
22955
DROP TRIGGER trg_1;
 
22956
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22957
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22958
f_charbig = 'just inserted'
 
22959
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22960
DELETE FROM t0_aux
 
22961
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22962
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22963
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22964
'just inserted' FROM t0_template
 
22965
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22966
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22967
BEGIN
 
22968
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22969
f_charbig = 'updated by trigger'
 
22970
      WHERE f_int1 = new.f_int1;
 
22971
END|
 
22972
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22973
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22974
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22975
        
 
22976
# check trigger-2 success:      1
 
22977
DROP TRIGGER trg_1;
 
22978
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22979
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22980
f_charbig = 'just inserted'
 
22981
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22982
DELETE FROM t0_aux
 
22983
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22984
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22985
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22986
'just inserted' FROM t0_template
 
22987
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22988
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22989
BEGIN
 
22990
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22991
f_charbig = 'updated by trigger'
 
22992
      WHERE f_int1 = new.f_int1;
 
22993
END|
 
22994
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22995
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22996
        
 
22997
# check trigger-3 success:      1
 
22998
DROP TRIGGER trg_1;
 
22999
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23000
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23001
f_charbig = 'just inserted'
 
23002
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23003
DELETE FROM t0_aux
 
23004
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23005
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23006
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23007
'just inserted' FROM t0_template
 
23008
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23009
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23010
BEGIN
 
23011
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23012
f_charbig = 'updated by trigger'
 
23013
      WHERE f_int1 = - old.f_int1;
 
23014
END|
 
23015
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23016
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23017
        
 
23018
# check trigger-4 success:      1
 
23019
DROP TRIGGER trg_1;
 
23020
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23021
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23022
f_charbig = 'just inserted'
 
23023
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23024
DELETE FROM t0_aux
 
23025
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23027
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23028
'just inserted' FROM t0_template
 
23029
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23030
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23031
BEGIN
 
23032
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23033
f_charbig = 'updated by trigger'
 
23034
      WHERE f_int1 = new.f_int1;
 
23035
END|
 
23036
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23037
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23038
        
 
23039
# check trigger-5 success:      1
 
23040
DROP TRIGGER trg_1;
 
23041
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23042
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23043
f_charbig = 'just inserted'
 
23044
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23045
DELETE FROM t0_aux
 
23046
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23047
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23048
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23049
'just inserted' FROM t0_template
 
23050
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23051
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23052
BEGIN
 
23053
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23054
f_charbig = 'updated by trigger'
 
23055
      WHERE f_int1 = - old.f_int1;
 
23056
END|
 
23057
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23058
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23059
        
 
23060
# check trigger-6 success:      1
 
23061
DROP TRIGGER trg_1;
 
23062
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23063
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23064
f_charbig = 'just inserted'
 
23065
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23066
DELETE FROM t0_aux
 
23067
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23068
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23069
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23070
'just inserted' FROM t0_template
 
23071
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23072
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23073
BEGIN
 
23074
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23075
f_charbig = 'updated by trigger'
 
23076
      WHERE f_int1 = - old.f_int1;
 
23077
END|
 
23078
DELETE FROM t0_aux
 
23079
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23080
        
 
23081
# check trigger-7 success:      1
 
23082
DROP TRIGGER trg_1;
 
23083
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23084
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23085
f_charbig = 'just inserted'
 
23086
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23087
DELETE FROM t0_aux
 
23088
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23089
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23090
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23091
'just inserted' FROM t0_template
 
23092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23093
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23094
BEGIN
 
23095
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23096
f_charbig = 'updated by trigger'
 
23097
      WHERE f_int1 = - old.f_int1;
 
23098
END|
 
23099
DELETE FROM t0_aux
 
23100
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23101
        
 
23102
# check trigger-8 success:      1
 
23103
DROP TRIGGER trg_1;
 
23104
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23105
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23106
f_charbig = 'just inserted'
 
23107
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23108
DELETE FROM t0_aux
 
23109
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23110
DELETE FROM t1
 
23111
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23112
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23113
BEGIN
 
23114
SET new.f_int1 = old.f_int1 + @max_row,
 
23115
new.f_int2 = old.f_int2 - @max_row,
 
23116
new.f_charbig = '####updated per update trigger####';
 
23117
END|
 
23118
UPDATE t1
 
23119
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23120
f_charbig = '####updated per update statement itself####';
 
23121
        
 
23122
# check trigger-9 success:      1
 
23123
DROP TRIGGER trg_2;
 
23124
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23125
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23126
f_charbig = CONCAT('===',f_char1,'===');
 
23127
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23128
BEGIN
 
23129
SET new.f_int1 = new.f_int1 + @max_row,
 
23130
new.f_int2 = new.f_int2 - @max_row,
 
23131
new.f_charbig = '####updated per update trigger####';
 
23132
END|
 
23133
UPDATE t1
 
23134
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23135
f_charbig = '####updated per update statement itself####';
 
23136
        
 
23137
# check trigger-10 success:     1
 
23138
DROP TRIGGER trg_2;
 
23139
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23140
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23141
f_charbig = CONCAT('===',f_char1,'===');
 
23142
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23143
BEGIN
 
23144
SET new.f_int1 = @my_max1 + @counter,
 
23145
new.f_int2 = @my_min2 - @counter,
 
23146
new.f_charbig = '####updated per insert trigger####';
 
23147
SET @counter = @counter + 1;
 
23148
END|
 
23149
SET @counter = 1;
 
23150
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23151
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23152
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23153
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23154
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23155
ORDER BY f_int1;
 
23156
DROP TRIGGER trg_3;
 
23157
        
 
23158
# check trigger-11 success:     1
 
23159
DELETE FROM t1
 
23160
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23161
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23162
AND f_charbig = '####updated per insert trigger####';
 
23163
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23164
BEGIN
 
23165
SET new.f_int1 = @my_max1 + @counter,
 
23166
new.f_int2 = @my_min2 - @counter,
 
23167
new.f_charbig = '####updated per insert trigger####';
 
23168
SET @counter = @counter + 1;
 
23169
END|
 
23170
SET @counter = 1;
 
23171
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23172
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23173
SELECT CAST(f_int1 AS CHAR),
 
23174
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23175
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23176
ORDER BY f_int1;
 
23177
DROP TRIGGER trg_3;
 
23178
        
 
23179
# check trigger-12 success:     1
 
23180
DELETE FROM t1
 
23181
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23182
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23183
AND f_charbig = '####updated per insert trigger####';
 
23184
ANALYZE  TABLE t1;
 
23185
Table   Op      Msg_type        Msg_text
 
23186
test.t1 analyze status  OK
 
23187
CHECK    TABLE t1 EXTENDED;
 
23188
Table   Op      Msg_type        Msg_text
 
23189
test.t1 check   status  OK
 
23190
CHECKSUM TABLE t1 EXTENDED;
 
23191
Table   Checksum
 
23192
test.t1 <some_value>
 
23193
OPTIMIZE TABLE t1;
 
23194
Table   Op      Msg_type        Msg_text
 
23195
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
23196
test.t1 optimize        status  OK
 
23197
# check layout success:    1
 
23198
REPAIR   TABLE t1 EXTENDED;
 
23199
Table   Op      Msg_type        Msg_text
 
23200
test.t1 repair  note    The storage engine for the table doesn't support repair
 
23201
# check layout success:    1
 
23202
TRUNCATE t1;
 
23203
        
 
23204
# check TRUNCATE success:       1
 
23205
# check layout success:    1
 
23206
# End usability test (inc/partition_check.inc)
 
23207
DROP TABLE t1;
 
23208
CREATE TABLE t1 (
 
23209
f_int1 INTEGER,
 
23210
f_int2 INTEGER,
 
23211
f_char1 CHAR(20),
 
23212
f_char2 CHAR(20),
 
23213
f_charbig VARCHAR(1000)
 
23214
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
23215
)
 
23216
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
23217
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
23218
(PARTITION part1 VALUES IN (0),
 
23219
PARTITION part2 VALUES IN (1),
 
23220
PARTITION part3 VALUES IN (NULL));
 
23221
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23222
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
23223
# Start usability test (inc/partition_check.inc)
 
23224
create_command
 
23225
SHOW CREATE TABLE t1;
 
23226
Table   Create Table
 
23227
t1      CREATE TABLE `t1` (
 
23228
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
23229
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
23230
  `f_char1` char(20) DEFAULT NULL,
 
23231
  `f_char2` char(20) DEFAULT NULL,
 
23232
  `f_charbig` varchar(1000) DEFAULT NULL,
 
23233
  PRIMARY KEY (`f_int2`,`f_int1`),
 
23234
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
 
23235
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
23236
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
23237
SUBPARTITION BY KEY (f_int2)
 
23238
SUBPARTITIONS 3
 
23239
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
23240
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
23241
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
23242
 
 
23243
unified filelist
 
23244
t1.frm
 
23245
t1.par
 
23246
 
 
23247
# check prerequisites-1 success:    1
 
23248
# check COUNT(*) success:    1
 
23249
# check MIN/MAX(f_int1) success:    1
 
23250
# check MIN/MAX(f_int2) success:    1
 
23251
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23252
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23253
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23254
WHERE f_int1 IN (2,3);
 
23255
ERROR 23000: Can't write; duplicate key in table 't1'
 
23256
# check prerequisites-3 success:    1
 
23257
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
23258
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23259
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
23260
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
23261
WHERE f_int1 IN (2,3);
 
23262
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23263
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23264
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
23265
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
23266
WHERE f_int1 IN (2,3);
 
23267
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23268
# check read via f_int1 success: 1
 
23269
# check read via f_int2 success: 1
 
23270
        
 
23271
# check multiple-1 success:     1
 
23272
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23273
        
 
23274
# check multiple-2 success:     1
 
23275
INSERT INTO t1 SELECT * FROM t0_template
 
23276
WHERE MOD(f_int1,3) = 0;
 
23277
        
 
23278
# check multiple-3 success:     1
 
23279
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23280
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23281
AND @max_row_div2 + @max_row_div4;
 
23282
        
 
23283
# check multiple-4 success:     1
 
23284
DELETE FROM t1
 
23285
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23286
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23287
        
 
23288
# check multiple-5 success:     1
 
23289
SELECT COUNT(*) INTO @try_count FROM t0_template
 
23290
WHERE MOD(f_int1,3) = 0
 
23291
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23292
SELECT COUNT(*) INTO @clash_count
 
23293
FROM t1 INNER JOIN t0_template USING(f_int1)
 
23294
WHERE MOD(f_int1,3) = 0
 
23295
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23296
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
23297
INSERT INTO t1
 
23298
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23299
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23300
f_charbig = '#SINGLE#';
 
23301
        
 
23302
# check single-1 success:       1
 
23303
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
23304
INSERT INTO t1
 
23305
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23306
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23307
f_charbig = '#SINGLE#';
 
23308
        
 
23309
# check single-2 success:       1
 
23310
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
23311
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
23312
UPDATE t1 SET f_int1 = @cur_value2
 
23313
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
23314
        
 
23315
# check single-3 success:       1
 
23316
SET @cur_value1= -1;
 
23317
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
23318
UPDATE t1 SET f_int1 = @cur_value1
 
23319
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
23320
        
 
23321
# check single-4 success:       1
 
23322
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
23323
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
23324
        
 
23325
# check single-5 success:       1
 
23326
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
23327
        
 
23328
# check single-6 success:       1
 
23329
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
23330
        
 
23331
# check single-7 success:       1
 
23332
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
23333
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
23334
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
23335
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
23336
f_charbig = '#NULL#';
 
23337
INSERT INTO t1
 
23338
SET f_int1 = NULL , f_int2 = -@max_row,
 
23339
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
23340
f_charbig = '#NULL#';
 
23341
ERROR 23000: Column 'f_int1' cannot be null
 
23342
# check null success:    1
 
23343
DELETE FROM t1
 
23344
WHERE f_int1 = 0 AND f_int2 = 0
 
23345
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
23346
AND f_charbig = '#NULL#';
 
23347
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23348
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23349
   FROM t0_template source_tab
 
23350
WHERE MOD(f_int1,3) = 0
 
23351
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
23352
ON DUPLICATE KEY
 
23353
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
23354
f_int2 = 2 * @max_row + source_tab.f_int1,
 
23355
f_charbig = 'was updated';
 
23356
        
 
23357
# check unique-1-a success:     1
 
23358
        
 
23359
# check unique-1-b success:     1
 
23360
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23361
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23362
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23363
f_charbig = CONCAT('===',f_char1,'===')
 
23364
WHERE f_charbig = 'was updated';
 
23365
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23366
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
23367
   FROM t0_template source_tab
 
23368
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23369
        
 
23370
# check replace success:        1
 
23371
DELETE FROM t1
 
23372
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
23373
DELETE FROM t1
 
23374
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
23375
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
23376
UPDATE t1 SET f_int2 = f_int1,
 
23377
f_char1 = CAST(f_int1 AS CHAR),
 
23378
f_char2 = CAST(f_int1 AS CHAR),
 
23379
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
23380
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
23381
SET AUTOCOMMIT= 0;
 
23382
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23383
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23384
FROM t0_template source_tab
 
23385
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23386
        
 
23387
# check transactions-1 success:         1
 
23388
COMMIT WORK;
 
23389
        
 
23390
# check transactions-2 success:         1
 
23391
ROLLBACK WORK;
 
23392
        
 
23393
# check transactions-3 success:         1
 
23394
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23395
COMMIT WORK;
 
23396
ROLLBACK WORK;
 
23397
        
 
23398
# check transactions-4 success:         1
 
23399
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23400
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23401
FROM t0_template source_tab
 
23402
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23403
        
 
23404
# check transactions-5 success:         1
 
23405
ROLLBACK WORK;
 
23406
        
 
23407
# check transactions-6 success:         1
 
23408
# INFO: Storage engine used for t1 seems to be transactional.
 
23409
COMMIT;
 
23410
        
 
23411
# check transactions-7 success:         1
 
23412
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23413
COMMIT WORK;
 
23414
SET @@session.sql_mode = 'traditional';
 
23415
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23416
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23417
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23418
'', '', 'was inserted' FROM t0_template
 
23419
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23420
ERROR 22012: Division by 0
 
23421
COMMIT;
 
23422
        
 
23423
# check transactions-8 success:         1
 
23424
# INFO: Storage engine used for t1 seems to be able to revert
 
23425
#       changes made by the failing statement.
 
23426
SET @@session.sql_mode = '';
 
23427
SET AUTOCOMMIT= 1;
 
23428
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23429
COMMIT WORK;
 
23430
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23431
        
 
23432
# check special-1 success:      1
 
23433
UPDATE t1 SET f_charbig = '';
 
23434
        
 
23435
# check special-2 success:      1
 
23436
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23437
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23438
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23439
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23440
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23441
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23442
'just inserted' FROM t0_template
 
23443
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23444
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23445
BEGIN
 
23446
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23447
f_charbig = 'updated by trigger'
 
23448
      WHERE f_int1 = new.f_int1;
 
23449
END|
 
23450
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23451
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23452
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23453
        
 
23454
# check trigger-1 success:      1
 
23455
DROP TRIGGER trg_1;
 
23456
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23457
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23458
f_charbig = 'just inserted'
 
23459
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23460
DELETE FROM t0_aux
 
23461
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23462
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23463
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23464
'just inserted' FROM t0_template
 
23465
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23466
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23467
BEGIN
 
23468
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23469
f_charbig = 'updated by trigger'
 
23470
      WHERE f_int1 = new.f_int1;
 
23471
END|
 
23472
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23473
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23475
        
 
23476
# check trigger-2 success:      1
 
23477
DROP TRIGGER trg_1;
 
23478
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23479
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23480
f_charbig = 'just inserted'
 
23481
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23482
DELETE FROM t0_aux
 
23483
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23485
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23486
'just inserted' FROM t0_template
 
23487
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23488
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23489
BEGIN
 
23490
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23491
f_charbig = 'updated by trigger'
 
23492
      WHERE f_int1 = new.f_int1;
 
23493
END|
 
23494
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23495
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23496
        
 
23497
# check trigger-3 success:      1
 
23498
DROP TRIGGER trg_1;
 
23499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23500
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23501
f_charbig = 'just inserted'
 
23502
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23503
DELETE FROM t0_aux
 
23504
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23505
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23506
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23507
'just inserted' FROM t0_template
 
23508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23509
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23510
BEGIN
 
23511
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23512
f_charbig = 'updated by trigger'
 
23513
      WHERE f_int1 = - old.f_int1;
 
23514
END|
 
23515
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23516
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23517
        
 
23518
# check trigger-4 success:      1
 
23519
DROP TRIGGER trg_1;
 
23520
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23521
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23522
f_charbig = 'just inserted'
 
23523
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23524
DELETE FROM t0_aux
 
23525
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23526
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23527
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23528
'just inserted' FROM t0_template
 
23529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23530
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23531
BEGIN
 
23532
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23533
f_charbig = 'updated by trigger'
 
23534
      WHERE f_int1 = new.f_int1;
 
23535
END|
 
23536
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23537
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23538
        
 
23539
# check trigger-5 success:      1
 
23540
DROP TRIGGER trg_1;
 
23541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23543
f_charbig = 'just inserted'
 
23544
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23545
DELETE FROM t0_aux
 
23546
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23549
'just inserted' FROM t0_template
 
23550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23551
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23552
BEGIN
 
23553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23554
f_charbig = 'updated by trigger'
 
23555
      WHERE f_int1 = - old.f_int1;
 
23556
END|
 
23557
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23558
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23559
        
 
23560
# check trigger-6 success:      1
 
23561
DROP TRIGGER trg_1;
 
23562
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23563
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23564
f_charbig = 'just inserted'
 
23565
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23566
DELETE FROM t0_aux
 
23567
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23568
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23569
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23570
'just inserted' FROM t0_template
 
23571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23572
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23573
BEGIN
 
23574
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23575
f_charbig = 'updated by trigger'
 
23576
      WHERE f_int1 = - old.f_int1;
 
23577
END|
 
23578
DELETE FROM t0_aux
 
23579
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23580
        
 
23581
# check trigger-7 success:      1
 
23582
DROP TRIGGER trg_1;
 
23583
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23584
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23585
f_charbig = 'just inserted'
 
23586
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23587
DELETE FROM t0_aux
 
23588
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23589
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23590
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23591
'just inserted' FROM t0_template
 
23592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23593
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23594
BEGIN
 
23595
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23596
f_charbig = 'updated by trigger'
 
23597
      WHERE f_int1 = - old.f_int1;
 
23598
END|
 
23599
DELETE FROM t0_aux
 
23600
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23601
        
 
23602
# check trigger-8 success:      1
 
23603
DROP TRIGGER trg_1;
 
23604
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23605
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23606
f_charbig = 'just inserted'
 
23607
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23608
DELETE FROM t0_aux
 
23609
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23610
DELETE FROM t1
 
23611
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23612
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23613
BEGIN
 
23614
SET new.f_int1 = old.f_int1 + @max_row,
 
23615
new.f_int2 = old.f_int2 - @max_row,
 
23616
new.f_charbig = '####updated per update trigger####';
 
23617
END|
 
23618
UPDATE t1
 
23619
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23620
f_charbig = '####updated per update statement itself####';
 
23621
        
 
23622
# check trigger-9 success:      1
 
23623
DROP TRIGGER trg_2;
 
23624
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23625
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23626
f_charbig = CONCAT('===',f_char1,'===');
 
23627
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23628
BEGIN
 
23629
SET new.f_int1 = new.f_int1 + @max_row,
 
23630
new.f_int2 = new.f_int2 - @max_row,
 
23631
new.f_charbig = '####updated per update trigger####';
 
23632
END|
 
23633
UPDATE t1
 
23634
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23635
f_charbig = '####updated per update statement itself####';
 
23636
        
 
23637
# check trigger-10 success:     1
 
23638
DROP TRIGGER trg_2;
 
23639
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23640
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23641
f_charbig = CONCAT('===',f_char1,'===');
 
23642
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23643
BEGIN
 
23644
SET new.f_int1 = @my_max1 + @counter,
 
23645
new.f_int2 = @my_min2 - @counter,
 
23646
new.f_charbig = '####updated per insert trigger####';
 
23647
SET @counter = @counter + 1;
 
23648
END|
 
23649
SET @counter = 1;
 
23650
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23651
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23652
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23653
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23655
ORDER BY f_int1;
 
23656
DROP TRIGGER trg_3;
 
23657
        
 
23658
# check trigger-11 success:     1
 
23659
DELETE FROM t1
 
23660
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23661
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23662
AND f_charbig = '####updated per insert trigger####';
 
23663
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23664
BEGIN
 
23665
SET new.f_int1 = @my_max1 + @counter,
 
23666
new.f_int2 = @my_min2 - @counter,
 
23667
new.f_charbig = '####updated per insert trigger####';
 
23668
SET @counter = @counter + 1;
 
23669
END|
 
23670
SET @counter = 1;
 
23671
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23672
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23673
SELECT CAST(f_int1 AS CHAR),
 
23674
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23676
ORDER BY f_int1;
 
23677
DROP TRIGGER trg_3;
 
23678
        
 
23679
# check trigger-12 success:     1
 
23680
DELETE FROM t1
 
23681
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23682
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23683
AND f_charbig = '####updated per insert trigger####';
 
23684
ANALYZE  TABLE t1;
 
23685
Table   Op      Msg_type        Msg_text
 
23686
test.t1 analyze status  OK
 
23687
CHECK    TABLE t1 EXTENDED;
 
23688
Table   Op      Msg_type        Msg_text
 
23689
test.t1 check   status  OK
 
23690
CHECKSUM TABLE t1 EXTENDED;
 
23691
Table   Checksum
 
23692
test.t1 <some_value>
 
23693
OPTIMIZE TABLE t1;
 
23694
Table   Op      Msg_type        Msg_text
 
23695
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
23696
test.t1 optimize        status  OK
 
23697
# check layout success:    1
 
23698
REPAIR   TABLE t1 EXTENDED;
 
23699
Table   Op      Msg_type        Msg_text
 
23700
test.t1 repair  note    The storage engine for the table doesn't support repair
 
23701
# check layout success:    1
 
23702
TRUNCATE t1;
 
23703
        
 
23704
# check TRUNCATE success:       1
 
23705
# check layout success:    1
 
23706
# End usability test (inc/partition_check.inc)
 
23707
DROP TABLE t1;
 
23708
DROP TABLE IF EXISTS t1;
 
23709
CREATE TABLE t1 (
 
23710
f_int1 INTEGER,
 
23711
f_int2 INTEGER,
 
23712
f_char1 CHAR(20),
 
23713
f_char2 CHAR(20),
 
23714
f_charbig VARCHAR(1000)
 
23715
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
23716
)
 
23717
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
23718
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23719
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
23720
# Start usability test (inc/partition_check.inc)
 
23721
create_command
 
23722
SHOW CREATE TABLE t1;
 
23723
Table   Create Table
 
23724
t1      CREATE TABLE `t1` (
 
23725
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
23726
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
23727
  `f_char1` char(20) DEFAULT NULL,
 
23728
  `f_char2` char(20) DEFAULT NULL,
 
23729
  `f_charbig` varchar(1000) DEFAULT NULL,
 
23730
  PRIMARY KEY (`f_int1`,`f_int2`),
 
23731
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
23732
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
23733
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
23734
PARTITIONS 2 */
 
23735
 
 
23736
unified filelist
 
23737
t1.frm
 
23738
t1.par
 
23739
 
 
23740
# check prerequisites-1 success:    1
 
23741
# check COUNT(*) success:    1
 
23742
# check MIN/MAX(f_int1) success:    1
 
23743
# check MIN/MAX(f_int2) success:    1
 
23744
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23745
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23746
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23747
WHERE f_int1 IN (2,3);
 
23748
ERROR 23000: Can't write; duplicate key in table 't1'
 
23749
# check prerequisites-3 success:    1
 
23750
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
23751
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23752
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
23753
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
23754
WHERE f_int1 IN (2,3);
 
23755
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23756
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23757
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
23758
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
23759
WHERE f_int1 IN (2,3);
 
23760
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23761
# check read via f_int1 success: 1
 
23762
# check read via f_int2 success: 1
 
23763
        
 
23764
# check multiple-1 success:     1
 
23765
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23766
        
 
23767
# check multiple-2 success:     1
 
23768
INSERT INTO t1 SELECT * FROM t0_template
 
23769
WHERE MOD(f_int1,3) = 0;
 
23770
        
 
23771
# check multiple-3 success:     1
 
23772
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23773
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23774
AND @max_row_div2 + @max_row_div4;
 
23775
        
 
23776
# check multiple-4 success:     1
 
23777
DELETE FROM t1
 
23778
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23779
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23780
        
 
23781
# check multiple-5 success:     1
 
23782
SELECT COUNT(*) INTO @try_count FROM t0_template
 
23783
WHERE MOD(f_int1,3) = 0
 
23784
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23785
SELECT COUNT(*) INTO @clash_count
 
23786
FROM t1 INNER JOIN t0_template USING(f_int1)
 
23787
WHERE MOD(f_int1,3) = 0
 
23788
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23789
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
23790
INSERT INTO t1
 
23791
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23792
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23793
f_charbig = '#SINGLE#';
 
23794
        
 
23795
# check single-1 success:       1
 
23796
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
23797
INSERT INTO t1
 
23798
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23799
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23800
f_charbig = '#SINGLE#';
 
23801
        
 
23802
# check single-2 success:       1
 
23803
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
23804
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
23805
UPDATE t1 SET f_int1 = @cur_value2
 
23806
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
23807
        
 
23808
# check single-3 success:       1
 
23809
SET @cur_value1= -1;
 
23810
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
23811
UPDATE t1 SET f_int1 = @cur_value1
 
23812
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
23813
        
 
23814
# check single-4 success:       1
 
23815
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
23816
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
23817
        
 
23818
# check single-5 success:       1
 
23819
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
23820
        
 
23821
# check single-6 success:       1
 
23822
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
23823
        
 
23824
# check single-7 success:       1
 
23825
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
23826
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
23827
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
23828
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
23829
f_charbig = '#NULL#';
 
23830
INSERT INTO t1
 
23831
SET f_int1 = NULL , f_int2 = -@max_row,
 
23832
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
23833
f_charbig = '#NULL#';
 
23834
ERROR 23000: Column 'f_int1' cannot be null
 
23835
# check null success:    1
 
23836
DELETE FROM t1
 
23837
WHERE f_int1 = 0 AND f_int2 = 0
 
23838
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
23839
AND f_charbig = '#NULL#';
 
23840
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23841
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23842
   FROM t0_template source_tab
 
23843
WHERE MOD(f_int1,3) = 0
 
23844
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
23845
ON DUPLICATE KEY
 
23846
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
23847
f_int2 = 2 * @max_row + source_tab.f_int1,
 
23848
f_charbig = 'was updated';
 
23849
        
 
23850
# check unique-1-a success:     1
 
23851
        
 
23852
# check unique-1-b success:     1
 
23853
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23854
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23855
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23856
f_charbig = CONCAT('===',f_char1,'===')
 
23857
WHERE f_charbig = 'was updated';
 
23858
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23859
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
23860
   FROM t0_template source_tab
 
23861
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23862
        
 
23863
# check replace success:        1
 
23864
DELETE FROM t1
 
23865
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
23866
DELETE FROM t1
 
23867
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
23868
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
23869
UPDATE t1 SET f_int2 = f_int1,
 
23870
f_char1 = CAST(f_int1 AS CHAR),
 
23871
f_char2 = CAST(f_int1 AS CHAR),
 
23872
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
23873
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
23874
SET AUTOCOMMIT= 0;
 
23875
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23876
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23877
FROM t0_template source_tab
 
23878
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23879
        
 
23880
# check transactions-1 success:         1
 
23881
COMMIT WORK;
 
23882
        
 
23883
# check transactions-2 success:         1
 
23884
ROLLBACK WORK;
 
23885
        
 
23886
# check transactions-3 success:         1
 
23887
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23888
COMMIT WORK;
 
23889
ROLLBACK WORK;
 
23890
        
 
23891
# check transactions-4 success:         1
 
23892
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23893
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23894
FROM t0_template source_tab
 
23895
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23896
        
 
23897
# check transactions-5 success:         1
 
23898
ROLLBACK WORK;
 
23899
        
 
23900
# check transactions-6 success:         1
 
23901
# INFO: Storage engine used for t1 seems to be transactional.
 
23902
COMMIT;
 
23903
        
 
23904
# check transactions-7 success:         1
 
23905
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23906
COMMIT WORK;
 
23907
SET @@session.sql_mode = 'traditional';
 
23908
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23909
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23910
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23911
'', '', 'was inserted' FROM t0_template
 
23912
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23913
ERROR 22012: Division by 0
 
23914
COMMIT;
 
23915
        
 
23916
# check transactions-8 success:         1
 
23917
# INFO: Storage engine used for t1 seems to be able to revert
 
23918
#       changes made by the failing statement.
 
23919
SET @@session.sql_mode = '';
 
23920
SET AUTOCOMMIT= 1;
 
23921
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23922
COMMIT WORK;
 
23923
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23924
        
 
23925
# check special-1 success:      1
 
23926
UPDATE t1 SET f_charbig = '';
 
23927
        
 
23928
# check special-2 success:      1
 
23929
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23930
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23931
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23932
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23933
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23934
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23935
'just inserted' FROM t0_template
 
23936
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23937
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23938
BEGIN
 
23939
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23940
f_charbig = 'updated by trigger'
 
23941
      WHERE f_int1 = new.f_int1;
 
23942
END|
 
23943
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23944
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23945
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23946
        
 
23947
# check trigger-1 success:      1
 
23948
DROP TRIGGER trg_1;
 
23949
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23950
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23951
f_charbig = 'just inserted'
 
23952
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23953
DELETE FROM t0_aux
 
23954
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23955
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23956
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23957
'just inserted' FROM t0_template
 
23958
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23959
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23960
BEGIN
 
23961
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23962
f_charbig = 'updated by trigger'
 
23963
      WHERE f_int1 = new.f_int1;
 
23964
END|
 
23965
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23966
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23967
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23968
        
 
23969
# check trigger-2 success:      1
 
23970
DROP TRIGGER trg_1;
 
23971
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23972
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23973
f_charbig = 'just inserted'
 
23974
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23975
DELETE FROM t0_aux
 
23976
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23977
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23978
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23979
'just inserted' FROM t0_template
 
23980
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23981
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23982
BEGIN
 
23983
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23984
f_charbig = 'updated by trigger'
 
23985
      WHERE f_int1 = new.f_int1;
 
23986
END|
 
23987
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23988
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23989
        
 
23990
# check trigger-3 success:      1
 
23991
DROP TRIGGER trg_1;
 
23992
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23993
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23994
f_charbig = 'just inserted'
 
23995
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23996
DELETE FROM t0_aux
 
23997
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23998
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23999
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24000
'just inserted' FROM t0_template
 
24001
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24002
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24003
BEGIN
 
24004
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24005
f_charbig = 'updated by trigger'
 
24006
      WHERE f_int1 = - old.f_int1;
 
24007
END|
 
24008
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24009
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24010
        
 
24011
# check trigger-4 success:      1
 
24012
DROP TRIGGER trg_1;
 
24013
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24014
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24015
f_charbig = 'just inserted'
 
24016
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24017
DELETE FROM t0_aux
 
24018
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24019
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24020
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24021
'just inserted' FROM t0_template
 
24022
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24023
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24024
BEGIN
 
24025
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24026
f_charbig = 'updated by trigger'
 
24027
      WHERE f_int1 = new.f_int1;
 
24028
END|
 
24029
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24030
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24031
        
 
24032
# check trigger-5 success:      1
 
24033
DROP TRIGGER trg_1;
 
24034
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24035
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24036
f_charbig = 'just inserted'
 
24037
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24038
DELETE FROM t0_aux
 
24039
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24040
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24041
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24042
'just inserted' FROM t0_template
 
24043
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24044
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24045
BEGIN
 
24046
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24047
f_charbig = 'updated by trigger'
 
24048
      WHERE f_int1 = - old.f_int1;
 
24049
END|
 
24050
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24051
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24052
        
 
24053
# check trigger-6 success:      1
 
24054
DROP TRIGGER trg_1;
 
24055
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24056
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24057
f_charbig = 'just inserted'
 
24058
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24059
DELETE FROM t0_aux
 
24060
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24062
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24063
'just inserted' FROM t0_template
 
24064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24065
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24066
BEGIN
 
24067
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24068
f_charbig = 'updated by trigger'
 
24069
      WHERE f_int1 = - old.f_int1;
 
24070
END|
 
24071
DELETE FROM t0_aux
 
24072
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24073
        
 
24074
# check trigger-7 success:      1
 
24075
DROP TRIGGER trg_1;
 
24076
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24077
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24078
f_charbig = 'just inserted'
 
24079
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24080
DELETE FROM t0_aux
 
24081
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24082
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24083
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24084
'just inserted' FROM t0_template
 
24085
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24086
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24087
BEGIN
 
24088
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24089
f_charbig = 'updated by trigger'
 
24090
      WHERE f_int1 = - old.f_int1;
 
24091
END|
 
24092
DELETE FROM t0_aux
 
24093
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24094
        
 
24095
# check trigger-8 success:      1
 
24096
DROP TRIGGER trg_1;
 
24097
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24098
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24099
f_charbig = 'just inserted'
 
24100
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24101
DELETE FROM t0_aux
 
24102
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24103
DELETE FROM t1
 
24104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24105
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24106
BEGIN
 
24107
SET new.f_int1 = old.f_int1 + @max_row,
 
24108
new.f_int2 = old.f_int2 - @max_row,
 
24109
new.f_charbig = '####updated per update trigger####';
 
24110
END|
 
24111
UPDATE t1
 
24112
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24113
f_charbig = '####updated per update statement itself####';
 
24114
        
 
24115
# check trigger-9 success:      1
 
24116
DROP TRIGGER trg_2;
 
24117
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24118
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24119
f_charbig = CONCAT('===',f_char1,'===');
 
24120
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24121
BEGIN
 
24122
SET new.f_int1 = new.f_int1 + @max_row,
 
24123
new.f_int2 = new.f_int2 - @max_row,
 
24124
new.f_charbig = '####updated per update trigger####';
 
24125
END|
 
24126
UPDATE t1
 
24127
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24128
f_charbig = '####updated per update statement itself####';
 
24129
        
 
24130
# check trigger-10 success:     1
 
24131
DROP TRIGGER trg_2;
 
24132
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24133
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24134
f_charbig = CONCAT('===',f_char1,'===');
 
24135
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24136
BEGIN
 
24137
SET new.f_int1 = @my_max1 + @counter,
 
24138
new.f_int2 = @my_min2 - @counter,
 
24139
new.f_charbig = '####updated per insert trigger####';
 
24140
SET @counter = @counter + 1;
 
24141
END|
 
24142
SET @counter = 1;
 
24143
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24144
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24145
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24146
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24148
ORDER BY f_int1;
 
24149
DROP TRIGGER trg_3;
 
24150
        
 
24151
# check trigger-11 success:     1
 
24152
DELETE FROM t1
 
24153
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24154
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24155
AND f_charbig = '####updated per insert trigger####';
 
24156
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24157
BEGIN
 
24158
SET new.f_int1 = @my_max1 + @counter,
 
24159
new.f_int2 = @my_min2 - @counter,
 
24160
new.f_charbig = '####updated per insert trigger####';
 
24161
SET @counter = @counter + 1;
 
24162
END|
 
24163
SET @counter = 1;
 
24164
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24165
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24166
SELECT CAST(f_int1 AS CHAR),
 
24167
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24169
ORDER BY f_int1;
 
24170
DROP TRIGGER trg_3;
 
24171
        
 
24172
# check trigger-12 success:     1
 
24173
DELETE FROM t1
 
24174
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24175
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24176
AND f_charbig = '####updated per insert trigger####';
 
24177
ANALYZE  TABLE t1;
 
24178
Table   Op      Msg_type        Msg_text
 
24179
test.t1 analyze status  OK
 
24180
CHECK    TABLE t1 EXTENDED;
 
24181
Table   Op      Msg_type        Msg_text
 
24182
test.t1 check   status  OK
 
24183
CHECKSUM TABLE t1 EXTENDED;
 
24184
Table   Checksum
 
24185
test.t1 <some_value>
 
24186
OPTIMIZE TABLE t1;
 
24187
Table   Op      Msg_type        Msg_text
 
24188
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
24189
test.t1 optimize        status  OK
 
24190
# check layout success:    1
 
24191
REPAIR   TABLE t1 EXTENDED;
 
24192
Table   Op      Msg_type        Msg_text
 
24193
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24194
# check layout success:    1
 
24195
TRUNCATE t1;
 
24196
        
 
24197
# check TRUNCATE success:       1
 
24198
# check layout success:    1
 
24199
# End usability test (inc/partition_check.inc)
 
24200
DROP TABLE t1;
 
24201
CREATE TABLE t1 (
 
24202
f_int1 INTEGER,
 
24203
f_int2 INTEGER,
 
24204
f_char1 CHAR(20),
 
24205
f_char2 CHAR(20),
 
24206
f_charbig VARCHAR(1000)
 
24207
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
24208
)
 
24209
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
24210
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24211
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
24212
# Start usability test (inc/partition_check.inc)
 
24213
create_command
 
24214
SHOW CREATE TABLE t1;
 
24215
Table   Create Table
 
24216
t1      CREATE TABLE `t1` (
 
24217
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
24218
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
24219
  `f_char1` char(20) DEFAULT NULL,
 
24220
  `f_char2` char(20) DEFAULT NULL,
 
24221
  `f_charbig` varchar(1000) DEFAULT NULL,
 
24222
  PRIMARY KEY (`f_int1`,`f_int2`),
 
24223
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
24224
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
24225
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
24226
PARTITIONS 5 */
 
24227
 
 
24228
unified filelist
 
24229
t1.frm
 
24230
t1.par
 
24231
 
 
24232
# check prerequisites-1 success:    1
 
24233
# check COUNT(*) success:    1
 
24234
# check MIN/MAX(f_int1) success:    1
 
24235
# check MIN/MAX(f_int2) success:    1
 
24236
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24237
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24238
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24239
WHERE f_int1 IN (2,3);
 
24240
ERROR 23000: Can't write; duplicate key in table 't1'
 
24241
# check prerequisites-3 success:    1
 
24242
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
24243
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24244
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
24245
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
24246
WHERE f_int1 IN (2,3);
 
24247
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24248
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24249
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
24250
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
24251
WHERE f_int1 IN (2,3);
 
24252
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24253
# check read via f_int1 success: 1
 
24254
# check read via f_int2 success: 1
 
24255
        
 
24256
# check multiple-1 success:     1
 
24257
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24258
        
 
24259
# check multiple-2 success:     1
 
24260
INSERT INTO t1 SELECT * FROM t0_template
 
24261
WHERE MOD(f_int1,3) = 0;
 
24262
        
 
24263
# check multiple-3 success:     1
 
24264
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24265
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24266
AND @max_row_div2 + @max_row_div4;
 
24267
        
 
24268
# check multiple-4 success:     1
 
24269
DELETE FROM t1
 
24270
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24271
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24272
        
 
24273
# check multiple-5 success:     1
 
24274
SELECT COUNT(*) INTO @try_count FROM t0_template
 
24275
WHERE MOD(f_int1,3) = 0
 
24276
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24277
SELECT COUNT(*) INTO @clash_count
 
24278
FROM t1 INNER JOIN t0_template USING(f_int1)
 
24279
WHERE MOD(f_int1,3) = 0
 
24280
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24281
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24282
INSERT INTO t1
 
24283
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24284
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24285
f_charbig = '#SINGLE#';
 
24286
        
 
24287
# check single-1 success:       1
 
24288
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24289
INSERT INTO t1
 
24290
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24291
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24292
f_charbig = '#SINGLE#';
 
24293
        
 
24294
# check single-2 success:       1
 
24295
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24296
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24297
UPDATE t1 SET f_int1 = @cur_value2
 
24298
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24299
        
 
24300
# check single-3 success:       1
 
24301
SET @cur_value1= -1;
 
24302
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24303
UPDATE t1 SET f_int1 = @cur_value1
 
24304
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24305
        
 
24306
# check single-4 success:       1
 
24307
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24308
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24309
        
 
24310
# check single-5 success:       1
 
24311
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24312
        
 
24313
# check single-6 success:       1
 
24314
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24315
        
 
24316
# check single-7 success:       1
 
24317
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24318
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24319
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24320
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24321
f_charbig = '#NULL#';
 
24322
INSERT INTO t1
 
24323
SET f_int1 = NULL , f_int2 = -@max_row,
 
24324
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24325
f_charbig = '#NULL#';
 
24326
ERROR 23000: Column 'f_int1' cannot be null
 
24327
# check null success:    1
 
24328
DELETE FROM t1
 
24329
WHERE f_int1 = 0 AND f_int2 = 0
 
24330
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24331
AND f_charbig = '#NULL#';
 
24332
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24333
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24334
   FROM t0_template source_tab
 
24335
WHERE MOD(f_int1,3) = 0
 
24336
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
24337
ON DUPLICATE KEY
 
24338
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
24339
f_int2 = 2 * @max_row + source_tab.f_int1,
 
24340
f_charbig = 'was updated';
 
24341
        
 
24342
# check unique-1-a success:     1
 
24343
        
 
24344
# check unique-1-b success:     1
 
24345
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24346
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24347
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24348
f_charbig = CONCAT('===',f_char1,'===')
 
24349
WHERE f_charbig = 'was updated';
 
24350
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24351
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
24352
   FROM t0_template source_tab
 
24353
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24354
        
 
24355
# check replace success:        1
 
24356
DELETE FROM t1
 
24357
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
24358
DELETE FROM t1
 
24359
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
24360
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
24361
UPDATE t1 SET f_int2 = f_int1,
 
24362
f_char1 = CAST(f_int1 AS CHAR),
 
24363
f_char2 = CAST(f_int1 AS CHAR),
 
24364
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
24365
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
24366
SET AUTOCOMMIT= 0;
 
24367
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24368
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24369
FROM t0_template source_tab
 
24370
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24371
        
 
24372
# check transactions-1 success:         1
 
24373
COMMIT WORK;
 
24374
        
 
24375
# check transactions-2 success:         1
 
24376
ROLLBACK WORK;
 
24377
        
 
24378
# check transactions-3 success:         1
 
24379
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24380
COMMIT WORK;
 
24381
ROLLBACK WORK;
 
24382
        
 
24383
# check transactions-4 success:         1
 
24384
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24385
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24386
FROM t0_template source_tab
 
24387
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24388
        
 
24389
# check transactions-5 success:         1
 
24390
ROLLBACK WORK;
 
24391
        
 
24392
# check transactions-6 success:         1
 
24393
# INFO: Storage engine used for t1 seems to be transactional.
 
24394
COMMIT;
 
24395
        
 
24396
# check transactions-7 success:         1
 
24397
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24398
COMMIT WORK;
 
24399
SET @@session.sql_mode = 'traditional';
 
24400
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24401
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24402
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24403
'', '', 'was inserted' FROM t0_template
 
24404
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24405
ERROR 22012: Division by 0
 
24406
COMMIT;
 
24407
        
 
24408
# check transactions-8 success:         1
 
24409
# INFO: Storage engine used for t1 seems to be able to revert
 
24410
#       changes made by the failing statement.
 
24411
SET @@session.sql_mode = '';
 
24412
SET AUTOCOMMIT= 1;
 
24413
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24414
COMMIT WORK;
 
24415
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24416
        
 
24417
# check special-1 success:      1
 
24418
UPDATE t1 SET f_charbig = '';
 
24419
        
 
24420
# check special-2 success:      1
 
24421
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24422
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24423
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24424
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24425
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24426
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24427
'just inserted' FROM t0_template
 
24428
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24429
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24430
BEGIN
 
24431
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24432
f_charbig = 'updated by trigger'
 
24433
      WHERE f_int1 = new.f_int1;
 
24434
END|
 
24435
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24436
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24438
        
 
24439
# check trigger-1 success:      1
 
24440
DROP TRIGGER trg_1;
 
24441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24443
f_charbig = 'just inserted'
 
24444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24445
DELETE FROM t0_aux
 
24446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24448
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24449
'just inserted' FROM t0_template
 
24450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24451
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24452
BEGIN
 
24453
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24454
f_charbig = 'updated by trigger'
 
24455
      WHERE f_int1 = new.f_int1;
 
24456
END|
 
24457
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24458
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24459
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24460
        
 
24461
# check trigger-2 success:      1
 
24462
DROP TRIGGER trg_1;
 
24463
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24464
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24465
f_charbig = 'just inserted'
 
24466
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24467
DELETE FROM t0_aux
 
24468
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24469
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24470
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24471
'just inserted' FROM t0_template
 
24472
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24473
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24474
BEGIN
 
24475
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24476
f_charbig = 'updated by trigger'
 
24477
      WHERE f_int1 = new.f_int1;
 
24478
END|
 
24479
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24480
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24481
        
 
24482
# check trigger-3 success:      1
 
24483
DROP TRIGGER trg_1;
 
24484
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24485
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24486
f_charbig = 'just inserted'
 
24487
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24488
DELETE FROM t0_aux
 
24489
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24490
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24491
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24492
'just inserted' FROM t0_template
 
24493
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24494
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24495
BEGIN
 
24496
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24497
f_charbig = 'updated by trigger'
 
24498
      WHERE f_int1 = - old.f_int1;
 
24499
END|
 
24500
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24501
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24502
        
 
24503
# check trigger-4 success:      1
 
24504
DROP TRIGGER trg_1;
 
24505
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24506
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24507
f_charbig = 'just inserted'
 
24508
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24509
DELETE FROM t0_aux
 
24510
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24511
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24512
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24513
'just inserted' FROM t0_template
 
24514
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24515
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24516
BEGIN
 
24517
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24518
f_charbig = 'updated by trigger'
 
24519
      WHERE f_int1 = new.f_int1;
 
24520
END|
 
24521
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24522
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24523
        
 
24524
# check trigger-5 success:      1
 
24525
DROP TRIGGER trg_1;
 
24526
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24527
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24528
f_charbig = 'just inserted'
 
24529
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24530
DELETE FROM t0_aux
 
24531
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24532
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24533
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24534
'just inserted' FROM t0_template
 
24535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24536
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24537
BEGIN
 
24538
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24539
f_charbig = 'updated by trigger'
 
24540
      WHERE f_int1 = - old.f_int1;
 
24541
END|
 
24542
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24543
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24544
        
 
24545
# check trigger-6 success:      1
 
24546
DROP TRIGGER trg_1;
 
24547
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24548
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24549
f_charbig = 'just inserted'
 
24550
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24551
DELETE FROM t0_aux
 
24552
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24553
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24554
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24555
'just inserted' FROM t0_template
 
24556
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24557
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24558
BEGIN
 
24559
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24560
f_charbig = 'updated by trigger'
 
24561
      WHERE f_int1 = - old.f_int1;
 
24562
END|
 
24563
DELETE FROM t0_aux
 
24564
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24565
        
 
24566
# check trigger-7 success:      1
 
24567
DROP TRIGGER trg_1;
 
24568
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24569
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24570
f_charbig = 'just inserted'
 
24571
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24572
DELETE FROM t0_aux
 
24573
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24574
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24575
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24576
'just inserted' FROM t0_template
 
24577
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24578
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24579
BEGIN
 
24580
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24581
f_charbig = 'updated by trigger'
 
24582
      WHERE f_int1 = - old.f_int1;
 
24583
END|
 
24584
DELETE FROM t0_aux
 
24585
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24586
        
 
24587
# check trigger-8 success:      1
 
24588
DROP TRIGGER trg_1;
 
24589
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24590
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24591
f_charbig = 'just inserted'
 
24592
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24593
DELETE FROM t0_aux
 
24594
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24595
DELETE FROM t1
 
24596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24597
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24598
BEGIN
 
24599
SET new.f_int1 = old.f_int1 + @max_row,
 
24600
new.f_int2 = old.f_int2 - @max_row,
 
24601
new.f_charbig = '####updated per update trigger####';
 
24602
END|
 
24603
UPDATE t1
 
24604
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24605
f_charbig = '####updated per update statement itself####';
 
24606
        
 
24607
# check trigger-9 success:      1
 
24608
DROP TRIGGER trg_2;
 
24609
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24610
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24611
f_charbig = CONCAT('===',f_char1,'===');
 
24612
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24613
BEGIN
 
24614
SET new.f_int1 = new.f_int1 + @max_row,
 
24615
new.f_int2 = new.f_int2 - @max_row,
 
24616
new.f_charbig = '####updated per update trigger####';
 
24617
END|
 
24618
UPDATE t1
 
24619
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24620
f_charbig = '####updated per update statement itself####';
 
24621
        
 
24622
# check trigger-10 success:     1
 
24623
DROP TRIGGER trg_2;
 
24624
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24625
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24626
f_charbig = CONCAT('===',f_char1,'===');
 
24627
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24628
BEGIN
 
24629
SET new.f_int1 = @my_max1 + @counter,
 
24630
new.f_int2 = @my_min2 - @counter,
 
24631
new.f_charbig = '####updated per insert trigger####';
 
24632
SET @counter = @counter + 1;
 
24633
END|
 
24634
SET @counter = 1;
 
24635
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24636
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24637
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24638
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24640
ORDER BY f_int1;
 
24641
DROP TRIGGER trg_3;
 
24642
        
 
24643
# check trigger-11 success:     1
 
24644
DELETE FROM t1
 
24645
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24646
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24647
AND f_charbig = '####updated per insert trigger####';
 
24648
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24649
BEGIN
 
24650
SET new.f_int1 = @my_max1 + @counter,
 
24651
new.f_int2 = @my_min2 - @counter,
 
24652
new.f_charbig = '####updated per insert trigger####';
 
24653
SET @counter = @counter + 1;
 
24654
END|
 
24655
SET @counter = 1;
 
24656
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24657
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24658
SELECT CAST(f_int1 AS CHAR),
 
24659
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24661
ORDER BY f_int1;
 
24662
DROP TRIGGER trg_3;
 
24663
        
 
24664
# check trigger-12 success:     1
 
24665
DELETE FROM t1
 
24666
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24667
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24668
AND f_charbig = '####updated per insert trigger####';
 
24669
ANALYZE  TABLE t1;
 
24670
Table   Op      Msg_type        Msg_text
 
24671
test.t1 analyze status  OK
 
24672
CHECK    TABLE t1 EXTENDED;
 
24673
Table   Op      Msg_type        Msg_text
 
24674
test.t1 check   status  OK
 
24675
CHECKSUM TABLE t1 EXTENDED;
 
24676
Table   Checksum
 
24677
test.t1 <some_value>
 
24678
OPTIMIZE TABLE t1;
 
24679
Table   Op      Msg_type        Msg_text
 
24680
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
24681
test.t1 optimize        status  OK
 
24682
# check layout success:    1
 
24683
REPAIR   TABLE t1 EXTENDED;
 
24684
Table   Op      Msg_type        Msg_text
 
24685
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24686
# check layout success:    1
 
24687
TRUNCATE t1;
 
24688
        
 
24689
# check TRUNCATE success:       1
 
24690
# check layout success:    1
 
24691
# End usability test (inc/partition_check.inc)
 
24692
DROP TABLE t1;
 
24693
CREATE TABLE t1 (
 
24694
f_int1 INTEGER,
 
24695
f_int2 INTEGER,
 
24696
f_char1 CHAR(20),
 
24697
f_char2 CHAR(20),
 
24698
f_charbig VARCHAR(1000)
 
24699
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
24700
)
 
24701
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
24702
(PARTITION part_3 VALUES IN (-3),
 
24703
PARTITION part_2 VALUES IN (-2),
 
24704
PARTITION part_1 VALUES IN (-1),
 
24705
PARTITION part_N VALUES IN (NULL),
 
24706
PARTITION part0 VALUES IN (0),
 
24707
PARTITION part1 VALUES IN (1),
 
24708
PARTITION part2 VALUES IN (2),
 
24709
PARTITION part3 VALUES IN (3));
 
24710
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24711
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
24712
# Start usability test (inc/partition_check.inc)
 
24713
create_command
 
24714
SHOW CREATE TABLE t1;
 
24715
Table   Create Table
 
24716
t1      CREATE TABLE `t1` (
 
24717
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
24718
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
24719
  `f_char1` char(20) DEFAULT NULL,
 
24720
  `f_char2` char(20) DEFAULT NULL,
 
24721
  `f_charbig` varchar(1000) DEFAULT NULL,
 
24722
  PRIMARY KEY (`f_int1`,`f_int2`),
 
24723
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
24724
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
24725
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
24726
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
24727
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
24728
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
24729
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
24730
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
24731
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
24732
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
24733
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
24734
 
 
24735
unified filelist
 
24736
t1.frm
 
24737
t1.par
 
24738
 
 
24739
# check prerequisites-1 success:    1
 
24740
# check COUNT(*) success:    1
 
24741
# check MIN/MAX(f_int1) success:    1
 
24742
# check MIN/MAX(f_int2) success:    1
 
24743
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24744
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24745
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24746
WHERE f_int1 IN (2,3);
 
24747
ERROR 23000: Can't write; duplicate key in table 't1'
 
24748
# check prerequisites-3 success:    1
 
24749
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
24750
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24751
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
24752
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
24753
WHERE f_int1 IN (2,3);
 
24754
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24755
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24756
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
24757
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
24758
WHERE f_int1 IN (2,3);
 
24759
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24760
# check read via f_int1 success: 1
 
24761
# check read via f_int2 success: 1
 
24762
        
 
24763
# check multiple-1 success:     1
 
24764
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24765
        
 
24766
# check multiple-2 success:     1
 
24767
INSERT INTO t1 SELECT * FROM t0_template
 
24768
WHERE MOD(f_int1,3) = 0;
 
24769
        
 
24770
# check multiple-3 success:     1
 
24771
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24772
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24773
AND @max_row_div2 + @max_row_div4;
 
24774
        
 
24775
# check multiple-4 success:     1
 
24776
DELETE FROM t1
 
24777
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24778
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24779
        
 
24780
# check multiple-5 success:     1
 
24781
SELECT COUNT(*) INTO @try_count FROM t0_template
 
24782
WHERE MOD(f_int1,3) = 0
 
24783
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24784
SELECT COUNT(*) INTO @clash_count
 
24785
FROM t1 INNER JOIN t0_template USING(f_int1)
 
24786
WHERE MOD(f_int1,3) = 0
 
24787
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24788
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24789
INSERT INTO t1
 
24790
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24791
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24792
f_charbig = '#SINGLE#';
 
24793
        
 
24794
# check single-1 success:       1
 
24795
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24796
INSERT INTO t1
 
24797
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24798
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24799
f_charbig = '#SINGLE#';
 
24800
        
 
24801
# check single-2 success:       1
 
24802
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24803
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24804
UPDATE t1 SET f_int1 = @cur_value2
 
24805
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24806
        
 
24807
# check single-3 success:       1
 
24808
SET @cur_value1= -1;
 
24809
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24810
UPDATE t1 SET f_int1 = @cur_value1
 
24811
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24812
        
 
24813
# check single-4 success:       1
 
24814
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24815
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24816
        
 
24817
# check single-5 success:       1
 
24818
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24819
        
 
24820
# check single-6 success:       1
 
24821
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24822
        
 
24823
# check single-7 success:       1
 
24824
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24825
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24826
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24827
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24828
f_charbig = '#NULL#';
 
24829
INSERT INTO t1
 
24830
SET f_int1 = NULL , f_int2 = -@max_row,
 
24831
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24832
f_charbig = '#NULL#';
 
24833
ERROR 23000: Column 'f_int1' cannot be null
 
24834
# check null success:    1
 
24835
DELETE FROM t1
 
24836
WHERE f_int1 = 0 AND f_int2 = 0
 
24837
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24838
AND f_charbig = '#NULL#';
 
24839
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24840
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24841
   FROM t0_template source_tab
 
24842
WHERE MOD(f_int1,3) = 0
 
24843
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
24844
ON DUPLICATE KEY
 
24845
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
24846
f_int2 = 2 * @max_row + source_tab.f_int1,
 
24847
f_charbig = 'was updated';
 
24848
        
 
24849
# check unique-1-a success:     1
 
24850
        
 
24851
# check unique-1-b success:     1
 
24852
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24853
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24854
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24855
f_charbig = CONCAT('===',f_char1,'===')
 
24856
WHERE f_charbig = 'was updated';
 
24857
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24858
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
24859
   FROM t0_template source_tab
 
24860
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24861
        
 
24862
# check replace success:        1
 
24863
DELETE FROM t1
 
24864
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
24865
DELETE FROM t1
 
24866
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
24867
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
24868
UPDATE t1 SET f_int2 = f_int1,
 
24869
f_char1 = CAST(f_int1 AS CHAR),
 
24870
f_char2 = CAST(f_int1 AS CHAR),
 
24871
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
24872
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
24873
SET AUTOCOMMIT= 0;
 
24874
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24875
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24876
FROM t0_template source_tab
 
24877
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24878
        
 
24879
# check transactions-1 success:         1
 
24880
COMMIT WORK;
 
24881
        
 
24882
# check transactions-2 success:         1
 
24883
ROLLBACK WORK;
 
24884
        
 
24885
# check transactions-3 success:         1
 
24886
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24887
COMMIT WORK;
 
24888
ROLLBACK WORK;
 
24889
        
 
24890
# check transactions-4 success:         1
 
24891
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24892
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24893
FROM t0_template source_tab
 
24894
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24895
        
 
24896
# check transactions-5 success:         1
 
24897
ROLLBACK WORK;
 
24898
        
 
24899
# check transactions-6 success:         1
 
24900
# INFO: Storage engine used for t1 seems to be transactional.
 
24901
COMMIT;
 
24902
        
 
24903
# check transactions-7 success:         1
 
24904
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24905
COMMIT WORK;
 
24906
SET @@session.sql_mode = 'traditional';
 
24907
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24908
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24909
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24910
'', '', 'was inserted' FROM t0_template
 
24911
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24912
ERROR 22012: Division by 0
 
24913
COMMIT;
 
24914
        
 
24915
# check transactions-8 success:         1
 
24916
# INFO: Storage engine used for t1 seems to be able to revert
 
24917
#       changes made by the failing statement.
 
24918
SET @@session.sql_mode = '';
 
24919
SET AUTOCOMMIT= 1;
 
24920
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24921
COMMIT WORK;
 
24922
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24923
        
 
24924
# check special-1 success:      1
 
24925
UPDATE t1 SET f_charbig = '';
 
24926
        
 
24927
# check special-2 success:      1
 
24928
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24929
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24930
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24931
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24932
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24933
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24934
'just inserted' FROM t0_template
 
24935
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24936
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24937
BEGIN
 
24938
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24939
f_charbig = 'updated by trigger'
 
24940
      WHERE f_int1 = new.f_int1;
 
24941
END|
 
24942
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24943
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24944
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24945
        
 
24946
# check trigger-1 success:      1
 
24947
DROP TRIGGER trg_1;
 
24948
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24949
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24950
f_charbig = 'just inserted'
 
24951
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24952
DELETE FROM t0_aux
 
24953
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24954
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24955
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24956
'just inserted' FROM t0_template
 
24957
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24958
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24959
BEGIN
 
24960
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24961
f_charbig = 'updated by trigger'
 
24962
      WHERE f_int1 = new.f_int1;
 
24963
END|
 
24964
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24965
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24966
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24967
        
 
24968
# check trigger-2 success:      1
 
24969
DROP TRIGGER trg_1;
 
24970
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24971
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24972
f_charbig = 'just inserted'
 
24973
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24974
DELETE FROM t0_aux
 
24975
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24976
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24977
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24978
'just inserted' FROM t0_template
 
24979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24980
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24981
BEGIN
 
24982
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24983
f_charbig = 'updated by trigger'
 
24984
      WHERE f_int1 = new.f_int1;
 
24985
END|
 
24986
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24987
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24988
        
 
24989
# check trigger-3 success:      1
 
24990
DROP TRIGGER trg_1;
 
24991
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24992
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24993
f_charbig = 'just inserted'
 
24994
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24995
DELETE FROM t0_aux
 
24996
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24997
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24998
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24999
'just inserted' FROM t0_template
 
25000
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25001
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25002
BEGIN
 
25003
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25004
f_charbig = 'updated by trigger'
 
25005
      WHERE f_int1 = - old.f_int1;
 
25006
END|
 
25007
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25008
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25009
        
 
25010
# check trigger-4 success:      1
 
25011
DROP TRIGGER trg_1;
 
25012
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25013
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25014
f_charbig = 'just inserted'
 
25015
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25016
DELETE FROM t0_aux
 
25017
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25018
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25019
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25020
'just inserted' FROM t0_template
 
25021
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25022
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25023
BEGIN
 
25024
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25025
f_charbig = 'updated by trigger'
 
25026
      WHERE f_int1 = new.f_int1;
 
25027
END|
 
25028
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25029
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25030
        
 
25031
# check trigger-5 success:      1
 
25032
DROP TRIGGER trg_1;
 
25033
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25034
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25035
f_charbig = 'just inserted'
 
25036
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25037
DELETE FROM t0_aux
 
25038
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25039
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25040
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25041
'just inserted' FROM t0_template
 
25042
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25043
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25044
BEGIN
 
25045
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25046
f_charbig = 'updated by trigger'
 
25047
      WHERE f_int1 = - old.f_int1;
 
25048
END|
 
25049
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25050
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25051
        
 
25052
# check trigger-6 success:      1
 
25053
DROP TRIGGER trg_1;
 
25054
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25055
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25056
f_charbig = 'just inserted'
 
25057
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25058
DELETE FROM t0_aux
 
25059
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25060
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25061
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25062
'just inserted' FROM t0_template
 
25063
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25064
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25065
BEGIN
 
25066
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25067
f_charbig = 'updated by trigger'
 
25068
      WHERE f_int1 = - old.f_int1;
 
25069
END|
 
25070
DELETE FROM t0_aux
 
25071
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25072
        
 
25073
# check trigger-7 success:      1
 
25074
DROP TRIGGER trg_1;
 
25075
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25076
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25077
f_charbig = 'just inserted'
 
25078
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25079
DELETE FROM t0_aux
 
25080
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25081
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25082
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25083
'just inserted' FROM t0_template
 
25084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25085
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25086
BEGIN
 
25087
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25088
f_charbig = 'updated by trigger'
 
25089
      WHERE f_int1 = - old.f_int1;
 
25090
END|
 
25091
DELETE FROM t0_aux
 
25092
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25093
        
 
25094
# check trigger-8 success:      1
 
25095
DROP TRIGGER trg_1;
 
25096
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25097
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25098
f_charbig = 'just inserted'
 
25099
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25100
DELETE FROM t0_aux
 
25101
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25102
DELETE FROM t1
 
25103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25104
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25105
BEGIN
 
25106
SET new.f_int1 = old.f_int1 + @max_row,
 
25107
new.f_int2 = old.f_int2 - @max_row,
 
25108
new.f_charbig = '####updated per update trigger####';
 
25109
END|
 
25110
UPDATE t1
 
25111
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25112
f_charbig = '####updated per update statement itself####';
 
25113
        
 
25114
# check trigger-9 success:      1
 
25115
DROP TRIGGER trg_2;
 
25116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25118
f_charbig = CONCAT('===',f_char1,'===');
 
25119
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25120
BEGIN
 
25121
SET new.f_int1 = new.f_int1 + @max_row,
 
25122
new.f_int2 = new.f_int2 - @max_row,
 
25123
new.f_charbig = '####updated per update trigger####';
 
25124
END|
 
25125
UPDATE t1
 
25126
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25127
f_charbig = '####updated per update statement itself####';
 
25128
        
 
25129
# check trigger-10 success:     1
 
25130
DROP TRIGGER trg_2;
 
25131
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25132
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25133
f_charbig = CONCAT('===',f_char1,'===');
 
25134
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25135
BEGIN
 
25136
SET new.f_int1 = @my_max1 + @counter,
 
25137
new.f_int2 = @my_min2 - @counter,
 
25138
new.f_charbig = '####updated per insert trigger####';
 
25139
SET @counter = @counter + 1;
 
25140
END|
 
25141
SET @counter = 1;
 
25142
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25143
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25144
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25145
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25147
ORDER BY f_int1;
 
25148
DROP TRIGGER trg_3;
 
25149
        
 
25150
# check trigger-11 success:     1
 
25151
DELETE FROM t1
 
25152
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25153
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25154
AND f_charbig = '####updated per insert trigger####';
 
25155
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25156
BEGIN
 
25157
SET new.f_int1 = @my_max1 + @counter,
 
25158
new.f_int2 = @my_min2 - @counter,
 
25159
new.f_charbig = '####updated per insert trigger####';
 
25160
SET @counter = @counter + 1;
 
25161
END|
 
25162
SET @counter = 1;
 
25163
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25164
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25165
SELECT CAST(f_int1 AS CHAR),
 
25166
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25167
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25168
ORDER BY f_int1;
 
25169
DROP TRIGGER trg_3;
 
25170
        
 
25171
# check trigger-12 success:     1
 
25172
DELETE FROM t1
 
25173
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25174
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25175
AND f_charbig = '####updated per insert trigger####';
 
25176
ANALYZE  TABLE t1;
 
25177
Table   Op      Msg_type        Msg_text
 
25178
test.t1 analyze status  OK
 
25179
CHECK    TABLE t1 EXTENDED;
 
25180
Table   Op      Msg_type        Msg_text
 
25181
test.t1 check   status  OK
 
25182
CHECKSUM TABLE t1 EXTENDED;
 
25183
Table   Checksum
 
25184
test.t1 <some_value>
 
25185
OPTIMIZE TABLE t1;
 
25186
Table   Op      Msg_type        Msg_text
 
25187
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
25188
test.t1 optimize        status  OK
 
25189
# check layout success:    1
 
25190
REPAIR   TABLE t1 EXTENDED;
 
25191
Table   Op      Msg_type        Msg_text
 
25192
test.t1 repair  note    The storage engine for the table doesn't support repair
 
25193
# check layout success:    1
 
25194
TRUNCATE t1;
 
25195
        
 
25196
# check TRUNCATE success:       1
 
25197
# check layout success:    1
 
25198
# End usability test (inc/partition_check.inc)
 
25199
DROP TABLE t1;
 
25200
CREATE TABLE t1 (
 
25201
f_int1 INTEGER,
 
25202
f_int2 INTEGER,
 
25203
f_char1 CHAR(20),
 
25204
f_char2 CHAR(20),
 
25205
f_charbig VARCHAR(1000)
 
25206
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
25207
)
 
25208
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
25209
(PARTITION parta VALUES LESS THAN (0),
 
25210
PARTITION partb VALUES LESS THAN (5),
 
25211
PARTITION partc VALUES LESS THAN (10),
 
25212
PARTITION partd VALUES LESS THAN (10 + 5),
 
25213
PARTITION parte VALUES LESS THAN (20),
 
25214
PARTITION partf VALUES LESS THAN (2147483646));
 
25215
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25216
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
25217
# Start usability test (inc/partition_check.inc)
 
25218
create_command
 
25219
SHOW CREATE TABLE t1;
 
25220
Table   Create Table
 
25221
t1      CREATE TABLE `t1` (
 
25222
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
25223
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
25224
  `f_char1` char(20) DEFAULT NULL,
 
25225
  `f_char2` char(20) DEFAULT NULL,
 
25226
  `f_charbig` varchar(1000) DEFAULT NULL,
 
25227
  PRIMARY KEY (`f_int1`,`f_int2`),
 
25228
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
25229
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
25230
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
25231
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
25232
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
25233
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
25234
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
25235
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
25236
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
25237
 
 
25238
unified filelist
 
25239
t1.frm
 
25240
t1.par
 
25241
 
 
25242
# check prerequisites-1 success:    1
 
25243
# check COUNT(*) success:    1
 
25244
# check MIN/MAX(f_int1) success:    1
 
25245
# check MIN/MAX(f_int2) success:    1
 
25246
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25247
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25248
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25249
WHERE f_int1 IN (2,3);
 
25250
ERROR 23000: Can't write; duplicate key in table 't1'
 
25251
# check prerequisites-3 success:    1
 
25252
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
25253
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25254
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
25255
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
25256
WHERE f_int1 IN (2,3);
 
25257
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25258
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25259
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
25260
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
25261
WHERE f_int1 IN (2,3);
 
25262
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25263
# check read via f_int1 success: 1
 
25264
# check read via f_int2 success: 1
 
25265
        
 
25266
# check multiple-1 success:     1
 
25267
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25268
        
 
25269
# check multiple-2 success:     1
 
25270
INSERT INTO t1 SELECT * FROM t0_template
 
25271
WHERE MOD(f_int1,3) = 0;
 
25272
        
 
25273
# check multiple-3 success:     1
 
25274
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25275
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25276
AND @max_row_div2 + @max_row_div4;
 
25277
        
 
25278
# check multiple-4 success:     1
 
25279
DELETE FROM t1
 
25280
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25281
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25282
        
 
25283
# check multiple-5 success:     1
 
25284
SELECT COUNT(*) INTO @try_count FROM t0_template
 
25285
WHERE MOD(f_int1,3) = 0
 
25286
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25287
SELECT COUNT(*) INTO @clash_count
 
25288
FROM t1 INNER JOIN t0_template USING(f_int1)
 
25289
WHERE MOD(f_int1,3) = 0
 
25290
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25291
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25292
INSERT INTO t1
 
25293
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25294
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25295
f_charbig = '#SINGLE#';
 
25296
        
 
25297
# check single-1 success:       1
 
25298
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25299
INSERT INTO t1
 
25300
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25301
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25302
f_charbig = '#SINGLE#';
 
25303
        
 
25304
# check single-2 success:       1
 
25305
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25306
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25307
UPDATE t1 SET f_int1 = @cur_value2
 
25308
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25309
        
 
25310
# check single-3 success:       1
 
25311
SET @cur_value1= -1;
 
25312
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25313
UPDATE t1 SET f_int1 = @cur_value1
 
25314
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25315
        
 
25316
# check single-4 success:       1
 
25317
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25318
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25319
        
 
25320
# check single-5 success:       1
 
25321
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25322
        
 
25323
# check single-6 success:       1
 
25324
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25325
ERROR HY000: Table has no partition for value 2147483647
 
25326
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25327
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25328
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25329
f_charbig = '#NULL#';
 
25330
INSERT INTO t1
 
25331
SET f_int1 = NULL , f_int2 = -@max_row,
 
25332
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25333
f_charbig = '#NULL#';
 
25334
ERROR 23000: Column 'f_int1' cannot be null
 
25335
# check null success:    1
 
25336
DELETE FROM t1
 
25337
WHERE f_int1 = 0 AND f_int2 = 0
 
25338
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25339
AND f_charbig = '#NULL#';
 
25340
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25341
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25342
   FROM t0_template source_tab
 
25343
WHERE MOD(f_int1,3) = 0
 
25344
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
25345
ON DUPLICATE KEY
 
25346
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
25347
f_int2 = 2 * @max_row + source_tab.f_int1,
 
25348
f_charbig = 'was updated';
 
25349
        
 
25350
# check unique-1-a success:     1
 
25351
        
 
25352
# check unique-1-b success:     1
 
25353
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25354
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25355
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25356
f_charbig = CONCAT('===',f_char1,'===')
 
25357
WHERE f_charbig = 'was updated';
 
25358
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25359
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
25360
   FROM t0_template source_tab
 
25361
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25362
        
 
25363
# check replace success:        1
 
25364
DELETE FROM t1
 
25365
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
25366
DELETE FROM t1
 
25367
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
25368
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
25369
UPDATE t1 SET f_int2 = f_int1,
 
25370
f_char1 = CAST(f_int1 AS CHAR),
 
25371
f_char2 = CAST(f_int1 AS CHAR),
 
25372
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
25373
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
25374
SET AUTOCOMMIT= 0;
 
25375
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25376
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25377
FROM t0_template source_tab
 
25378
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25379
        
 
25380
# check transactions-1 success:         1
 
25381
COMMIT WORK;
 
25382
        
 
25383
# check transactions-2 success:         1
 
25384
ROLLBACK WORK;
 
25385
        
 
25386
# check transactions-3 success:         1
 
25387
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25388
COMMIT WORK;
 
25389
ROLLBACK WORK;
 
25390
        
 
25391
# check transactions-4 success:         1
 
25392
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25393
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25394
FROM t0_template source_tab
 
25395
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25396
        
 
25397
# check transactions-5 success:         1
 
25398
ROLLBACK WORK;
 
25399
        
 
25400
# check transactions-6 success:         1
 
25401
# INFO: Storage engine used for t1 seems to be transactional.
 
25402
COMMIT;
 
25403
        
 
25404
# check transactions-7 success:         1
 
25405
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25406
COMMIT WORK;
 
25407
SET @@session.sql_mode = 'traditional';
 
25408
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25409
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25410
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25411
'', '', 'was inserted' FROM t0_template
 
25412
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25413
ERROR 22012: Division by 0
 
25414
COMMIT;
 
25415
        
 
25416
# check transactions-8 success:         1
 
25417
# INFO: Storage engine used for t1 seems to be able to revert
 
25418
#       changes made by the failing statement.
 
25419
SET @@session.sql_mode = '';
 
25420
SET AUTOCOMMIT= 1;
 
25421
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25422
COMMIT WORK;
 
25423
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25424
        
 
25425
# check special-1 success:      1
 
25426
UPDATE t1 SET f_charbig = '';
 
25427
        
 
25428
# check special-2 success:      1
 
25429
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25430
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25431
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25433
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25434
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25435
'just inserted' FROM t0_template
 
25436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25437
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25438
BEGIN
 
25439
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25440
f_charbig = 'updated by trigger'
 
25441
      WHERE f_int1 = new.f_int1;
 
25442
END|
 
25443
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25444
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25446
        
 
25447
# check trigger-1 success:      1
 
25448
DROP TRIGGER trg_1;
 
25449
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25450
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25451
f_charbig = 'just inserted'
 
25452
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25453
DELETE FROM t0_aux
 
25454
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25455
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25456
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25457
'just inserted' FROM t0_template
 
25458
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25459
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25460
BEGIN
 
25461
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25462
f_charbig = 'updated by trigger'
 
25463
      WHERE f_int1 = new.f_int1;
 
25464
END|
 
25465
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25466
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25467
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25468
        
 
25469
# check trigger-2 success:      1
 
25470
DROP TRIGGER trg_1;
 
25471
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25472
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25473
f_charbig = 'just inserted'
 
25474
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25475
DELETE FROM t0_aux
 
25476
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25477
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25478
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25479
'just inserted' FROM t0_template
 
25480
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25481
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25482
BEGIN
 
25483
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25484
f_charbig = 'updated by trigger'
 
25485
      WHERE f_int1 = new.f_int1;
 
25486
END|
 
25487
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25488
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25489
        
 
25490
# check trigger-3 success:      1
 
25491
DROP TRIGGER trg_1;
 
25492
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25493
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25494
f_charbig = 'just inserted'
 
25495
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25496
DELETE FROM t0_aux
 
25497
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25498
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25499
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25500
'just inserted' FROM t0_template
 
25501
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25502
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25503
BEGIN
 
25504
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25505
f_charbig = 'updated by trigger'
 
25506
      WHERE f_int1 = - old.f_int1;
 
25507
END|
 
25508
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25509
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25510
        
 
25511
# check trigger-4 success:      1
 
25512
DROP TRIGGER trg_1;
 
25513
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25514
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25515
f_charbig = 'just inserted'
 
25516
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25517
DELETE FROM t0_aux
 
25518
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25520
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25521
'just inserted' FROM t0_template
 
25522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25523
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25524
BEGIN
 
25525
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25526
f_charbig = 'updated by trigger'
 
25527
      WHERE f_int1 = new.f_int1;
 
25528
END|
 
25529
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25530
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25531
        
 
25532
# check trigger-5 success:      1
 
25533
DROP TRIGGER trg_1;
 
25534
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25535
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25536
f_charbig = 'just inserted'
 
25537
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25538
DELETE FROM t0_aux
 
25539
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25540
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25541
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25542
'just inserted' FROM t0_template
 
25543
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25544
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25545
BEGIN
 
25546
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25547
f_charbig = 'updated by trigger'
 
25548
      WHERE f_int1 = - old.f_int1;
 
25549
END|
 
25550
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25551
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25552
        
 
25553
# check trigger-6 success:      1
 
25554
DROP TRIGGER trg_1;
 
25555
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25556
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25557
f_charbig = 'just inserted'
 
25558
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25559
DELETE FROM t0_aux
 
25560
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25561
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25562
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25563
'just inserted' FROM t0_template
 
25564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25565
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25566
BEGIN
 
25567
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25568
f_charbig = 'updated by trigger'
 
25569
      WHERE f_int1 = - old.f_int1;
 
25570
END|
 
25571
DELETE FROM t0_aux
 
25572
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25573
        
 
25574
# check trigger-7 success:      1
 
25575
DROP TRIGGER trg_1;
 
25576
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25577
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25578
f_charbig = 'just inserted'
 
25579
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25580
DELETE FROM t0_aux
 
25581
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25582
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25583
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25584
'just inserted' FROM t0_template
 
25585
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25586
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25587
BEGIN
 
25588
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25589
f_charbig = 'updated by trigger'
 
25590
      WHERE f_int1 = - old.f_int1;
 
25591
END|
 
25592
DELETE FROM t0_aux
 
25593
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25594
        
 
25595
# check trigger-8 success:      1
 
25596
DROP TRIGGER trg_1;
 
25597
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25598
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25599
f_charbig = 'just inserted'
 
25600
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25601
DELETE FROM t0_aux
 
25602
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25603
DELETE FROM t1
 
25604
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25605
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25606
BEGIN
 
25607
SET new.f_int1 = old.f_int1 + @max_row,
 
25608
new.f_int2 = old.f_int2 - @max_row,
 
25609
new.f_charbig = '####updated per update trigger####';
 
25610
END|
 
25611
UPDATE t1
 
25612
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25613
f_charbig = '####updated per update statement itself####';
 
25614
        
 
25615
# check trigger-9 success:      1
 
25616
DROP TRIGGER trg_2;
 
25617
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25618
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25619
f_charbig = CONCAT('===',f_char1,'===');
 
25620
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25621
BEGIN
 
25622
SET new.f_int1 = new.f_int1 + @max_row,
 
25623
new.f_int2 = new.f_int2 - @max_row,
 
25624
new.f_charbig = '####updated per update trigger####';
 
25625
END|
 
25626
UPDATE t1
 
25627
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25628
f_charbig = '####updated per update statement itself####';
 
25629
        
 
25630
# check trigger-10 success:     1
 
25631
DROP TRIGGER trg_2;
 
25632
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25633
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25634
f_charbig = CONCAT('===',f_char1,'===');
 
25635
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25636
BEGIN
 
25637
SET new.f_int1 = @my_max1 + @counter,
 
25638
new.f_int2 = @my_min2 - @counter,
 
25639
new.f_charbig = '####updated per insert trigger####';
 
25640
SET @counter = @counter + 1;
 
25641
END|
 
25642
SET @counter = 1;
 
25643
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25644
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25645
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25646
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25648
ORDER BY f_int1;
 
25649
DROP TRIGGER trg_3;
 
25650
        
 
25651
# check trigger-11 success:     1
 
25652
DELETE FROM t1
 
25653
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25654
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25655
AND f_charbig = '####updated per insert trigger####';
 
25656
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25657
BEGIN
 
25658
SET new.f_int1 = @my_max1 + @counter,
 
25659
new.f_int2 = @my_min2 - @counter,
 
25660
new.f_charbig = '####updated per insert trigger####';
 
25661
SET @counter = @counter + 1;
 
25662
END|
 
25663
SET @counter = 1;
 
25664
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25665
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25666
SELECT CAST(f_int1 AS CHAR),
 
25667
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25669
ORDER BY f_int1;
 
25670
DROP TRIGGER trg_3;
 
25671
        
 
25672
# check trigger-12 success:     1
 
25673
DELETE FROM t1
 
25674
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25675
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25676
AND f_charbig = '####updated per insert trigger####';
 
25677
ANALYZE  TABLE t1;
 
25678
Table   Op      Msg_type        Msg_text
 
25679
test.t1 analyze status  OK
 
25680
CHECK    TABLE t1 EXTENDED;
 
25681
Table   Op      Msg_type        Msg_text
 
25682
test.t1 check   status  OK
 
25683
CHECKSUM TABLE t1 EXTENDED;
 
25684
Table   Checksum
 
25685
test.t1 <some_value>
 
25686
OPTIMIZE TABLE t1;
 
25687
Table   Op      Msg_type        Msg_text
 
25688
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
25689
test.t1 optimize        status  OK
 
25690
# check layout success:    1
 
25691
REPAIR   TABLE t1 EXTENDED;
 
25692
Table   Op      Msg_type        Msg_text
 
25693
test.t1 repair  note    The storage engine for the table doesn't support repair
 
25694
# check layout success:    1
 
25695
TRUNCATE t1;
 
25696
        
 
25697
# check TRUNCATE success:       1
 
25698
# check layout success:    1
 
25699
# End usability test (inc/partition_check.inc)
 
25700
DROP TABLE t1;
 
25701
CREATE TABLE t1 (
 
25702
f_int1 INTEGER,
 
25703
f_int2 INTEGER,
 
25704
f_char1 CHAR(20),
 
25705
f_char2 CHAR(20),
 
25706
f_charbig VARCHAR(1000)
 
25707
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
25708
)
 
25709
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
25710
(PARTITION parta VALUES LESS THAN (0),
 
25711
PARTITION partb VALUES LESS THAN (5),
 
25712
PARTITION partc VALUES LESS THAN (10),
 
25713
PARTITION partd VALUES LESS THAN (2147483646));
 
25714
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25715
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
25716
# Start usability test (inc/partition_check.inc)
 
25717
create_command
 
25718
SHOW CREATE TABLE t1;
 
25719
Table   Create Table
 
25720
t1      CREATE TABLE `t1` (
 
25721
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
25722
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
25723
  `f_char1` char(20) DEFAULT NULL,
 
25724
  `f_char2` char(20) DEFAULT NULL,
 
25725
  `f_charbig` varchar(1000) DEFAULT NULL,
 
25726
  PRIMARY KEY (`f_int1`,`f_int2`),
 
25727
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
25728
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
25729
/*!50100 PARTITION BY RANGE (f_int1)
 
25730
SUBPARTITION BY HASH (f_int2)
 
25731
SUBPARTITIONS 2
 
25732
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
25733
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
25734
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
25735
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
25736
 
 
25737
unified filelist
 
25738
t1.frm
 
25739
t1.par
 
25740
 
 
25741
# check prerequisites-1 success:    1
 
25742
# check COUNT(*) success:    1
 
25743
# check MIN/MAX(f_int1) success:    1
 
25744
# check MIN/MAX(f_int2) success:    1
 
25745
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25746
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25747
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25748
WHERE f_int1 IN (2,3);
 
25749
ERROR 23000: Can't write; duplicate key in table 't1'
 
25750
# check prerequisites-3 success:    1
 
25751
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
25752
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25753
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
25754
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
25755
WHERE f_int1 IN (2,3);
 
25756
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25757
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25758
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
25759
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
25760
WHERE f_int1 IN (2,3);
 
25761
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25762
# check read via f_int1 success: 1
 
25763
# check read via f_int2 success: 1
 
25764
        
 
25765
# check multiple-1 success:     1
 
25766
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25767
        
 
25768
# check multiple-2 success:     1
 
25769
INSERT INTO t1 SELECT * FROM t0_template
 
25770
WHERE MOD(f_int1,3) = 0;
 
25771
        
 
25772
# check multiple-3 success:     1
 
25773
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25774
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25775
AND @max_row_div2 + @max_row_div4;
 
25776
        
 
25777
# check multiple-4 success:     1
 
25778
DELETE FROM t1
 
25779
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25780
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25781
        
 
25782
# check multiple-5 success:     1
 
25783
SELECT COUNT(*) INTO @try_count FROM t0_template
 
25784
WHERE MOD(f_int1,3) = 0
 
25785
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25786
SELECT COUNT(*) INTO @clash_count
 
25787
FROM t1 INNER JOIN t0_template USING(f_int1)
 
25788
WHERE MOD(f_int1,3) = 0
 
25789
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25790
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25791
INSERT INTO t1
 
25792
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25793
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25794
f_charbig = '#SINGLE#';
 
25795
        
 
25796
# check single-1 success:       1
 
25797
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25798
INSERT INTO t1
 
25799
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25800
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25801
f_charbig = '#SINGLE#';
 
25802
        
 
25803
# check single-2 success:       1
 
25804
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25805
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25806
UPDATE t1 SET f_int1 = @cur_value2
 
25807
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25808
        
 
25809
# check single-3 success:       1
 
25810
SET @cur_value1= -1;
 
25811
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25812
UPDATE t1 SET f_int1 = @cur_value1
 
25813
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25814
        
 
25815
# check single-4 success:       1
 
25816
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25817
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25818
        
 
25819
# check single-5 success:       1
 
25820
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25821
        
 
25822
# check single-6 success:       1
 
25823
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25824
ERROR HY000: Table has no partition for value 2147483647
 
25825
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25826
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25827
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25828
f_charbig = '#NULL#';
 
25829
INSERT INTO t1
 
25830
SET f_int1 = NULL , f_int2 = -@max_row,
 
25831
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25832
f_charbig = '#NULL#';
 
25833
ERROR 23000: Column 'f_int1' cannot be null
 
25834
# check null success:    1
 
25835
DELETE FROM t1
 
25836
WHERE f_int1 = 0 AND f_int2 = 0
 
25837
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25838
AND f_charbig = '#NULL#';
 
25839
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25840
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25841
   FROM t0_template source_tab
 
25842
WHERE MOD(f_int1,3) = 0
 
25843
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
25844
ON DUPLICATE KEY
 
25845
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
25846
f_int2 = 2 * @max_row + source_tab.f_int1,
 
25847
f_charbig = 'was updated';
 
25848
        
 
25849
# check unique-1-a success:     1
 
25850
        
 
25851
# check unique-1-b success:     1
 
25852
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25853
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25854
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25855
f_charbig = CONCAT('===',f_char1,'===')
 
25856
WHERE f_charbig = 'was updated';
 
25857
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25858
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
25859
   FROM t0_template source_tab
 
25860
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25861
        
 
25862
# check replace success:        1
 
25863
DELETE FROM t1
 
25864
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
25865
DELETE FROM t1
 
25866
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
25867
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
25868
UPDATE t1 SET f_int2 = f_int1,
 
25869
f_char1 = CAST(f_int1 AS CHAR),
 
25870
f_char2 = CAST(f_int1 AS CHAR),
 
25871
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
25872
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
25873
SET AUTOCOMMIT= 0;
 
25874
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25875
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25876
FROM t0_template source_tab
 
25877
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25878
        
 
25879
# check transactions-1 success:         1
 
25880
COMMIT WORK;
 
25881
        
 
25882
# check transactions-2 success:         1
 
25883
ROLLBACK WORK;
 
25884
        
 
25885
# check transactions-3 success:         1
 
25886
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25887
COMMIT WORK;
 
25888
ROLLBACK WORK;
 
25889
        
 
25890
# check transactions-4 success:         1
 
25891
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25892
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25893
FROM t0_template source_tab
 
25894
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25895
        
 
25896
# check transactions-5 success:         1
 
25897
ROLLBACK WORK;
 
25898
        
 
25899
# check transactions-6 success:         1
 
25900
# INFO: Storage engine used for t1 seems to be transactional.
 
25901
COMMIT;
 
25902
        
 
25903
# check transactions-7 success:         1
 
25904
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25905
COMMIT WORK;
 
25906
SET @@session.sql_mode = 'traditional';
 
25907
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25908
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25909
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25910
'', '', 'was inserted' FROM t0_template
 
25911
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25912
ERROR 22012: Division by 0
 
25913
COMMIT;
 
25914
        
 
25915
# check transactions-8 success:         1
 
25916
# INFO: Storage engine used for t1 seems to be able to revert
 
25917
#       changes made by the failing statement.
 
25918
SET @@session.sql_mode = '';
 
25919
SET AUTOCOMMIT= 1;
 
25920
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25921
COMMIT WORK;
 
25922
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25923
        
 
25924
# check special-1 success:      1
 
25925
UPDATE t1 SET f_charbig = '';
 
25926
        
 
25927
# check special-2 success:      1
 
25928
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25929
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25930
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25931
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25932
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25933
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25934
'just inserted' FROM t0_template
 
25935
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25936
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25937
BEGIN
 
25938
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25939
f_charbig = 'updated by trigger'
 
25940
      WHERE f_int1 = new.f_int1;
 
25941
END|
 
25942
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25943
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25944
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25945
        
 
25946
# check trigger-1 success:      1
 
25947
DROP TRIGGER trg_1;
 
25948
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25949
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25950
f_charbig = 'just inserted'
 
25951
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25952
DELETE FROM t0_aux
 
25953
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25954
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25955
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25956
'just inserted' FROM t0_template
 
25957
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25958
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25959
BEGIN
 
25960
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25961
f_charbig = 'updated by trigger'
 
25962
      WHERE f_int1 = new.f_int1;
 
25963
END|
 
25964
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25965
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25966
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25967
        
 
25968
# check trigger-2 success:      1
 
25969
DROP TRIGGER trg_1;
 
25970
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25971
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25972
f_charbig = 'just inserted'
 
25973
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25974
DELETE FROM t0_aux
 
25975
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25976
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25977
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25978
'just inserted' FROM t0_template
 
25979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25980
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25981
BEGIN
 
25982
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25983
f_charbig = 'updated by trigger'
 
25984
      WHERE f_int1 = new.f_int1;
 
25985
END|
 
25986
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25987
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25988
        
 
25989
# check trigger-3 success:      1
 
25990
DROP TRIGGER trg_1;
 
25991
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25992
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25993
f_charbig = 'just inserted'
 
25994
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25995
DELETE FROM t0_aux
 
25996
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25997
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25998
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25999
'just inserted' FROM t0_template
 
26000
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26001
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26002
BEGIN
 
26003
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26004
f_charbig = 'updated by trigger'
 
26005
      WHERE f_int1 = - old.f_int1;
 
26006
END|
 
26007
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26008
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26009
        
 
26010
# check trigger-4 success:      1
 
26011
DROP TRIGGER trg_1;
 
26012
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26013
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26014
f_charbig = 'just inserted'
 
26015
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26016
DELETE FROM t0_aux
 
26017
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26018
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26019
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26020
'just inserted' FROM t0_template
 
26021
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26022
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26023
BEGIN
 
26024
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26025
f_charbig = 'updated by trigger'
 
26026
      WHERE f_int1 = new.f_int1;
 
26027
END|
 
26028
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26029
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26030
        
 
26031
# check trigger-5 success:      1
 
26032
DROP TRIGGER trg_1;
 
26033
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26034
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26035
f_charbig = 'just inserted'
 
26036
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26037
DELETE FROM t0_aux
 
26038
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26039
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26040
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26041
'just inserted' FROM t0_template
 
26042
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26043
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26044
BEGIN
 
26045
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26046
f_charbig = 'updated by trigger'
 
26047
      WHERE f_int1 = - old.f_int1;
 
26048
END|
 
26049
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26050
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26051
        
 
26052
# check trigger-6 success:      1
 
26053
DROP TRIGGER trg_1;
 
26054
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26055
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26056
f_charbig = 'just inserted'
 
26057
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26058
DELETE FROM t0_aux
 
26059
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26060
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26061
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26062
'just inserted' FROM t0_template
 
26063
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26064
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26065
BEGIN
 
26066
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26067
f_charbig = 'updated by trigger'
 
26068
      WHERE f_int1 = - old.f_int1;
 
26069
END|
 
26070
DELETE FROM t0_aux
 
26071
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26072
        
 
26073
# check trigger-7 success:      1
 
26074
DROP TRIGGER trg_1;
 
26075
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26076
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26077
f_charbig = 'just inserted'
 
26078
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26079
DELETE FROM t0_aux
 
26080
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26081
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26082
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26083
'just inserted' FROM t0_template
 
26084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26085
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26086
BEGIN
 
26087
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26088
f_charbig = 'updated by trigger'
 
26089
      WHERE f_int1 = - old.f_int1;
 
26090
END|
 
26091
DELETE FROM t0_aux
 
26092
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26093
        
 
26094
# check trigger-8 success:      1
 
26095
DROP TRIGGER trg_1;
 
26096
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26097
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26098
f_charbig = 'just inserted'
 
26099
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26100
DELETE FROM t0_aux
 
26101
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26102
DELETE FROM t1
 
26103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26104
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26105
BEGIN
 
26106
SET new.f_int1 = old.f_int1 + @max_row,
 
26107
new.f_int2 = old.f_int2 - @max_row,
 
26108
new.f_charbig = '####updated per update trigger####';
 
26109
END|
 
26110
UPDATE t1
 
26111
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26112
f_charbig = '####updated per update statement itself####';
 
26113
        
 
26114
# check trigger-9 success:      1
 
26115
DROP TRIGGER trg_2;
 
26116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26118
f_charbig = CONCAT('===',f_char1,'===');
 
26119
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26120
BEGIN
 
26121
SET new.f_int1 = new.f_int1 + @max_row,
 
26122
new.f_int2 = new.f_int2 - @max_row,
 
26123
new.f_charbig = '####updated per update trigger####';
 
26124
END|
 
26125
UPDATE t1
 
26126
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26127
f_charbig = '####updated per update statement itself####';
 
26128
        
 
26129
# check trigger-10 success:     1
 
26130
DROP TRIGGER trg_2;
 
26131
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26132
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26133
f_charbig = CONCAT('===',f_char1,'===');
 
26134
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26135
BEGIN
 
26136
SET new.f_int1 = @my_max1 + @counter,
 
26137
new.f_int2 = @my_min2 - @counter,
 
26138
new.f_charbig = '####updated per insert trigger####';
 
26139
SET @counter = @counter + 1;
 
26140
END|
 
26141
SET @counter = 1;
 
26142
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26143
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26144
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26145
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26147
ORDER BY f_int1;
 
26148
DROP TRIGGER trg_3;
 
26149
        
 
26150
# check trigger-11 success:     1
 
26151
DELETE FROM t1
 
26152
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26153
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26154
AND f_charbig = '####updated per insert trigger####';
 
26155
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26156
BEGIN
 
26157
SET new.f_int1 = @my_max1 + @counter,
 
26158
new.f_int2 = @my_min2 - @counter,
 
26159
new.f_charbig = '####updated per insert trigger####';
 
26160
SET @counter = @counter + 1;
 
26161
END|
 
26162
SET @counter = 1;
 
26163
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26164
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26165
SELECT CAST(f_int1 AS CHAR),
 
26166
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26167
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26168
ORDER BY f_int1;
 
26169
DROP TRIGGER trg_3;
 
26170
        
 
26171
# check trigger-12 success:     1
 
26172
DELETE FROM t1
 
26173
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26174
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26175
AND f_charbig = '####updated per insert trigger####';
 
26176
ANALYZE  TABLE t1;
 
26177
Table   Op      Msg_type        Msg_text
 
26178
test.t1 analyze status  OK
 
26179
CHECK    TABLE t1 EXTENDED;
 
26180
Table   Op      Msg_type        Msg_text
 
26181
test.t1 check   status  OK
 
26182
CHECKSUM TABLE t1 EXTENDED;
 
26183
Table   Checksum
 
26184
test.t1 <some_value>
 
26185
OPTIMIZE TABLE t1;
 
26186
Table   Op      Msg_type        Msg_text
 
26187
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
26188
test.t1 optimize        status  OK
 
26189
# check layout success:    1
 
26190
REPAIR   TABLE t1 EXTENDED;
 
26191
Table   Op      Msg_type        Msg_text
 
26192
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26193
# check layout success:    1
 
26194
TRUNCATE t1;
 
26195
        
 
26196
# check TRUNCATE success:       1
 
26197
# check layout success:    1
 
26198
# End usability test (inc/partition_check.inc)
 
26199
DROP TABLE t1;
 
26200
CREATE TABLE t1 (
 
26201
f_int1 INTEGER,
 
26202
f_int2 INTEGER,
 
26203
f_char1 CHAR(20),
 
26204
f_char2 CHAR(20),
 
26205
f_charbig VARCHAR(1000)
 
26206
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
26207
)
 
26208
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
26209
(PARTITION part1 VALUES LESS THAN (0)
 
26210
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
26211
PARTITION part2 VALUES LESS THAN (5)
 
26212
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
26213
PARTITION part3 VALUES LESS THAN (10)
 
26214
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
26215
PARTITION part4 VALUES LESS THAN (2147483646)
 
26216
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
26217
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26218
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
26219
# Start usability test (inc/partition_check.inc)
 
26220
create_command
 
26221
SHOW CREATE TABLE t1;
 
26222
Table   Create Table
 
26223
t1      CREATE TABLE `t1` (
 
26224
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
26225
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
26226
  `f_char1` char(20) DEFAULT NULL,
 
26227
  `f_char2` char(20) DEFAULT NULL,
 
26228
  `f_charbig` varchar(1000) DEFAULT NULL,
 
26229
  PRIMARY KEY (`f_int1`,`f_int2`),
 
26230
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
26231
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
26232
/*!50100 PARTITION BY RANGE (f_int1)
 
26233
SUBPARTITION BY KEY (f_int2)
 
26234
(PARTITION part1 VALUES LESS THAN (0)
 
26235
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
26236
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
26237
 PARTITION part2 VALUES LESS THAN (5)
 
26238
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
26239
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
26240
 PARTITION part3 VALUES LESS THAN (10)
 
26241
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
26242
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
26243
 PARTITION part4 VALUES LESS THAN (2147483646)
 
26244
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
26245
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
26246
 
 
26247
unified filelist
 
26248
t1.frm
 
26249
t1.par
 
26250
 
 
26251
# check prerequisites-1 success:    1
 
26252
# check COUNT(*) success:    1
 
26253
# check MIN/MAX(f_int1) success:    1
 
26254
# check MIN/MAX(f_int2) success:    1
 
26255
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26256
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26257
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26258
WHERE f_int1 IN (2,3);
 
26259
ERROR 23000: Can't write; duplicate key in table 't1'
 
26260
# check prerequisites-3 success:    1
 
26261
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
26262
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26263
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
26264
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
26265
WHERE f_int1 IN (2,3);
 
26266
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26267
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26268
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
26269
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
26270
WHERE f_int1 IN (2,3);
 
26271
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26272
# check read via f_int1 success: 1
 
26273
# check read via f_int2 success: 1
 
26274
        
 
26275
# check multiple-1 success:     1
 
26276
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26277
        
 
26278
# check multiple-2 success:     1
 
26279
INSERT INTO t1 SELECT * FROM t0_template
 
26280
WHERE MOD(f_int1,3) = 0;
 
26281
        
 
26282
# check multiple-3 success:     1
 
26283
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26284
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26285
AND @max_row_div2 + @max_row_div4;
 
26286
        
 
26287
# check multiple-4 success:     1
 
26288
DELETE FROM t1
 
26289
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26290
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26291
        
 
26292
# check multiple-5 success:     1
 
26293
SELECT COUNT(*) INTO @try_count FROM t0_template
 
26294
WHERE MOD(f_int1,3) = 0
 
26295
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26296
SELECT COUNT(*) INTO @clash_count
 
26297
FROM t1 INNER JOIN t0_template USING(f_int1)
 
26298
WHERE MOD(f_int1,3) = 0
 
26299
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26300
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26301
INSERT INTO t1
 
26302
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26303
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26304
f_charbig = '#SINGLE#';
 
26305
        
 
26306
# check single-1 success:       1
 
26307
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26308
INSERT INTO t1
 
26309
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26310
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26311
f_charbig = '#SINGLE#';
 
26312
        
 
26313
# check single-2 success:       1
 
26314
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26315
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26316
UPDATE t1 SET f_int1 = @cur_value2
 
26317
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26318
        
 
26319
# check single-3 success:       1
 
26320
SET @cur_value1= -1;
 
26321
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26322
UPDATE t1 SET f_int1 = @cur_value1
 
26323
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26324
        
 
26325
# check single-4 success:       1
 
26326
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26327
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26328
        
 
26329
# check single-5 success:       1
 
26330
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26331
        
 
26332
# check single-6 success:       1
 
26333
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26334
ERROR HY000: Table has no partition for value 2147483647
 
26335
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26336
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26337
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26338
f_charbig = '#NULL#';
 
26339
INSERT INTO t1
 
26340
SET f_int1 = NULL , f_int2 = -@max_row,
 
26341
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26342
f_charbig = '#NULL#';
 
26343
ERROR 23000: Column 'f_int1' cannot be null
 
26344
# check null success:    1
 
26345
DELETE FROM t1
 
26346
WHERE f_int1 = 0 AND f_int2 = 0
 
26347
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26348
AND f_charbig = '#NULL#';
 
26349
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26350
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26351
   FROM t0_template source_tab
 
26352
WHERE MOD(f_int1,3) = 0
 
26353
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
26354
ON DUPLICATE KEY
 
26355
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
26356
f_int2 = 2 * @max_row + source_tab.f_int1,
 
26357
f_charbig = 'was updated';
 
26358
        
 
26359
# check unique-1-a success:     1
 
26360
        
 
26361
# check unique-1-b success:     1
 
26362
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26363
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26364
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26365
f_charbig = CONCAT('===',f_char1,'===')
 
26366
WHERE f_charbig = 'was updated';
 
26367
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26368
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
26369
   FROM t0_template source_tab
 
26370
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26371
        
 
26372
# check replace success:        1
 
26373
DELETE FROM t1
 
26374
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
26375
DELETE FROM t1
 
26376
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
26377
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
26378
UPDATE t1 SET f_int2 = f_int1,
 
26379
f_char1 = CAST(f_int1 AS CHAR),
 
26380
f_char2 = CAST(f_int1 AS CHAR),
 
26381
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
26382
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
26383
SET AUTOCOMMIT= 0;
 
26384
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26385
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26386
FROM t0_template source_tab
 
26387
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26388
        
 
26389
# check transactions-1 success:         1
 
26390
COMMIT WORK;
 
26391
        
 
26392
# check transactions-2 success:         1
 
26393
ROLLBACK WORK;
 
26394
        
 
26395
# check transactions-3 success:         1
 
26396
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26397
COMMIT WORK;
 
26398
ROLLBACK WORK;
 
26399
        
 
26400
# check transactions-4 success:         1
 
26401
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26402
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26403
FROM t0_template source_tab
 
26404
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26405
        
 
26406
# check transactions-5 success:         1
 
26407
ROLLBACK WORK;
 
26408
        
 
26409
# check transactions-6 success:         1
 
26410
# INFO: Storage engine used for t1 seems to be transactional.
 
26411
COMMIT;
 
26412
        
 
26413
# check transactions-7 success:         1
 
26414
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26415
COMMIT WORK;
 
26416
SET @@session.sql_mode = 'traditional';
 
26417
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26418
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26419
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26420
'', '', 'was inserted' FROM t0_template
 
26421
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26422
ERROR 22012: Division by 0
 
26423
COMMIT;
 
26424
        
 
26425
# check transactions-8 success:         1
 
26426
# INFO: Storage engine used for t1 seems to be able to revert
 
26427
#       changes made by the failing statement.
 
26428
SET @@session.sql_mode = '';
 
26429
SET AUTOCOMMIT= 1;
 
26430
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26431
COMMIT WORK;
 
26432
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26433
        
 
26434
# check special-1 success:      1
 
26435
UPDATE t1 SET f_charbig = '';
 
26436
        
 
26437
# check special-2 success:      1
 
26438
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26439
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26440
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26441
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26442
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26443
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26444
'just inserted' FROM t0_template
 
26445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26446
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26447
BEGIN
 
26448
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26449
f_charbig = 'updated by trigger'
 
26450
      WHERE f_int1 = new.f_int1;
 
26451
END|
 
26452
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26453
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26454
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26455
        
 
26456
# check trigger-1 success:      1
 
26457
DROP TRIGGER trg_1;
 
26458
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26459
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26460
f_charbig = 'just inserted'
 
26461
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26462
DELETE FROM t0_aux
 
26463
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26464
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26465
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26466
'just inserted' FROM t0_template
 
26467
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26468
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26469
BEGIN
 
26470
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26471
f_charbig = 'updated by trigger'
 
26472
      WHERE f_int1 = new.f_int1;
 
26473
END|
 
26474
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26475
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26476
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26477
        
 
26478
# check trigger-2 success:      1
 
26479
DROP TRIGGER trg_1;
 
26480
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26481
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26482
f_charbig = 'just inserted'
 
26483
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26484
DELETE FROM t0_aux
 
26485
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26486
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26487
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26488
'just inserted' FROM t0_template
 
26489
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26490
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26491
BEGIN
 
26492
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26493
f_charbig = 'updated by trigger'
 
26494
      WHERE f_int1 = new.f_int1;
 
26495
END|
 
26496
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26497
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26498
        
 
26499
# check trigger-3 success:      1
 
26500
DROP TRIGGER trg_1;
 
26501
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26502
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26503
f_charbig = 'just inserted'
 
26504
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26505
DELETE FROM t0_aux
 
26506
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26507
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26508
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26509
'just inserted' FROM t0_template
 
26510
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26511
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26512
BEGIN
 
26513
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26514
f_charbig = 'updated by trigger'
 
26515
      WHERE f_int1 = - old.f_int1;
 
26516
END|
 
26517
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26518
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26519
        
 
26520
# check trigger-4 success:      1
 
26521
DROP TRIGGER trg_1;
 
26522
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26523
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26524
f_charbig = 'just inserted'
 
26525
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26526
DELETE FROM t0_aux
 
26527
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26528
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26529
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26530
'just inserted' FROM t0_template
 
26531
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26532
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26533
BEGIN
 
26534
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26535
f_charbig = 'updated by trigger'
 
26536
      WHERE f_int1 = new.f_int1;
 
26537
END|
 
26538
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26539
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26540
        
 
26541
# check trigger-5 success:      1
 
26542
DROP TRIGGER trg_1;
 
26543
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26544
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26545
f_charbig = 'just inserted'
 
26546
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26547
DELETE FROM t0_aux
 
26548
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26549
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26550
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26551
'just inserted' FROM t0_template
 
26552
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26553
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26554
BEGIN
 
26555
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26556
f_charbig = 'updated by trigger'
 
26557
      WHERE f_int1 = - old.f_int1;
 
26558
END|
 
26559
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26560
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26561
        
 
26562
# check trigger-6 success:      1
 
26563
DROP TRIGGER trg_1;
 
26564
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26565
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26566
f_charbig = 'just inserted'
 
26567
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26568
DELETE FROM t0_aux
 
26569
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26570
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26571
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26572
'just inserted' FROM t0_template
 
26573
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26574
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26575
BEGIN
 
26576
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26577
f_charbig = 'updated by trigger'
 
26578
      WHERE f_int1 = - old.f_int1;
 
26579
END|
 
26580
DELETE FROM t0_aux
 
26581
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26582
        
 
26583
# check trigger-7 success:      1
 
26584
DROP TRIGGER trg_1;
 
26585
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26586
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26587
f_charbig = 'just inserted'
 
26588
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26589
DELETE FROM t0_aux
 
26590
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26591
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26592
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26593
'just inserted' FROM t0_template
 
26594
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26595
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26596
BEGIN
 
26597
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26598
f_charbig = 'updated by trigger'
 
26599
      WHERE f_int1 = - old.f_int1;
 
26600
END|
 
26601
DELETE FROM t0_aux
 
26602
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26603
        
 
26604
# check trigger-8 success:      1
 
26605
DROP TRIGGER trg_1;
 
26606
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26607
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26608
f_charbig = 'just inserted'
 
26609
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26610
DELETE FROM t0_aux
 
26611
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26612
DELETE FROM t1
 
26613
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26614
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26615
BEGIN
 
26616
SET new.f_int1 = old.f_int1 + @max_row,
 
26617
new.f_int2 = old.f_int2 - @max_row,
 
26618
new.f_charbig = '####updated per update trigger####';
 
26619
END|
 
26620
UPDATE t1
 
26621
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26622
f_charbig = '####updated per update statement itself####';
 
26623
        
 
26624
# check trigger-9 success:      1
 
26625
DROP TRIGGER trg_2;
 
26626
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26627
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26628
f_charbig = CONCAT('===',f_char1,'===');
 
26629
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26630
BEGIN
 
26631
SET new.f_int1 = new.f_int1 + @max_row,
 
26632
new.f_int2 = new.f_int2 - @max_row,
 
26633
new.f_charbig = '####updated per update trigger####';
 
26634
END|
 
26635
UPDATE t1
 
26636
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26637
f_charbig = '####updated per update statement itself####';
 
26638
        
 
26639
# check trigger-10 success:     1
 
26640
DROP TRIGGER trg_2;
 
26641
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26642
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26643
f_charbig = CONCAT('===',f_char1,'===');
 
26644
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26645
BEGIN
 
26646
SET new.f_int1 = @my_max1 + @counter,
 
26647
new.f_int2 = @my_min2 - @counter,
 
26648
new.f_charbig = '####updated per insert trigger####';
 
26649
SET @counter = @counter + 1;
 
26650
END|
 
26651
SET @counter = 1;
 
26652
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26653
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26654
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26655
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26656
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26657
ORDER BY f_int1;
 
26658
DROP TRIGGER trg_3;
 
26659
        
 
26660
# check trigger-11 success:     1
 
26661
DELETE FROM t1
 
26662
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26663
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26664
AND f_charbig = '####updated per insert trigger####';
 
26665
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26666
BEGIN
 
26667
SET new.f_int1 = @my_max1 + @counter,
 
26668
new.f_int2 = @my_min2 - @counter,
 
26669
new.f_charbig = '####updated per insert trigger####';
 
26670
SET @counter = @counter + 1;
 
26671
END|
 
26672
SET @counter = 1;
 
26673
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26674
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26675
SELECT CAST(f_int1 AS CHAR),
 
26676
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26677
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26678
ORDER BY f_int1;
 
26679
DROP TRIGGER trg_3;
 
26680
        
 
26681
# check trigger-12 success:     1
 
26682
DELETE FROM t1
 
26683
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26684
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26685
AND f_charbig = '####updated per insert trigger####';
 
26686
ANALYZE  TABLE t1;
 
26687
Table   Op      Msg_type        Msg_text
 
26688
test.t1 analyze status  OK
 
26689
CHECK    TABLE t1 EXTENDED;
 
26690
Table   Op      Msg_type        Msg_text
 
26691
test.t1 check   status  OK
 
26692
CHECKSUM TABLE t1 EXTENDED;
 
26693
Table   Checksum
 
26694
test.t1 <some_value>
 
26695
OPTIMIZE TABLE t1;
 
26696
Table   Op      Msg_type        Msg_text
 
26697
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
26698
test.t1 optimize        status  OK
 
26699
# check layout success:    1
 
26700
REPAIR   TABLE t1 EXTENDED;
 
26701
Table   Op      Msg_type        Msg_text
 
26702
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26703
# check layout success:    1
 
26704
TRUNCATE t1;
 
26705
        
 
26706
# check TRUNCATE success:       1
 
26707
# check layout success:    1
 
26708
# End usability test (inc/partition_check.inc)
 
26709
DROP TABLE t1;
 
26710
CREATE TABLE t1 (
 
26711
f_int1 INTEGER,
 
26712
f_int2 INTEGER,
 
26713
f_char1 CHAR(20),
 
26714
f_char2 CHAR(20),
 
26715
f_charbig VARCHAR(1000)
 
26716
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
26717
)
 
26718
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
26719
(PARTITION part1 VALUES IN (0)
 
26720
(SUBPARTITION sp11, SUBPARTITION sp12),
 
26721
PARTITION part2 VALUES IN (1)
 
26722
(SUBPARTITION sp21, SUBPARTITION sp22),
 
26723
PARTITION part3 VALUES IN (2)
 
26724
(SUBPARTITION sp31, SUBPARTITION sp32),
 
26725
PARTITION part4 VALUES IN (NULL)
 
26726
(SUBPARTITION sp41, SUBPARTITION sp42));
 
26727
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26728
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
26729
# Start usability test (inc/partition_check.inc)
 
26730
create_command
 
26731
SHOW CREATE TABLE t1;
 
26732
Table   Create Table
 
26733
t1      CREATE TABLE `t1` (
 
26734
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
26735
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
26736
  `f_char1` char(20) DEFAULT NULL,
 
26737
  `f_char2` char(20) DEFAULT NULL,
 
26738
  `f_charbig` varchar(1000) DEFAULT NULL,
 
26739
  PRIMARY KEY (`f_int1`,`f_int2`),
 
26740
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
26741
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
26742
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
26743
SUBPARTITION BY HASH (f_int2 + 1)
 
26744
(PARTITION part1 VALUES IN (0)
 
26745
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
26746
  SUBPARTITION sp12 ENGINE = InnoDB),
 
26747
 PARTITION part2 VALUES IN (1)
 
26748
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
26749
  SUBPARTITION sp22 ENGINE = InnoDB),
 
26750
 PARTITION part3 VALUES IN (2)
 
26751
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
26752
  SUBPARTITION sp32 ENGINE = InnoDB),
 
26753
 PARTITION part4 VALUES IN (NULL)
 
26754
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
26755
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
26756
 
 
26757
unified filelist
 
26758
t1.frm
 
26759
t1.par
 
26760
 
 
26761
# check prerequisites-1 success:    1
 
26762
# check COUNT(*) success:    1
 
26763
# check MIN/MAX(f_int1) success:    1
 
26764
# check MIN/MAX(f_int2) success:    1
 
26765
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26766
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26767
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26768
WHERE f_int1 IN (2,3);
 
26769
ERROR 23000: Can't write; duplicate key in table 't1'
 
26770
# check prerequisites-3 success:    1
 
26771
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
26772
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26773
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
26774
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
26775
WHERE f_int1 IN (2,3);
 
26776
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26777
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26778
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
26779
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
26780
WHERE f_int1 IN (2,3);
 
26781
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26782
# check read via f_int1 success: 1
 
26783
# check read via f_int2 success: 1
 
26784
        
 
26785
# check multiple-1 success:     1
 
26786
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26787
        
 
26788
# check multiple-2 success:     1
 
26789
INSERT INTO t1 SELECT * FROM t0_template
 
26790
WHERE MOD(f_int1,3) = 0;
 
26791
        
 
26792
# check multiple-3 success:     1
 
26793
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26794
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26795
AND @max_row_div2 + @max_row_div4;
 
26796
        
 
26797
# check multiple-4 success:     1
 
26798
DELETE FROM t1
 
26799
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26800
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26801
        
 
26802
# check multiple-5 success:     1
 
26803
SELECT COUNT(*) INTO @try_count FROM t0_template
 
26804
WHERE MOD(f_int1,3) = 0
 
26805
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26806
SELECT COUNT(*) INTO @clash_count
 
26807
FROM t1 INNER JOIN t0_template USING(f_int1)
 
26808
WHERE MOD(f_int1,3) = 0
 
26809
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26810
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26811
INSERT INTO t1
 
26812
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26813
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26814
f_charbig = '#SINGLE#';
 
26815
        
 
26816
# check single-1 success:       1
 
26817
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26818
INSERT INTO t1
 
26819
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26820
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26821
f_charbig = '#SINGLE#';
 
26822
        
 
26823
# check single-2 success:       1
 
26824
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26825
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26826
UPDATE t1 SET f_int1 = @cur_value2
 
26827
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26828
        
 
26829
# check single-3 success:       1
 
26830
SET @cur_value1= -1;
 
26831
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26832
UPDATE t1 SET f_int1 = @cur_value1
 
26833
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26834
        
 
26835
# check single-4 success:       1
 
26836
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26837
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26838
        
 
26839
# check single-5 success:       1
 
26840
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26841
        
 
26842
# check single-6 success:       1
 
26843
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26844
        
 
26845
# check single-7 success:       1
 
26846
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
26847
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26848
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26849
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26850
f_charbig = '#NULL#';
 
26851
INSERT INTO t1
 
26852
SET f_int1 = NULL , f_int2 = -@max_row,
 
26853
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26854
f_charbig = '#NULL#';
 
26855
ERROR 23000: Column 'f_int1' cannot be null
 
26856
# check null success:    1
 
26857
DELETE FROM t1
 
26858
WHERE f_int1 = 0 AND f_int2 = 0
 
26859
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26860
AND f_charbig = '#NULL#';
 
26861
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26862
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26863
   FROM t0_template source_tab
 
26864
WHERE MOD(f_int1,3) = 0
 
26865
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
26866
ON DUPLICATE KEY
 
26867
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
26868
f_int2 = 2 * @max_row + source_tab.f_int1,
 
26869
f_charbig = 'was updated';
 
26870
        
 
26871
# check unique-1-a success:     1
 
26872
        
 
26873
# check unique-1-b success:     1
 
26874
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26875
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26876
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26877
f_charbig = CONCAT('===',f_char1,'===')
 
26878
WHERE f_charbig = 'was updated';
 
26879
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26880
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
26881
   FROM t0_template source_tab
 
26882
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26883
        
 
26884
# check replace success:        1
 
26885
DELETE FROM t1
 
26886
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
26887
DELETE FROM t1
 
26888
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
26889
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
26890
UPDATE t1 SET f_int2 = f_int1,
 
26891
f_char1 = CAST(f_int1 AS CHAR),
 
26892
f_char2 = CAST(f_int1 AS CHAR),
 
26893
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
26894
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
26895
SET AUTOCOMMIT= 0;
 
26896
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26897
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26898
FROM t0_template source_tab
 
26899
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26900
        
 
26901
# check transactions-1 success:         1
 
26902
COMMIT WORK;
 
26903
        
 
26904
# check transactions-2 success:         1
 
26905
ROLLBACK WORK;
 
26906
        
 
26907
# check transactions-3 success:         1
 
26908
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26909
COMMIT WORK;
 
26910
ROLLBACK WORK;
 
26911
        
 
26912
# check transactions-4 success:         1
 
26913
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26914
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26915
FROM t0_template source_tab
 
26916
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26917
        
 
26918
# check transactions-5 success:         1
 
26919
ROLLBACK WORK;
 
26920
        
 
26921
# check transactions-6 success:         1
 
26922
# INFO: Storage engine used for t1 seems to be transactional.
 
26923
COMMIT;
 
26924
        
 
26925
# check transactions-7 success:         1
 
26926
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26927
COMMIT WORK;
 
26928
SET @@session.sql_mode = 'traditional';
 
26929
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26930
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26931
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26932
'', '', 'was inserted' FROM t0_template
 
26933
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26934
ERROR 22012: Division by 0
 
26935
COMMIT;
 
26936
        
 
26937
# check transactions-8 success:         1
 
26938
# INFO: Storage engine used for t1 seems to be able to revert
 
26939
#       changes made by the failing statement.
 
26940
SET @@session.sql_mode = '';
 
26941
SET AUTOCOMMIT= 1;
 
26942
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26943
COMMIT WORK;
 
26944
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26945
        
 
26946
# check special-1 success:      1
 
26947
UPDATE t1 SET f_charbig = '';
 
26948
        
 
26949
# check special-2 success:      1
 
26950
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26951
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26952
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26953
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26954
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26955
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26956
'just inserted' FROM t0_template
 
26957
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26958
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26959
BEGIN
 
26960
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26961
f_charbig = 'updated by trigger'
 
26962
      WHERE f_int1 = new.f_int1;
 
26963
END|
 
26964
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26965
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26966
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26967
        
 
26968
# check trigger-1 success:      1
 
26969
DROP TRIGGER trg_1;
 
26970
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26971
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26972
f_charbig = 'just inserted'
 
26973
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26974
DELETE FROM t0_aux
 
26975
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26976
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26977
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26978
'just inserted' FROM t0_template
 
26979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26980
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26981
BEGIN
 
26982
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26983
f_charbig = 'updated by trigger'
 
26984
      WHERE f_int1 = new.f_int1;
 
26985
END|
 
26986
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26987
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26988
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26989
        
 
26990
# check trigger-2 success:      1
 
26991
DROP TRIGGER trg_1;
 
26992
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26993
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26994
f_charbig = 'just inserted'
 
26995
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26996
DELETE FROM t0_aux
 
26997
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26998
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26999
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27000
'just inserted' FROM t0_template
 
27001
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27002
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27003
BEGIN
 
27004
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27005
f_charbig = 'updated by trigger'
 
27006
      WHERE f_int1 = new.f_int1;
 
27007
END|
 
27008
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27009
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27010
        
 
27011
# check trigger-3 success:      1
 
27012
DROP TRIGGER trg_1;
 
27013
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27014
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27015
f_charbig = 'just inserted'
 
27016
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27017
DELETE FROM t0_aux
 
27018
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27019
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27020
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27021
'just inserted' FROM t0_template
 
27022
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27023
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27024
BEGIN
 
27025
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27026
f_charbig = 'updated by trigger'
 
27027
      WHERE f_int1 = - old.f_int1;
 
27028
END|
 
27029
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27030
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27031
        
 
27032
# check trigger-4 success:      1
 
27033
DROP TRIGGER trg_1;
 
27034
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27035
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27036
f_charbig = 'just inserted'
 
27037
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27038
DELETE FROM t0_aux
 
27039
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27040
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27041
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27042
'just inserted' FROM t0_template
 
27043
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27044
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27045
BEGIN
 
27046
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27047
f_charbig = 'updated by trigger'
 
27048
      WHERE f_int1 = new.f_int1;
 
27049
END|
 
27050
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27051
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27052
        
 
27053
# check trigger-5 success:      1
 
27054
DROP TRIGGER trg_1;
 
27055
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27056
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27057
f_charbig = 'just inserted'
 
27058
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27059
DELETE FROM t0_aux
 
27060
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27062
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27063
'just inserted' FROM t0_template
 
27064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27065
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27066
BEGIN
 
27067
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27068
f_charbig = 'updated by trigger'
 
27069
      WHERE f_int1 = - old.f_int1;
 
27070
END|
 
27071
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27072
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27073
        
 
27074
# check trigger-6 success:      1
 
27075
DROP TRIGGER trg_1;
 
27076
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27077
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27078
f_charbig = 'just inserted'
 
27079
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27080
DELETE FROM t0_aux
 
27081
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27082
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27083
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27084
'just inserted' FROM t0_template
 
27085
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27086
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27087
BEGIN
 
27088
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27089
f_charbig = 'updated by trigger'
 
27090
      WHERE f_int1 = - old.f_int1;
 
27091
END|
 
27092
DELETE FROM t0_aux
 
27093
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27094
        
 
27095
# check trigger-7 success:      1
 
27096
DROP TRIGGER trg_1;
 
27097
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27098
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27099
f_charbig = 'just inserted'
 
27100
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27101
DELETE FROM t0_aux
 
27102
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27103
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27104
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27105
'just inserted' FROM t0_template
 
27106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27107
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27108
BEGIN
 
27109
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27110
f_charbig = 'updated by trigger'
 
27111
      WHERE f_int1 = - old.f_int1;
 
27112
END|
 
27113
DELETE FROM t0_aux
 
27114
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27115
        
 
27116
# check trigger-8 success:      1
 
27117
DROP TRIGGER trg_1;
 
27118
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27119
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27120
f_charbig = 'just inserted'
 
27121
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27122
DELETE FROM t0_aux
 
27123
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27124
DELETE FROM t1
 
27125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27126
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27127
BEGIN
 
27128
SET new.f_int1 = old.f_int1 + @max_row,
 
27129
new.f_int2 = old.f_int2 - @max_row,
 
27130
new.f_charbig = '####updated per update trigger####';
 
27131
END|
 
27132
UPDATE t1
 
27133
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27134
f_charbig = '####updated per update statement itself####';
 
27135
        
 
27136
# check trigger-9 success:      1
 
27137
DROP TRIGGER trg_2;
 
27138
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27139
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27140
f_charbig = CONCAT('===',f_char1,'===');
 
27141
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27142
BEGIN
 
27143
SET new.f_int1 = new.f_int1 + @max_row,
 
27144
new.f_int2 = new.f_int2 - @max_row,
 
27145
new.f_charbig = '####updated per update trigger####';
 
27146
END|
 
27147
UPDATE t1
 
27148
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27149
f_charbig = '####updated per update statement itself####';
 
27150
        
 
27151
# check trigger-10 success:     1
 
27152
DROP TRIGGER trg_2;
 
27153
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27154
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27155
f_charbig = CONCAT('===',f_char1,'===');
 
27156
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27157
BEGIN
 
27158
SET new.f_int1 = @my_max1 + @counter,
 
27159
new.f_int2 = @my_min2 - @counter,
 
27160
new.f_charbig = '####updated per insert trigger####';
 
27161
SET @counter = @counter + 1;
 
27162
END|
 
27163
SET @counter = 1;
 
27164
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27165
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27166
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27167
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27169
ORDER BY f_int1;
 
27170
DROP TRIGGER trg_3;
 
27171
        
 
27172
# check trigger-11 success:     1
 
27173
DELETE FROM t1
 
27174
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27175
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27176
AND f_charbig = '####updated per insert trigger####';
 
27177
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27178
BEGIN
 
27179
SET new.f_int1 = @my_max1 + @counter,
 
27180
new.f_int2 = @my_min2 - @counter,
 
27181
new.f_charbig = '####updated per insert trigger####';
 
27182
SET @counter = @counter + 1;
 
27183
END|
 
27184
SET @counter = 1;
 
27185
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27186
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27187
SELECT CAST(f_int1 AS CHAR),
 
27188
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27189
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27190
ORDER BY f_int1;
 
27191
DROP TRIGGER trg_3;
 
27192
        
 
27193
# check trigger-12 success:     1
 
27194
DELETE FROM t1
 
27195
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27196
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27197
AND f_charbig = '####updated per insert trigger####';
 
27198
ANALYZE  TABLE t1;
 
27199
Table   Op      Msg_type        Msg_text
 
27200
test.t1 analyze status  OK
 
27201
CHECK    TABLE t1 EXTENDED;
 
27202
Table   Op      Msg_type        Msg_text
 
27203
test.t1 check   status  OK
 
27204
CHECKSUM TABLE t1 EXTENDED;
 
27205
Table   Checksum
 
27206
test.t1 <some_value>
 
27207
OPTIMIZE TABLE t1;
 
27208
Table   Op      Msg_type        Msg_text
 
27209
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
27210
test.t1 optimize        status  OK
 
27211
# check layout success:    1
 
27212
REPAIR   TABLE t1 EXTENDED;
 
27213
Table   Op      Msg_type        Msg_text
 
27214
test.t1 repair  note    The storage engine for the table doesn't support repair
 
27215
# check layout success:    1
 
27216
TRUNCATE t1;
 
27217
        
 
27218
# check TRUNCATE success:       1
 
27219
# check layout success:    1
 
27220
# End usability test (inc/partition_check.inc)
 
27221
DROP TABLE t1;
 
27222
CREATE TABLE t1 (
 
27223
f_int1 INTEGER,
 
27224
f_int2 INTEGER,
 
27225
f_char1 CHAR(20),
 
27226
f_char2 CHAR(20),
 
27227
f_charbig VARCHAR(1000)
 
27228
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
27229
)
 
27230
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
27231
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
27232
(PARTITION part1 VALUES IN (0),
 
27233
PARTITION part2 VALUES IN (1),
 
27234
PARTITION part3 VALUES IN (NULL));
 
27235
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27236
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
27237
# Start usability test (inc/partition_check.inc)
 
27238
create_command
 
27239
SHOW CREATE TABLE t1;
 
27240
Table   Create Table
 
27241
t1      CREATE TABLE `t1` (
 
27242
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
27243
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
27244
  `f_char1` char(20) DEFAULT NULL,
 
27245
  `f_char2` char(20) DEFAULT NULL,
 
27246
  `f_charbig` varchar(1000) DEFAULT NULL,
 
27247
  PRIMARY KEY (`f_int1`,`f_int2`),
 
27248
  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
 
27249
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
27250
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
27251
SUBPARTITION BY KEY (f_int2)
 
27252
SUBPARTITIONS 3
 
27253
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
27254
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
27255
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
27256
 
 
27257
unified filelist
 
27258
t1.frm
 
27259
t1.par
 
27260
 
 
27261
# check prerequisites-1 success:    1
 
27262
# check COUNT(*) success:    1
 
27263
# check MIN/MAX(f_int1) success:    1
 
27264
# check MIN/MAX(f_int2) success:    1
 
27265
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27266
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27267
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27268
WHERE f_int1 IN (2,3);
 
27269
ERROR 23000: Can't write; duplicate key in table 't1'
 
27270
# check prerequisites-3 success:    1
 
27271
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
27272
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27273
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
27274
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
27275
WHERE f_int1 IN (2,3);
 
27276
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27277
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27278
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
27279
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
27280
WHERE f_int1 IN (2,3);
 
27281
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27282
# check read via f_int1 success: 1
 
27283
# check read via f_int2 success: 1
 
27284
        
 
27285
# check multiple-1 success:     1
 
27286
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27287
        
 
27288
# check multiple-2 success:     1
 
27289
INSERT INTO t1 SELECT * FROM t0_template
 
27290
WHERE MOD(f_int1,3) = 0;
 
27291
        
 
27292
# check multiple-3 success:     1
 
27293
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27294
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27295
AND @max_row_div2 + @max_row_div4;
 
27296
        
 
27297
# check multiple-4 success:     1
 
27298
DELETE FROM t1
 
27299
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27300
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27301
        
 
27302
# check multiple-5 success:     1
 
27303
SELECT COUNT(*) INTO @try_count FROM t0_template
 
27304
WHERE MOD(f_int1,3) = 0
 
27305
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27306
SELECT COUNT(*) INTO @clash_count
 
27307
FROM t1 INNER JOIN t0_template USING(f_int1)
 
27308
WHERE MOD(f_int1,3) = 0
 
27309
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27310
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27311
INSERT INTO t1
 
27312
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27313
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27314
f_charbig = '#SINGLE#';
 
27315
        
 
27316
# check single-1 success:       1
 
27317
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27318
INSERT INTO t1
 
27319
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27320
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27321
f_charbig = '#SINGLE#';
 
27322
        
 
27323
# check single-2 success:       1
 
27324
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27325
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27326
UPDATE t1 SET f_int1 = @cur_value2
 
27327
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27328
        
 
27329
# check single-3 success:       1
 
27330
SET @cur_value1= -1;
 
27331
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27332
UPDATE t1 SET f_int1 = @cur_value1
 
27333
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27334
        
 
27335
# check single-4 success:       1
 
27336
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27337
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27338
        
 
27339
# check single-5 success:       1
 
27340
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27341
        
 
27342
# check single-6 success:       1
 
27343
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27344
        
 
27345
# check single-7 success:       1
 
27346
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
27347
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27348
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27349
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27350
f_charbig = '#NULL#';
 
27351
INSERT INTO t1
 
27352
SET f_int1 = NULL , f_int2 = -@max_row,
 
27353
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27354
f_charbig = '#NULL#';
 
27355
ERROR 23000: Column 'f_int1' cannot be null
 
27356
# check null success:    1
 
27357
DELETE FROM t1
 
27358
WHERE f_int1 = 0 AND f_int2 = 0
 
27359
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27360
AND f_charbig = '#NULL#';
 
27361
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27362
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27363
   FROM t0_template source_tab
 
27364
WHERE MOD(f_int1,3) = 0
 
27365
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
27366
ON DUPLICATE KEY
 
27367
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
27368
f_int2 = 2 * @max_row + source_tab.f_int1,
 
27369
f_charbig = 'was updated';
 
27370
        
 
27371
# check unique-1-a success:     1
 
27372
        
 
27373
# check unique-1-b success:     1
 
27374
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27375
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27376
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27377
f_charbig = CONCAT('===',f_char1,'===')
 
27378
WHERE f_charbig = 'was updated';
 
27379
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27380
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
27381
   FROM t0_template source_tab
 
27382
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27383
        
 
27384
# check replace success:        1
 
27385
DELETE FROM t1
 
27386
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
27387
DELETE FROM t1
 
27388
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
27389
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
27390
UPDATE t1 SET f_int2 = f_int1,
 
27391
f_char1 = CAST(f_int1 AS CHAR),
 
27392
f_char2 = CAST(f_int1 AS CHAR),
 
27393
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
27394
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
27395
SET AUTOCOMMIT= 0;
 
27396
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27397
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27398
FROM t0_template source_tab
 
27399
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27400
        
 
27401
# check transactions-1 success:         1
 
27402
COMMIT WORK;
 
27403
        
 
27404
# check transactions-2 success:         1
 
27405
ROLLBACK WORK;
 
27406
        
 
27407
# check transactions-3 success:         1
 
27408
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27409
COMMIT WORK;
 
27410
ROLLBACK WORK;
 
27411
        
 
27412
# check transactions-4 success:         1
 
27413
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27414
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27415
FROM t0_template source_tab
 
27416
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27417
        
 
27418
# check transactions-5 success:         1
 
27419
ROLLBACK WORK;
 
27420
        
 
27421
# check transactions-6 success:         1
 
27422
# INFO: Storage engine used for t1 seems to be transactional.
 
27423
COMMIT;
 
27424
        
 
27425
# check transactions-7 success:         1
 
27426
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27427
COMMIT WORK;
 
27428
SET @@session.sql_mode = 'traditional';
 
27429
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27430
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27431
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27432
'', '', 'was inserted' FROM t0_template
 
27433
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27434
ERROR 22012: Division by 0
 
27435
COMMIT;
 
27436
        
 
27437
# check transactions-8 success:         1
 
27438
# INFO: Storage engine used for t1 seems to be able to revert
 
27439
#       changes made by the failing statement.
 
27440
SET @@session.sql_mode = '';
 
27441
SET AUTOCOMMIT= 1;
 
27442
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27443
COMMIT WORK;
 
27444
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27445
        
 
27446
# check special-1 success:      1
 
27447
UPDATE t1 SET f_charbig = '';
 
27448
        
 
27449
# check special-2 success:      1
 
27450
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27451
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27452
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27454
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27455
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27456
'just inserted' FROM t0_template
 
27457
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27458
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27459
BEGIN
 
27460
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27461
f_charbig = 'updated by trigger'
 
27462
      WHERE f_int1 = new.f_int1;
 
27463
END|
 
27464
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27465
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27466
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27467
        
 
27468
# check trigger-1 success:      1
 
27469
DROP TRIGGER trg_1;
 
27470
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27471
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27472
f_charbig = 'just inserted'
 
27473
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27474
DELETE FROM t0_aux
 
27475
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27476
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27477
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27478
'just inserted' FROM t0_template
 
27479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27480
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27481
BEGIN
 
27482
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27483
f_charbig = 'updated by trigger'
 
27484
      WHERE f_int1 = new.f_int1;
 
27485
END|
 
27486
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27487
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27488
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27489
        
 
27490
# check trigger-2 success:      1
 
27491
DROP TRIGGER trg_1;
 
27492
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27493
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27494
f_charbig = 'just inserted'
 
27495
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27496
DELETE FROM t0_aux
 
27497
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27498
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27499
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27500
'just inserted' FROM t0_template
 
27501
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27502
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27503
BEGIN
 
27504
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27505
f_charbig = 'updated by trigger'
 
27506
      WHERE f_int1 = new.f_int1;
 
27507
END|
 
27508
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27509
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27510
        
 
27511
# check trigger-3 success:      1
 
27512
DROP TRIGGER trg_1;
 
27513
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27514
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27515
f_charbig = 'just inserted'
 
27516
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27517
DELETE FROM t0_aux
 
27518
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27520
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27521
'just inserted' FROM t0_template
 
27522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27523
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27524
BEGIN
 
27525
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27526
f_charbig = 'updated by trigger'
 
27527
      WHERE f_int1 = - old.f_int1;
 
27528
END|
 
27529
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27530
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27531
        
 
27532
# check trigger-4 success:      1
 
27533
DROP TRIGGER trg_1;
 
27534
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27535
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27536
f_charbig = 'just inserted'
 
27537
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27538
DELETE FROM t0_aux
 
27539
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27540
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27541
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27542
'just inserted' FROM t0_template
 
27543
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27544
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27545
BEGIN
 
27546
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27547
f_charbig = 'updated by trigger'
 
27548
      WHERE f_int1 = new.f_int1;
 
27549
END|
 
27550
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27551
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27552
        
 
27553
# check trigger-5 success:      1
 
27554
DROP TRIGGER trg_1;
 
27555
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27556
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27557
f_charbig = 'just inserted'
 
27558
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27559
DELETE FROM t0_aux
 
27560
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27561
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27562
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27563
'just inserted' FROM t0_template
 
27564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27565
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27566
BEGIN
 
27567
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27568
f_charbig = 'updated by trigger'
 
27569
      WHERE f_int1 = - old.f_int1;
 
27570
END|
 
27571
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27572
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27573
        
 
27574
# check trigger-6 success:      1
 
27575
DROP TRIGGER trg_1;
 
27576
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27577
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27578
f_charbig = 'just inserted'
 
27579
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27580
DELETE FROM t0_aux
 
27581
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27582
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27583
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27584
'just inserted' FROM t0_template
 
27585
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27586
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27587
BEGIN
 
27588
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27589
f_charbig = 'updated by trigger'
 
27590
      WHERE f_int1 = - old.f_int1;
 
27591
END|
 
27592
DELETE FROM t0_aux
 
27593
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27594
        
 
27595
# check trigger-7 success:      1
 
27596
DROP TRIGGER trg_1;
 
27597
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27598
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27599
f_charbig = 'just inserted'
 
27600
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27601
DELETE FROM t0_aux
 
27602
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27604
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27605
'just inserted' FROM t0_template
 
27606
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27607
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27608
BEGIN
 
27609
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27610
f_charbig = 'updated by trigger'
 
27611
      WHERE f_int1 = - old.f_int1;
 
27612
END|
 
27613
DELETE FROM t0_aux
 
27614
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27615
        
 
27616
# check trigger-8 success:      1
 
27617
DROP TRIGGER trg_1;
 
27618
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27619
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27620
f_charbig = 'just inserted'
 
27621
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27622
DELETE FROM t0_aux
 
27623
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27624
DELETE FROM t1
 
27625
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27626
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27627
BEGIN
 
27628
SET new.f_int1 = old.f_int1 + @max_row,
 
27629
new.f_int2 = old.f_int2 - @max_row,
 
27630
new.f_charbig = '####updated per update trigger####';
 
27631
END|
 
27632
UPDATE t1
 
27633
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27634
f_charbig = '####updated per update statement itself####';
 
27635
        
 
27636
# check trigger-9 success:      1
 
27637
DROP TRIGGER trg_2;
 
27638
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27639
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27640
f_charbig = CONCAT('===',f_char1,'===');
 
27641
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27642
BEGIN
 
27643
SET new.f_int1 = new.f_int1 + @max_row,
 
27644
new.f_int2 = new.f_int2 - @max_row,
 
27645
new.f_charbig = '####updated per update trigger####';
 
27646
END|
 
27647
UPDATE t1
 
27648
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27649
f_charbig = '####updated per update statement itself####';
 
27650
        
 
27651
# check trigger-10 success:     1
 
27652
DROP TRIGGER trg_2;
 
27653
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27654
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27655
f_charbig = CONCAT('===',f_char1,'===');
 
27656
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27657
BEGIN
 
27658
SET new.f_int1 = @my_max1 + @counter,
 
27659
new.f_int2 = @my_min2 - @counter,
 
27660
new.f_charbig = '####updated per insert trigger####';
 
27661
SET @counter = @counter + 1;
 
27662
END|
 
27663
SET @counter = 1;
 
27664
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27665
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27666
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27667
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27669
ORDER BY f_int1;
 
27670
DROP TRIGGER trg_3;
 
27671
        
 
27672
# check trigger-11 success:     1
 
27673
DELETE FROM t1
 
27674
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27675
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27676
AND f_charbig = '####updated per insert trigger####';
 
27677
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27678
BEGIN
 
27679
SET new.f_int1 = @my_max1 + @counter,
 
27680
new.f_int2 = @my_min2 - @counter,
 
27681
new.f_charbig = '####updated per insert trigger####';
 
27682
SET @counter = @counter + 1;
 
27683
END|
 
27684
SET @counter = 1;
 
27685
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27686
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27687
SELECT CAST(f_int1 AS CHAR),
 
27688
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27690
ORDER BY f_int1;
 
27691
DROP TRIGGER trg_3;
 
27692
        
 
27693
# check trigger-12 success:     1
 
27694
DELETE FROM t1
 
27695
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27696
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27697
AND f_charbig = '####updated per insert trigger####';
 
27698
ANALYZE  TABLE t1;
 
27699
Table   Op      Msg_type        Msg_text
 
27700
test.t1 analyze status  OK
 
27701
CHECK    TABLE t1 EXTENDED;
 
27702
Table   Op      Msg_type        Msg_text
 
27703
test.t1 check   status  OK
 
27704
CHECKSUM TABLE t1 EXTENDED;
 
27705
Table   Checksum
 
27706
test.t1 <some_value>
 
27707
OPTIMIZE TABLE t1;
 
27708
Table   Op      Msg_type        Msg_text
 
27709
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
27710
test.t1 optimize        status  OK
 
27711
# check layout success:    1
 
27712
REPAIR   TABLE t1 EXTENDED;
 
27713
Table   Op      Msg_type        Msg_text
 
27714
test.t1 repair  note    The storage engine for the table doesn't support repair
 
27715
# check layout success:    1
 
27716
TRUNCATE t1;
 
27717
        
 
27718
# check TRUNCATE success:       1
 
27719
# check layout success:    1
 
27720
# End usability test (inc/partition_check.inc)
 
27721
DROP TABLE t1;
 
27722
DROP TABLE IF EXISTS t1;
 
27723
CREATE TABLE t1 (
 
27724
f_int1 INTEGER,
 
27725
f_int2 INTEGER,
 
27726
f_char1 CHAR(20),
 
27727
f_char2 CHAR(20),
 
27728
f_charbig VARCHAR(1000)
 
27729
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
27730
)
 
27731
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
27732
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27733
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
27734
# Start usability test (inc/partition_check.inc)
 
27735
create_command
 
27736
SHOW CREATE TABLE t1;
 
27737
Table   Create Table
 
27738
t1      CREATE TABLE `t1` (
 
27739
  `f_int1` int(11) DEFAULT NULL,
 
27740
  `f_int2` int(11) DEFAULT NULL,
 
27741
  `f_char1` char(20) DEFAULT NULL,
 
27742
  `f_char2` char(20) DEFAULT NULL,
 
27743
  `f_charbig` varchar(1000) DEFAULT NULL,
 
27744
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
27745
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
27746
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
27747
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
27748
PARTITIONS 2 */
 
27749
 
 
27750
unified filelist
 
27751
t1.frm
 
27752
t1.par
 
27753
 
 
27754
# check prerequisites-1 success:    1
 
27755
# check COUNT(*) success:    1
 
27756
# check MIN/MAX(f_int1) success:    1
 
27757
# check MIN/MAX(f_int2) success:    1
 
27758
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27759
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27760
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27761
WHERE f_int1 IN (2,3);
 
27762
ERROR 23000: Can't write; duplicate key in table 't1'
 
27763
# check prerequisites-3 success:    1
 
27764
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
27765
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27766
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
27767
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
27768
WHERE f_int1 IN (2,3);
 
27769
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27770
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27771
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
27772
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
27773
WHERE f_int1 IN (2,3);
 
27774
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27775
# check read via f_int1 success: 1
 
27776
# check read via f_int2 success: 1
 
27777
        
 
27778
# check multiple-1 success:     1
 
27779
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27780
        
 
27781
# check multiple-2 success:     1
 
27782
INSERT INTO t1 SELECT * FROM t0_template
 
27783
WHERE MOD(f_int1,3) = 0;
 
27784
        
 
27785
# check multiple-3 success:     1
 
27786
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27787
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27788
AND @max_row_div2 + @max_row_div4;
 
27789
        
 
27790
# check multiple-4 success:     1
 
27791
DELETE FROM t1
 
27792
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27793
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27794
        
 
27795
# check multiple-5 success:     1
 
27796
SELECT COUNT(*) INTO @try_count FROM t0_template
 
27797
WHERE MOD(f_int1,3) = 0
 
27798
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27799
SELECT COUNT(*) INTO @clash_count
 
27800
FROM t1 INNER JOIN t0_template USING(f_int1)
 
27801
WHERE MOD(f_int1,3) = 0
 
27802
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27803
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27804
INSERT INTO t1
 
27805
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27806
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27807
f_charbig = '#SINGLE#';
 
27808
        
 
27809
# check single-1 success:       1
 
27810
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27811
INSERT INTO t1
 
27812
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27813
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27814
f_charbig = '#SINGLE#';
 
27815
        
 
27816
# check single-2 success:       1
 
27817
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27818
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27819
UPDATE t1 SET f_int1 = @cur_value2
 
27820
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27821
        
 
27822
# check single-3 success:       1
 
27823
SET @cur_value1= -1;
 
27824
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27825
UPDATE t1 SET f_int1 = @cur_value1
 
27826
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27827
        
 
27828
# check single-4 success:       1
 
27829
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27830
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27831
        
 
27832
# check single-5 success:       1
 
27833
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27834
        
 
27835
# check single-6 success:       1
 
27836
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27837
        
 
27838
# check single-7 success:       1
 
27839
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
27840
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27841
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27842
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27843
f_charbig = '#NULL#';
 
27844
INSERT INTO t1
 
27845
SET f_int1 = NULL , f_int2 = -@max_row,
 
27846
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27847
f_charbig = '#NULL#';
 
27848
# check null success:    1
 
27849
        
 
27850
# check null-1 success:         1
 
27851
UPDATE t1 SET f_int1 = -@max_row
 
27852
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27853
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27854
        
 
27855
# check null-2 success:         1
 
27856
UPDATE t1 SET f_int1 = NULL
 
27857
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27858
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27859
        
 
27860
# check null-3 success:         1
 
27861
DELETE FROM t1
 
27862
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27863
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27864
        
 
27865
# check null-4 success:         1
 
27866
DELETE FROM t1
 
27867
WHERE f_int1 = 0 AND f_int2 = 0
 
27868
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27869
AND f_charbig = '#NULL#';
 
27870
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27871
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27872
   FROM t0_template source_tab
 
27873
WHERE MOD(f_int1,3) = 0
 
27874
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
27875
ON DUPLICATE KEY
 
27876
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
27877
f_int2 = 2 * @max_row + source_tab.f_int1,
 
27878
f_charbig = 'was updated';
 
27879
        
 
27880
# check unique-1-a success:     1
 
27881
        
 
27882
# check unique-1-b success:     1
 
27883
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27884
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27885
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27886
f_charbig = CONCAT('===',f_char1,'===')
 
27887
WHERE f_charbig = 'was updated';
 
27888
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27889
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
27890
   FROM t0_template source_tab
 
27891
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27892
        
 
27893
# check replace success:        1
 
27894
DELETE FROM t1
 
27895
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
27896
DELETE FROM t1
 
27897
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
27898
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
27899
UPDATE t1 SET f_int2 = f_int1,
 
27900
f_char1 = CAST(f_int1 AS CHAR),
 
27901
f_char2 = CAST(f_int1 AS CHAR),
 
27902
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
27903
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
27904
SET AUTOCOMMIT= 0;
 
27905
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27906
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27907
FROM t0_template source_tab
 
27908
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27909
        
 
27910
# check transactions-1 success:         1
 
27911
COMMIT WORK;
 
27912
        
 
27913
# check transactions-2 success:         1
 
27914
ROLLBACK WORK;
 
27915
        
 
27916
# check transactions-3 success:         1
 
27917
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27918
COMMIT WORK;
 
27919
ROLLBACK WORK;
 
27920
        
 
27921
# check transactions-4 success:         1
 
27922
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27923
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27924
FROM t0_template source_tab
 
27925
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27926
        
 
27927
# check transactions-5 success:         1
 
27928
ROLLBACK WORK;
 
27929
        
 
27930
# check transactions-6 success:         1
 
27931
# INFO: Storage engine used for t1 seems to be transactional.
 
27932
COMMIT;
 
27933
        
 
27934
# check transactions-7 success:         1
 
27935
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27936
COMMIT WORK;
 
27937
SET @@session.sql_mode = 'traditional';
 
27938
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27939
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27940
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27941
'', '', 'was inserted' FROM t0_template
 
27942
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27943
ERROR 22012: Division by 0
 
27944
COMMIT;
 
27945
        
 
27946
# check transactions-8 success:         1
 
27947
# INFO: Storage engine used for t1 seems to be able to revert
 
27948
#       changes made by the failing statement.
 
27949
SET @@session.sql_mode = '';
 
27950
SET AUTOCOMMIT= 1;
 
27951
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27952
COMMIT WORK;
 
27953
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27954
        
 
27955
# check special-1 success:      1
 
27956
UPDATE t1 SET f_charbig = '';
 
27957
        
 
27958
# check special-2 success:      1
 
27959
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27960
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27961
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27962
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27963
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27964
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27965
'just inserted' FROM t0_template
 
27966
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27967
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27968
BEGIN
 
27969
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27970
f_charbig = 'updated by trigger'
 
27971
      WHERE f_int1 = new.f_int1;
 
27972
END|
 
27973
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27974
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27975
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27976
        
 
27977
# check trigger-1 success:      1
 
27978
DROP TRIGGER trg_1;
 
27979
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27980
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27981
f_charbig = 'just inserted'
 
27982
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27983
DELETE FROM t0_aux
 
27984
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27985
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27986
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27987
'just inserted' FROM t0_template
 
27988
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27989
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27990
BEGIN
 
27991
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27992
f_charbig = 'updated by trigger'
 
27993
      WHERE f_int1 = new.f_int1;
 
27994
END|
 
27995
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27996
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27997
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27998
        
 
27999
# check trigger-2 success:      1
 
28000
DROP TRIGGER trg_1;
 
28001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28003
f_charbig = 'just inserted'
 
28004
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28005
DELETE FROM t0_aux
 
28006
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28007
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28008
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28009
'just inserted' FROM t0_template
 
28010
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28011
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28012
BEGIN
 
28013
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28014
f_charbig = 'updated by trigger'
 
28015
      WHERE f_int1 = new.f_int1;
 
28016
END|
 
28017
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28018
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28019
        
 
28020
# check trigger-3 success:      1
 
28021
DROP TRIGGER trg_1;
 
28022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28024
f_charbig = 'just inserted'
 
28025
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28026
DELETE FROM t0_aux
 
28027
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28028
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28029
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28030
'just inserted' FROM t0_template
 
28031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28032
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28033
BEGIN
 
28034
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28035
f_charbig = 'updated by trigger'
 
28036
      WHERE f_int1 = - old.f_int1;
 
28037
END|
 
28038
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28039
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28040
        
 
28041
# check trigger-4 success:      1
 
28042
DROP TRIGGER trg_1;
 
28043
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28044
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28045
f_charbig = 'just inserted'
 
28046
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28047
DELETE FROM t0_aux
 
28048
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28050
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28051
'just inserted' FROM t0_template
 
28052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28053
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28054
BEGIN
 
28055
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28056
f_charbig = 'updated by trigger'
 
28057
      WHERE f_int1 = new.f_int1;
 
28058
END|
 
28059
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28060
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28061
        
 
28062
# check trigger-5 success:      1
 
28063
DROP TRIGGER trg_1;
 
28064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28065
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28066
f_charbig = 'just inserted'
 
28067
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28068
DELETE FROM t0_aux
 
28069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28072
'just inserted' FROM t0_template
 
28073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28074
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28075
BEGIN
 
28076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28077
f_charbig = 'updated by trigger'
 
28078
      WHERE f_int1 = - old.f_int1;
 
28079
END|
 
28080
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28081
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28082
        
 
28083
# check trigger-6 success:      1
 
28084
DROP TRIGGER trg_1;
 
28085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28087
f_charbig = 'just inserted'
 
28088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28089
DELETE FROM t0_aux
 
28090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28093
'just inserted' FROM t0_template
 
28094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28095
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28096
BEGIN
 
28097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28098
f_charbig = 'updated by trigger'
 
28099
      WHERE f_int1 = - old.f_int1;
 
28100
END|
 
28101
DELETE FROM t0_aux
 
28102
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28103
        
 
28104
# check trigger-7 success:      1
 
28105
DROP TRIGGER trg_1;
 
28106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28107
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28108
f_charbig = 'just inserted'
 
28109
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28110
DELETE FROM t0_aux
 
28111
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28112
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28113
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28114
'just inserted' FROM t0_template
 
28115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28116
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28117
BEGIN
 
28118
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28119
f_charbig = 'updated by trigger'
 
28120
      WHERE f_int1 = - old.f_int1;
 
28121
END|
 
28122
DELETE FROM t0_aux
 
28123
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28124
        
 
28125
# check trigger-8 success:      1
 
28126
DROP TRIGGER trg_1;
 
28127
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28128
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28129
f_charbig = 'just inserted'
 
28130
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28131
DELETE FROM t0_aux
 
28132
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28133
DELETE FROM t1
 
28134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28135
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28136
BEGIN
 
28137
SET new.f_int1 = old.f_int1 + @max_row,
 
28138
new.f_int2 = old.f_int2 - @max_row,
 
28139
new.f_charbig = '####updated per update trigger####';
 
28140
END|
 
28141
UPDATE t1
 
28142
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28143
f_charbig = '####updated per update statement itself####';
 
28144
        
 
28145
# check trigger-9 success:      1
 
28146
DROP TRIGGER trg_2;
 
28147
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28148
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28149
f_charbig = CONCAT('===',f_char1,'===');
 
28150
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28151
BEGIN
 
28152
SET new.f_int1 = new.f_int1 + @max_row,
 
28153
new.f_int2 = new.f_int2 - @max_row,
 
28154
new.f_charbig = '####updated per update trigger####';
 
28155
END|
 
28156
UPDATE t1
 
28157
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28158
f_charbig = '####updated per update statement itself####';
 
28159
        
 
28160
# check trigger-10 success:     1
 
28161
DROP TRIGGER trg_2;
 
28162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28164
f_charbig = CONCAT('===',f_char1,'===');
 
28165
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28166
BEGIN
 
28167
SET new.f_int1 = @my_max1 + @counter,
 
28168
new.f_int2 = @my_min2 - @counter,
 
28169
new.f_charbig = '####updated per insert trigger####';
 
28170
SET @counter = @counter + 1;
 
28171
END|
 
28172
SET @counter = 1;
 
28173
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28174
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28175
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28176
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28178
ORDER BY f_int1;
 
28179
DROP TRIGGER trg_3;
 
28180
        
 
28181
# check trigger-11 success:     1
 
28182
DELETE FROM t1
 
28183
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28184
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28185
AND f_charbig = '####updated per insert trigger####';
 
28186
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28187
BEGIN
 
28188
SET new.f_int1 = @my_max1 + @counter,
 
28189
new.f_int2 = @my_min2 - @counter,
 
28190
new.f_charbig = '####updated per insert trigger####';
 
28191
SET @counter = @counter + 1;
 
28192
END|
 
28193
SET @counter = 1;
 
28194
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28195
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28196
SELECT CAST(f_int1 AS CHAR),
 
28197
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28198
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28199
ORDER BY f_int1;
 
28200
DROP TRIGGER trg_3;
 
28201
        
 
28202
# check trigger-12 success:     1
 
28203
DELETE FROM t1
 
28204
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28205
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28206
AND f_charbig = '####updated per insert trigger####';
 
28207
ANALYZE  TABLE t1;
 
28208
Table   Op      Msg_type        Msg_text
 
28209
test.t1 analyze status  OK
 
28210
CHECK    TABLE t1 EXTENDED;
 
28211
Table   Op      Msg_type        Msg_text
 
28212
test.t1 check   status  OK
 
28213
CHECKSUM TABLE t1 EXTENDED;
 
28214
Table   Checksum
 
28215
test.t1 <some_value>
 
28216
OPTIMIZE TABLE t1;
 
28217
Table   Op      Msg_type        Msg_text
 
28218
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
28219
test.t1 optimize        status  OK
 
28220
# check layout success:    1
 
28221
REPAIR   TABLE t1 EXTENDED;
 
28222
Table   Op      Msg_type        Msg_text
 
28223
test.t1 repair  note    The storage engine for the table doesn't support repair
 
28224
# check layout success:    1
 
28225
TRUNCATE t1;
 
28226
        
 
28227
# check TRUNCATE success:       1
 
28228
# check layout success:    1
 
28229
# End usability test (inc/partition_check.inc)
 
28230
DROP TABLE t1;
 
28231
CREATE TABLE t1 (
 
28232
f_int1 INTEGER,
 
28233
f_int2 INTEGER,
 
28234
f_char1 CHAR(20),
 
28235
f_char2 CHAR(20),
 
28236
f_charbig VARCHAR(1000)
 
28237
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
28238
)
 
28239
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
28240
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28241
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
28242
# Start usability test (inc/partition_check.inc)
 
28243
create_command
 
28244
SHOW CREATE TABLE t1;
 
28245
Table   Create Table
 
28246
t1      CREATE TABLE `t1` (
 
28247
  `f_int1` int(11) DEFAULT NULL,
 
28248
  `f_int2` int(11) DEFAULT NULL,
 
28249
  `f_char1` char(20) DEFAULT NULL,
 
28250
  `f_char2` char(20) DEFAULT NULL,
 
28251
  `f_charbig` varchar(1000) DEFAULT NULL,
 
28252
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
28253
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
28254
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
28255
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
28256
PARTITIONS 5 */
 
28257
 
 
28258
unified filelist
 
28259
t1.frm
 
28260
t1.par
 
28261
 
 
28262
# check prerequisites-1 success:    1
 
28263
# check COUNT(*) success:    1
 
28264
# check MIN/MAX(f_int1) success:    1
 
28265
# check MIN/MAX(f_int2) success:    1
 
28266
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28267
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28268
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28269
WHERE f_int1 IN (2,3);
 
28270
ERROR 23000: Can't write; duplicate key in table 't1'
 
28271
# check prerequisites-3 success:    1
 
28272
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
28273
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28274
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
28275
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
28276
WHERE f_int1 IN (2,3);
 
28277
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28278
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28279
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
28280
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
28281
WHERE f_int1 IN (2,3);
 
28282
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28283
# check read via f_int1 success: 1
 
28284
# check read via f_int2 success: 1
 
28285
        
 
28286
# check multiple-1 success:     1
 
28287
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28288
        
 
28289
# check multiple-2 success:     1
 
28290
INSERT INTO t1 SELECT * FROM t0_template
 
28291
WHERE MOD(f_int1,3) = 0;
 
28292
        
 
28293
# check multiple-3 success:     1
 
28294
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28295
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28296
AND @max_row_div2 + @max_row_div4;
 
28297
        
 
28298
# check multiple-4 success:     1
 
28299
DELETE FROM t1
 
28300
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28301
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28302
        
 
28303
# check multiple-5 success:     1
 
28304
SELECT COUNT(*) INTO @try_count FROM t0_template
 
28305
WHERE MOD(f_int1,3) = 0
 
28306
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28307
SELECT COUNT(*) INTO @clash_count
 
28308
FROM t1 INNER JOIN t0_template USING(f_int1)
 
28309
WHERE MOD(f_int1,3) = 0
 
28310
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28311
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28312
INSERT INTO t1
 
28313
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28314
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28315
f_charbig = '#SINGLE#';
 
28316
        
 
28317
# check single-1 success:       1
 
28318
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28319
INSERT INTO t1
 
28320
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28321
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28322
f_charbig = '#SINGLE#';
 
28323
        
 
28324
# check single-2 success:       1
 
28325
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28326
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28327
UPDATE t1 SET f_int1 = @cur_value2
 
28328
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28329
        
 
28330
# check single-3 success:       1
 
28331
SET @cur_value1= -1;
 
28332
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28333
UPDATE t1 SET f_int1 = @cur_value1
 
28334
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28335
        
 
28336
# check single-4 success:       1
 
28337
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28338
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28339
        
 
28340
# check single-5 success:       1
 
28341
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28342
        
 
28343
# check single-6 success:       1
 
28344
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28345
        
 
28346
# check single-7 success:       1
 
28347
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
28348
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28349
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28350
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28351
f_charbig = '#NULL#';
 
28352
INSERT INTO t1
 
28353
SET f_int1 = NULL , f_int2 = -@max_row,
 
28354
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28355
f_charbig = '#NULL#';
 
28356
# check null success:    1
 
28357
        
 
28358
# check null-1 success:         1
 
28359
UPDATE t1 SET f_int1 = -@max_row
 
28360
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28361
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28362
        
 
28363
# check null-2 success:         1
 
28364
UPDATE t1 SET f_int1 = NULL
 
28365
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28366
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28367
        
 
28368
# check null-3 success:         1
 
28369
DELETE FROM t1
 
28370
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28371
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28372
        
 
28373
# check null-4 success:         1
 
28374
DELETE FROM t1
 
28375
WHERE f_int1 = 0 AND f_int2 = 0
 
28376
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28377
AND f_charbig = '#NULL#';
 
28378
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28379
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28380
   FROM t0_template source_tab
 
28381
WHERE MOD(f_int1,3) = 0
 
28382
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
28383
ON DUPLICATE KEY
 
28384
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
28385
f_int2 = 2 * @max_row + source_tab.f_int1,
 
28386
f_charbig = 'was updated';
 
28387
        
 
28388
# check unique-1-a success:     1
 
28389
        
 
28390
# check unique-1-b success:     1
 
28391
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28392
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28393
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28394
f_charbig = CONCAT('===',f_char1,'===')
 
28395
WHERE f_charbig = 'was updated';
 
28396
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28397
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
28398
   FROM t0_template source_tab
 
28399
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28400
        
 
28401
# check replace success:        1
 
28402
DELETE FROM t1
 
28403
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
28404
DELETE FROM t1
 
28405
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
28406
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
28407
UPDATE t1 SET f_int2 = f_int1,
 
28408
f_char1 = CAST(f_int1 AS CHAR),
 
28409
f_char2 = CAST(f_int1 AS CHAR),
 
28410
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
28411
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
28412
SET AUTOCOMMIT= 0;
 
28413
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28414
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28415
FROM t0_template source_tab
 
28416
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28417
        
 
28418
# check transactions-1 success:         1
 
28419
COMMIT WORK;
 
28420
        
 
28421
# check transactions-2 success:         1
 
28422
ROLLBACK WORK;
 
28423
        
 
28424
# check transactions-3 success:         1
 
28425
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28426
COMMIT WORK;
 
28427
ROLLBACK WORK;
 
28428
        
 
28429
# check transactions-4 success:         1
 
28430
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28431
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28432
FROM t0_template source_tab
 
28433
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28434
        
 
28435
# check transactions-5 success:         1
 
28436
ROLLBACK WORK;
 
28437
        
 
28438
# check transactions-6 success:         1
 
28439
# INFO: Storage engine used for t1 seems to be transactional.
 
28440
COMMIT;
 
28441
        
 
28442
# check transactions-7 success:         1
 
28443
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28444
COMMIT WORK;
 
28445
SET @@session.sql_mode = 'traditional';
 
28446
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28447
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28448
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28449
'', '', 'was inserted' FROM t0_template
 
28450
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28451
ERROR 22012: Division by 0
 
28452
COMMIT;
 
28453
        
 
28454
# check transactions-8 success:         1
 
28455
# INFO: Storage engine used for t1 seems to be able to revert
 
28456
#       changes made by the failing statement.
 
28457
SET @@session.sql_mode = '';
 
28458
SET AUTOCOMMIT= 1;
 
28459
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28460
COMMIT WORK;
 
28461
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28462
        
 
28463
# check special-1 success:      1
 
28464
UPDATE t1 SET f_charbig = '';
 
28465
        
 
28466
# check special-2 success:      1
 
28467
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28468
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28469
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28471
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28472
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28473
'just inserted' FROM t0_template
 
28474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28475
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28476
BEGIN
 
28477
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28478
f_charbig = 'updated by trigger'
 
28479
      WHERE f_int1 = new.f_int1;
 
28480
END|
 
28481
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28482
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28483
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28484
        
 
28485
# check trigger-1 success:      1
 
28486
DROP TRIGGER trg_1;
 
28487
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28488
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28489
f_charbig = 'just inserted'
 
28490
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28491
DELETE FROM t0_aux
 
28492
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28493
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28494
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28495
'just inserted' FROM t0_template
 
28496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28497
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28498
BEGIN
 
28499
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28500
f_charbig = 'updated by trigger'
 
28501
      WHERE f_int1 = new.f_int1;
 
28502
END|
 
28503
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28504
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28506
        
 
28507
# check trigger-2 success:      1
 
28508
DROP TRIGGER trg_1;
 
28509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28510
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28511
f_charbig = 'just inserted'
 
28512
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28513
DELETE FROM t0_aux
 
28514
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28515
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28516
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28517
'just inserted' FROM t0_template
 
28518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28519
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28520
BEGIN
 
28521
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28522
f_charbig = 'updated by trigger'
 
28523
      WHERE f_int1 = new.f_int1;
 
28524
END|
 
28525
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28526
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28527
        
 
28528
# check trigger-3 success:      1
 
28529
DROP TRIGGER trg_1;
 
28530
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28531
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28532
f_charbig = 'just inserted'
 
28533
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28534
DELETE FROM t0_aux
 
28535
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28536
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28537
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28538
'just inserted' FROM t0_template
 
28539
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28540
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28541
BEGIN
 
28542
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28543
f_charbig = 'updated by trigger'
 
28544
      WHERE f_int1 = - old.f_int1;
 
28545
END|
 
28546
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28547
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28548
        
 
28549
# check trigger-4 success:      1
 
28550
DROP TRIGGER trg_1;
 
28551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28552
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28553
f_charbig = 'just inserted'
 
28554
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28555
DELETE FROM t0_aux
 
28556
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28558
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28559
'just inserted' FROM t0_template
 
28560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28561
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28562
BEGIN
 
28563
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28564
f_charbig = 'updated by trigger'
 
28565
      WHERE f_int1 = new.f_int1;
 
28566
END|
 
28567
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28568
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28569
        
 
28570
# check trigger-5 success:      1
 
28571
DROP TRIGGER trg_1;
 
28572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28574
f_charbig = 'just inserted'
 
28575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28576
DELETE FROM t0_aux
 
28577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28580
'just inserted' FROM t0_template
 
28581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28582
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28583
BEGIN
 
28584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28585
f_charbig = 'updated by trigger'
 
28586
      WHERE f_int1 = - old.f_int1;
 
28587
END|
 
28588
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28589
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28590
        
 
28591
# check trigger-6 success:      1
 
28592
DROP TRIGGER trg_1;
 
28593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28595
f_charbig = 'just inserted'
 
28596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28597
DELETE FROM t0_aux
 
28598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28601
'just inserted' FROM t0_template
 
28602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28603
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28604
BEGIN
 
28605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28606
f_charbig = 'updated by trigger'
 
28607
      WHERE f_int1 = - old.f_int1;
 
28608
END|
 
28609
DELETE FROM t0_aux
 
28610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28611
        
 
28612
# check trigger-7 success:      1
 
28613
DROP TRIGGER trg_1;
 
28614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28616
f_charbig = 'just inserted'
 
28617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28618
DELETE FROM t0_aux
 
28619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28622
'just inserted' FROM t0_template
 
28623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28624
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28625
BEGIN
 
28626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28627
f_charbig = 'updated by trigger'
 
28628
      WHERE f_int1 = - old.f_int1;
 
28629
END|
 
28630
DELETE FROM t0_aux
 
28631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28632
        
 
28633
# check trigger-8 success:      1
 
28634
DROP TRIGGER trg_1;
 
28635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28637
f_charbig = 'just inserted'
 
28638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28639
DELETE FROM t0_aux
 
28640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28641
DELETE FROM t1
 
28642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28643
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28644
BEGIN
 
28645
SET new.f_int1 = old.f_int1 + @max_row,
 
28646
new.f_int2 = old.f_int2 - @max_row,
 
28647
new.f_charbig = '####updated per update trigger####';
 
28648
END|
 
28649
UPDATE t1
 
28650
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28651
f_charbig = '####updated per update statement itself####';
 
28652
        
 
28653
# check trigger-9 success:      1
 
28654
DROP TRIGGER trg_2;
 
28655
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28656
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28657
f_charbig = CONCAT('===',f_char1,'===');
 
28658
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28659
BEGIN
 
28660
SET new.f_int1 = new.f_int1 + @max_row,
 
28661
new.f_int2 = new.f_int2 - @max_row,
 
28662
new.f_charbig = '####updated per update trigger####';
 
28663
END|
 
28664
UPDATE t1
 
28665
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28666
f_charbig = '####updated per update statement itself####';
 
28667
        
 
28668
# check trigger-10 success:     1
 
28669
DROP TRIGGER trg_2;
 
28670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28672
f_charbig = CONCAT('===',f_char1,'===');
 
28673
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28674
BEGIN
 
28675
SET new.f_int1 = @my_max1 + @counter,
 
28676
new.f_int2 = @my_min2 - @counter,
 
28677
new.f_charbig = '####updated per insert trigger####';
 
28678
SET @counter = @counter + 1;
 
28679
END|
 
28680
SET @counter = 1;
 
28681
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28682
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28683
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28684
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28686
ORDER BY f_int1;
 
28687
DROP TRIGGER trg_3;
 
28688
        
 
28689
# check trigger-11 success:     1
 
28690
DELETE FROM t1
 
28691
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28692
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28693
AND f_charbig = '####updated per insert trigger####';
 
28694
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28695
BEGIN
 
28696
SET new.f_int1 = @my_max1 + @counter,
 
28697
new.f_int2 = @my_min2 - @counter,
 
28698
new.f_charbig = '####updated per insert trigger####';
 
28699
SET @counter = @counter + 1;
 
28700
END|
 
28701
SET @counter = 1;
 
28702
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28703
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28704
SELECT CAST(f_int1 AS CHAR),
 
28705
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28707
ORDER BY f_int1;
 
28708
DROP TRIGGER trg_3;
 
28709
        
 
28710
# check trigger-12 success:     1
 
28711
DELETE FROM t1
 
28712
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28713
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28714
AND f_charbig = '####updated per insert trigger####';
 
28715
ANALYZE  TABLE t1;
 
28716
Table   Op      Msg_type        Msg_text
 
28717
test.t1 analyze status  OK
 
28718
CHECK    TABLE t1 EXTENDED;
 
28719
Table   Op      Msg_type        Msg_text
 
28720
test.t1 check   status  OK
 
28721
CHECKSUM TABLE t1 EXTENDED;
 
28722
Table   Checksum
 
28723
test.t1 <some_value>
 
28724
OPTIMIZE TABLE t1;
 
28725
Table   Op      Msg_type        Msg_text
 
28726
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
28727
test.t1 optimize        status  OK
 
28728
# check layout success:    1
 
28729
REPAIR   TABLE t1 EXTENDED;
 
28730
Table   Op      Msg_type        Msg_text
 
28731
test.t1 repair  note    The storage engine for the table doesn't support repair
 
28732
# check layout success:    1
 
28733
TRUNCATE t1;
 
28734
        
 
28735
# check TRUNCATE success:       1
 
28736
# check layout success:    1
 
28737
# End usability test (inc/partition_check.inc)
 
28738
DROP TABLE t1;
 
28739
CREATE TABLE t1 (
 
28740
f_int1 INTEGER,
 
28741
f_int2 INTEGER,
 
28742
f_char1 CHAR(20),
 
28743
f_char2 CHAR(20),
 
28744
f_charbig VARCHAR(1000)
 
28745
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
28746
)
 
28747
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
28748
(PARTITION part_3 VALUES IN (-3),
 
28749
PARTITION part_2 VALUES IN (-2),
 
28750
PARTITION part_1 VALUES IN (-1),
 
28751
PARTITION part_N VALUES IN (NULL),
 
28752
PARTITION part0 VALUES IN (0),
 
28753
PARTITION part1 VALUES IN (1),
 
28754
PARTITION part2 VALUES IN (2),
 
28755
PARTITION part3 VALUES IN (3));
 
28756
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28757
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
28758
# Start usability test (inc/partition_check.inc)
 
28759
create_command
 
28760
SHOW CREATE TABLE t1;
 
28761
Table   Create Table
 
28762
t1      CREATE TABLE `t1` (
 
28763
  `f_int1` int(11) DEFAULT NULL,
 
28764
  `f_int2` int(11) DEFAULT NULL,
 
28765
  `f_char1` char(20) DEFAULT NULL,
 
28766
  `f_char2` char(20) DEFAULT NULL,
 
28767
  `f_charbig` varchar(1000) DEFAULT NULL,
 
28768
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
28769
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
28770
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
28771
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
28772
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
28773
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
28774
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
28775
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
28776
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
28777
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
28778
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
28779
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
28780
 
 
28781
unified filelist
 
28782
t1.frm
 
28783
t1.par
 
28784
 
 
28785
# check prerequisites-1 success:    1
 
28786
# check COUNT(*) success:    1
 
28787
# check MIN/MAX(f_int1) success:    1
 
28788
# check MIN/MAX(f_int2) success:    1
 
28789
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28790
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28791
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28792
WHERE f_int1 IN (2,3);
 
28793
ERROR 23000: Can't write; duplicate key in table 't1'
 
28794
# check prerequisites-3 success:    1
 
28795
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
28796
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28797
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
28798
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
28799
WHERE f_int1 IN (2,3);
 
28800
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28801
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28802
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
28803
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
28804
WHERE f_int1 IN (2,3);
 
28805
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28806
# check read via f_int1 success: 1
 
28807
# check read via f_int2 success: 1
 
28808
        
 
28809
# check multiple-1 success:     1
 
28810
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28811
        
 
28812
# check multiple-2 success:     1
 
28813
INSERT INTO t1 SELECT * FROM t0_template
 
28814
WHERE MOD(f_int1,3) = 0;
 
28815
        
 
28816
# check multiple-3 success:     1
 
28817
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28818
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28819
AND @max_row_div2 + @max_row_div4;
 
28820
        
 
28821
# check multiple-4 success:     1
 
28822
DELETE FROM t1
 
28823
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28824
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28825
        
 
28826
# check multiple-5 success:     1
 
28827
SELECT COUNT(*) INTO @try_count FROM t0_template
 
28828
WHERE MOD(f_int1,3) = 0
 
28829
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28830
SELECT COUNT(*) INTO @clash_count
 
28831
FROM t1 INNER JOIN t0_template USING(f_int1)
 
28832
WHERE MOD(f_int1,3) = 0
 
28833
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28834
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28835
INSERT INTO t1
 
28836
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28837
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28838
f_charbig = '#SINGLE#';
 
28839
        
 
28840
# check single-1 success:       1
 
28841
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28842
INSERT INTO t1
 
28843
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28844
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28845
f_charbig = '#SINGLE#';
 
28846
        
 
28847
# check single-2 success:       1
 
28848
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28849
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28850
UPDATE t1 SET f_int1 = @cur_value2
 
28851
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28852
        
 
28853
# check single-3 success:       1
 
28854
SET @cur_value1= -1;
 
28855
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28856
UPDATE t1 SET f_int1 = @cur_value1
 
28857
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28858
        
 
28859
# check single-4 success:       1
 
28860
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28861
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28862
        
 
28863
# check single-5 success:       1
 
28864
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28865
        
 
28866
# check single-6 success:       1
 
28867
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28868
        
 
28869
# check single-7 success:       1
 
28870
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
28871
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28872
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28873
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28874
f_charbig = '#NULL#';
 
28875
INSERT INTO t1
 
28876
SET f_int1 = NULL , f_int2 = -@max_row,
 
28877
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28878
f_charbig = '#NULL#';
 
28879
# check null success:    1
 
28880
        
 
28881
# check null-1 success:         1
 
28882
UPDATE t1 SET f_int1 = -@max_row
 
28883
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28884
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28885
        
 
28886
# check null-2 success:         1
 
28887
UPDATE t1 SET f_int1 = NULL
 
28888
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28889
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28890
        
 
28891
# check null-3 success:         1
 
28892
DELETE FROM t1
 
28893
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28894
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28895
        
 
28896
# check null-4 success:         1
 
28897
DELETE FROM t1
 
28898
WHERE f_int1 = 0 AND f_int2 = 0
 
28899
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28900
AND f_charbig = '#NULL#';
 
28901
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28902
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28903
   FROM t0_template source_tab
 
28904
WHERE MOD(f_int1,3) = 0
 
28905
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
28906
ON DUPLICATE KEY
 
28907
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
28908
f_int2 = 2 * @max_row + source_tab.f_int1,
 
28909
f_charbig = 'was updated';
 
28910
        
 
28911
# check unique-1-a success:     1
 
28912
        
 
28913
# check unique-1-b success:     1
 
28914
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28915
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28916
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28917
f_charbig = CONCAT('===',f_char1,'===')
 
28918
WHERE f_charbig = 'was updated';
 
28919
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28920
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
28921
   FROM t0_template source_tab
 
28922
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28923
        
 
28924
# check replace success:        1
 
28925
DELETE FROM t1
 
28926
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
28927
DELETE FROM t1
 
28928
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
28929
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
28930
UPDATE t1 SET f_int2 = f_int1,
 
28931
f_char1 = CAST(f_int1 AS CHAR),
 
28932
f_char2 = CAST(f_int1 AS CHAR),
 
28933
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
28934
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
28935
SET AUTOCOMMIT= 0;
 
28936
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28937
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28938
FROM t0_template source_tab
 
28939
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28940
        
 
28941
# check transactions-1 success:         1
 
28942
COMMIT WORK;
 
28943
        
 
28944
# check transactions-2 success:         1
 
28945
ROLLBACK WORK;
 
28946
        
 
28947
# check transactions-3 success:         1
 
28948
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28949
COMMIT WORK;
 
28950
ROLLBACK WORK;
 
28951
        
 
28952
# check transactions-4 success:         1
 
28953
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28954
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28955
FROM t0_template source_tab
 
28956
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28957
        
 
28958
# check transactions-5 success:         1
 
28959
ROLLBACK WORK;
 
28960
        
 
28961
# check transactions-6 success:         1
 
28962
# INFO: Storage engine used for t1 seems to be transactional.
 
28963
COMMIT;
 
28964
        
 
28965
# check transactions-7 success:         1
 
28966
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28967
COMMIT WORK;
 
28968
SET @@session.sql_mode = 'traditional';
 
28969
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28970
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28971
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28972
'', '', 'was inserted' FROM t0_template
 
28973
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28974
ERROR 22012: Division by 0
 
28975
COMMIT;
 
28976
        
 
28977
# check transactions-8 success:         1
 
28978
# INFO: Storage engine used for t1 seems to be able to revert
 
28979
#       changes made by the failing statement.
 
28980
SET @@session.sql_mode = '';
 
28981
SET AUTOCOMMIT= 1;
 
28982
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28983
COMMIT WORK;
 
28984
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28985
        
 
28986
# check special-1 success:      1
 
28987
UPDATE t1 SET f_charbig = '';
 
28988
        
 
28989
# check special-2 success:      1
 
28990
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28991
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28992
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28993
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28994
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28995
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28996
'just inserted' FROM t0_template
 
28997
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28998
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28999
BEGIN
 
29000
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29001
f_charbig = 'updated by trigger'
 
29002
      WHERE f_int1 = new.f_int1;
 
29003
END|
 
29004
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29005
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29006
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29007
        
 
29008
# check trigger-1 success:      1
 
29009
DROP TRIGGER trg_1;
 
29010
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29011
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29012
f_charbig = 'just inserted'
 
29013
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29014
DELETE FROM t0_aux
 
29015
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29016
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29017
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29018
'just inserted' FROM t0_template
 
29019
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29020
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29021
BEGIN
 
29022
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29023
f_charbig = 'updated by trigger'
 
29024
      WHERE f_int1 = new.f_int1;
 
29025
END|
 
29026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29027
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29029
        
 
29030
# check trigger-2 success:      1
 
29031
DROP TRIGGER trg_1;
 
29032
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29033
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29034
f_charbig = 'just inserted'
 
29035
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29036
DELETE FROM t0_aux
 
29037
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29038
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29039
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29040
'just inserted' FROM t0_template
 
29041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29042
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29043
BEGIN
 
29044
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29045
f_charbig = 'updated by trigger'
 
29046
      WHERE f_int1 = new.f_int1;
 
29047
END|
 
29048
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29049
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29050
        
 
29051
# check trigger-3 success:      1
 
29052
DROP TRIGGER trg_1;
 
29053
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29054
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29055
f_charbig = 'just inserted'
 
29056
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29057
DELETE FROM t0_aux
 
29058
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29059
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29060
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29061
'just inserted' FROM t0_template
 
29062
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29063
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29064
BEGIN
 
29065
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29066
f_charbig = 'updated by trigger'
 
29067
      WHERE f_int1 = - old.f_int1;
 
29068
END|
 
29069
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29070
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29071
        
 
29072
# check trigger-4 success:      1
 
29073
DROP TRIGGER trg_1;
 
29074
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29075
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29076
f_charbig = 'just inserted'
 
29077
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29078
DELETE FROM t0_aux
 
29079
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29081
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29082
'just inserted' FROM t0_template
 
29083
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29084
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29085
BEGIN
 
29086
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29087
f_charbig = 'updated by trigger'
 
29088
      WHERE f_int1 = new.f_int1;
 
29089
END|
 
29090
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29091
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29092
        
 
29093
# check trigger-5 success:      1
 
29094
DROP TRIGGER trg_1;
 
29095
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29096
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29097
f_charbig = 'just inserted'
 
29098
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29099
DELETE FROM t0_aux
 
29100
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29101
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29102
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29103
'just inserted' FROM t0_template
 
29104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29105
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29106
BEGIN
 
29107
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29108
f_charbig = 'updated by trigger'
 
29109
      WHERE f_int1 = - old.f_int1;
 
29110
END|
 
29111
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29112
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29113
        
 
29114
# check trigger-6 success:      1
 
29115
DROP TRIGGER trg_1;
 
29116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29118
f_charbig = 'just inserted'
 
29119
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29120
DELETE FROM t0_aux
 
29121
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29122
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29123
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29124
'just inserted' FROM t0_template
 
29125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29126
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29127
BEGIN
 
29128
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29129
f_charbig = 'updated by trigger'
 
29130
      WHERE f_int1 = - old.f_int1;
 
29131
END|
 
29132
DELETE FROM t0_aux
 
29133
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29134
        
 
29135
# check trigger-7 success:      1
 
29136
DROP TRIGGER trg_1;
 
29137
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29138
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29139
f_charbig = 'just inserted'
 
29140
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29141
DELETE FROM t0_aux
 
29142
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29143
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29144
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29145
'just inserted' FROM t0_template
 
29146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29147
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29148
BEGIN
 
29149
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29150
f_charbig = 'updated by trigger'
 
29151
      WHERE f_int1 = - old.f_int1;
 
29152
END|
 
29153
DELETE FROM t0_aux
 
29154
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29155
        
 
29156
# check trigger-8 success:      1
 
29157
DROP TRIGGER trg_1;
 
29158
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29159
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29160
f_charbig = 'just inserted'
 
29161
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29162
DELETE FROM t0_aux
 
29163
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29164
DELETE FROM t1
 
29165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29166
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29167
BEGIN
 
29168
SET new.f_int1 = old.f_int1 + @max_row,
 
29169
new.f_int2 = old.f_int2 - @max_row,
 
29170
new.f_charbig = '####updated per update trigger####';
 
29171
END|
 
29172
UPDATE t1
 
29173
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29174
f_charbig = '####updated per update statement itself####';
 
29175
        
 
29176
# check trigger-9 success:      1
 
29177
DROP TRIGGER trg_2;
 
29178
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29179
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29180
f_charbig = CONCAT('===',f_char1,'===');
 
29181
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29182
BEGIN
 
29183
SET new.f_int1 = new.f_int1 + @max_row,
 
29184
new.f_int2 = new.f_int2 - @max_row,
 
29185
new.f_charbig = '####updated per update trigger####';
 
29186
END|
 
29187
UPDATE t1
 
29188
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29189
f_charbig = '####updated per update statement itself####';
 
29190
        
 
29191
# check trigger-10 success:     1
 
29192
DROP TRIGGER trg_2;
 
29193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29194
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29195
f_charbig = CONCAT('===',f_char1,'===');
 
29196
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29197
BEGIN
 
29198
SET new.f_int1 = @my_max1 + @counter,
 
29199
new.f_int2 = @my_min2 - @counter,
 
29200
new.f_charbig = '####updated per insert trigger####';
 
29201
SET @counter = @counter + 1;
 
29202
END|
 
29203
SET @counter = 1;
 
29204
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29205
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29206
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29207
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29208
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29209
ORDER BY f_int1;
 
29210
DROP TRIGGER trg_3;
 
29211
        
 
29212
# check trigger-11 success:     1
 
29213
DELETE FROM t1
 
29214
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29215
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29216
AND f_charbig = '####updated per insert trigger####';
 
29217
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29218
BEGIN
 
29219
SET new.f_int1 = @my_max1 + @counter,
 
29220
new.f_int2 = @my_min2 - @counter,
 
29221
new.f_charbig = '####updated per insert trigger####';
 
29222
SET @counter = @counter + 1;
 
29223
END|
 
29224
SET @counter = 1;
 
29225
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29226
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29227
SELECT CAST(f_int1 AS CHAR),
 
29228
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29230
ORDER BY f_int1;
 
29231
DROP TRIGGER trg_3;
 
29232
        
 
29233
# check trigger-12 success:     1
 
29234
DELETE FROM t1
 
29235
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29236
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29237
AND f_charbig = '####updated per insert trigger####';
 
29238
ANALYZE  TABLE t1;
 
29239
Table   Op      Msg_type        Msg_text
 
29240
test.t1 analyze status  OK
 
29241
CHECK    TABLE t1 EXTENDED;
 
29242
Table   Op      Msg_type        Msg_text
 
29243
test.t1 check   status  OK
 
29244
CHECKSUM TABLE t1 EXTENDED;
 
29245
Table   Checksum
 
29246
test.t1 <some_value>
 
29247
OPTIMIZE TABLE t1;
 
29248
Table   Op      Msg_type        Msg_text
 
29249
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
29250
test.t1 optimize        status  OK
 
29251
# check layout success:    1
 
29252
REPAIR   TABLE t1 EXTENDED;
 
29253
Table   Op      Msg_type        Msg_text
 
29254
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29255
# check layout success:    1
 
29256
TRUNCATE t1;
 
29257
        
 
29258
# check TRUNCATE success:       1
 
29259
# check layout success:    1
 
29260
# End usability test (inc/partition_check.inc)
 
29261
DROP TABLE t1;
 
29262
CREATE TABLE t1 (
 
29263
f_int1 INTEGER,
 
29264
f_int2 INTEGER,
 
29265
f_char1 CHAR(20),
 
29266
f_char2 CHAR(20),
 
29267
f_charbig VARCHAR(1000)
 
29268
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
29269
)
 
29270
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
29271
(PARTITION parta VALUES LESS THAN (0),
 
29272
PARTITION partb VALUES LESS THAN (5),
 
29273
PARTITION partc VALUES LESS THAN (10),
 
29274
PARTITION partd VALUES LESS THAN (10 + 5),
 
29275
PARTITION parte VALUES LESS THAN (20),
 
29276
PARTITION partf VALUES LESS THAN (2147483646));
 
29277
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29278
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
29279
# Start usability test (inc/partition_check.inc)
 
29280
create_command
 
29281
SHOW CREATE TABLE t1;
 
29282
Table   Create Table
 
29283
t1      CREATE TABLE `t1` (
 
29284
  `f_int1` int(11) DEFAULT NULL,
 
29285
  `f_int2` int(11) DEFAULT NULL,
 
29286
  `f_char1` char(20) DEFAULT NULL,
 
29287
  `f_char2` char(20) DEFAULT NULL,
 
29288
  `f_charbig` varchar(1000) DEFAULT NULL,
 
29289
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
29290
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
29291
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
29292
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
29293
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
29294
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
29295
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
29296
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
29297
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
29298
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
29299
 
 
29300
unified filelist
 
29301
t1.frm
 
29302
t1.par
 
29303
 
 
29304
# check prerequisites-1 success:    1
 
29305
# check COUNT(*) success:    1
 
29306
# check MIN/MAX(f_int1) success:    1
 
29307
# check MIN/MAX(f_int2) success:    1
 
29308
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29309
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29310
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29311
WHERE f_int1 IN (2,3);
 
29312
ERROR 23000: Can't write; duplicate key in table 't1'
 
29313
# check prerequisites-3 success:    1
 
29314
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
29315
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29316
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
29317
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
29318
WHERE f_int1 IN (2,3);
 
29319
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29320
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29321
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
29322
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
29323
WHERE f_int1 IN (2,3);
 
29324
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29325
# check read via f_int1 success: 1
 
29326
# check read via f_int2 success: 1
 
29327
        
 
29328
# check multiple-1 success:     1
 
29329
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29330
        
 
29331
# check multiple-2 success:     1
 
29332
INSERT INTO t1 SELECT * FROM t0_template
 
29333
WHERE MOD(f_int1,3) = 0;
 
29334
        
 
29335
# check multiple-3 success:     1
 
29336
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29337
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29338
AND @max_row_div2 + @max_row_div4;
 
29339
        
 
29340
# check multiple-4 success:     1
 
29341
DELETE FROM t1
 
29342
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29343
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29344
        
 
29345
# check multiple-5 success:     1
 
29346
SELECT COUNT(*) INTO @try_count FROM t0_template
 
29347
WHERE MOD(f_int1,3) = 0
 
29348
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29349
SELECT COUNT(*) INTO @clash_count
 
29350
FROM t1 INNER JOIN t0_template USING(f_int1)
 
29351
WHERE MOD(f_int1,3) = 0
 
29352
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29353
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29354
INSERT INTO t1
 
29355
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29356
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29357
f_charbig = '#SINGLE#';
 
29358
        
 
29359
# check single-1 success:       1
 
29360
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29361
INSERT INTO t1
 
29362
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29363
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29364
f_charbig = '#SINGLE#';
 
29365
        
 
29366
# check single-2 success:       1
 
29367
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29368
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29369
UPDATE t1 SET f_int1 = @cur_value2
 
29370
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29371
        
 
29372
# check single-3 success:       1
 
29373
SET @cur_value1= -1;
 
29374
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29375
UPDATE t1 SET f_int1 = @cur_value1
 
29376
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29377
        
 
29378
# check single-4 success:       1
 
29379
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29380
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29381
        
 
29382
# check single-5 success:       1
 
29383
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29384
        
 
29385
# check single-6 success:       1
 
29386
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29387
ERROR HY000: Table has no partition for value 2147483647
 
29388
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29389
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29390
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29391
f_charbig = '#NULL#';
 
29392
INSERT INTO t1
 
29393
SET f_int1 = NULL , f_int2 = -@max_row,
 
29394
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29395
f_charbig = '#NULL#';
 
29396
# check null success:    1
 
29397
        
 
29398
# check null-1 success:         1
 
29399
UPDATE t1 SET f_int1 = -@max_row
 
29400
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29401
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29402
        
 
29403
# check null-2 success:         1
 
29404
UPDATE t1 SET f_int1 = NULL
 
29405
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29406
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29407
        
 
29408
# check null-3 success:         1
 
29409
DELETE FROM t1
 
29410
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29411
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29412
        
 
29413
# check null-4 success:         1
 
29414
DELETE FROM t1
 
29415
WHERE f_int1 = 0 AND f_int2 = 0
 
29416
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29417
AND f_charbig = '#NULL#';
 
29418
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29419
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29420
   FROM t0_template source_tab
 
29421
WHERE MOD(f_int1,3) = 0
 
29422
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
29423
ON DUPLICATE KEY
 
29424
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
29425
f_int2 = 2 * @max_row + source_tab.f_int1,
 
29426
f_charbig = 'was updated';
 
29427
        
 
29428
# check unique-1-a success:     1
 
29429
        
 
29430
# check unique-1-b success:     1
 
29431
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29432
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29433
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29434
f_charbig = CONCAT('===',f_char1,'===')
 
29435
WHERE f_charbig = 'was updated';
 
29436
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29437
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
29438
   FROM t0_template source_tab
 
29439
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29440
        
 
29441
# check replace success:        1
 
29442
DELETE FROM t1
 
29443
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
29444
DELETE FROM t1
 
29445
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
29446
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
29447
UPDATE t1 SET f_int2 = f_int1,
 
29448
f_char1 = CAST(f_int1 AS CHAR),
 
29449
f_char2 = CAST(f_int1 AS CHAR),
 
29450
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
29451
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
29452
SET AUTOCOMMIT= 0;
 
29453
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29454
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29455
FROM t0_template source_tab
 
29456
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29457
        
 
29458
# check transactions-1 success:         1
 
29459
COMMIT WORK;
 
29460
        
 
29461
# check transactions-2 success:         1
 
29462
ROLLBACK WORK;
 
29463
        
 
29464
# check transactions-3 success:         1
 
29465
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29466
COMMIT WORK;
 
29467
ROLLBACK WORK;
 
29468
        
 
29469
# check transactions-4 success:         1
 
29470
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29471
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29472
FROM t0_template source_tab
 
29473
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29474
        
 
29475
# check transactions-5 success:         1
 
29476
ROLLBACK WORK;
 
29477
        
 
29478
# check transactions-6 success:         1
 
29479
# INFO: Storage engine used for t1 seems to be transactional.
 
29480
COMMIT;
 
29481
        
 
29482
# check transactions-7 success:         1
 
29483
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29484
COMMIT WORK;
 
29485
SET @@session.sql_mode = 'traditional';
 
29486
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29487
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29488
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29489
'', '', 'was inserted' FROM t0_template
 
29490
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29491
ERROR 22012: Division by 0
 
29492
COMMIT;
 
29493
        
 
29494
# check transactions-8 success:         1
 
29495
# INFO: Storage engine used for t1 seems to be able to revert
 
29496
#       changes made by the failing statement.
 
29497
SET @@session.sql_mode = '';
 
29498
SET AUTOCOMMIT= 1;
 
29499
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29500
COMMIT WORK;
 
29501
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29502
        
 
29503
# check special-1 success:      1
 
29504
UPDATE t1 SET f_charbig = '';
 
29505
        
 
29506
# check special-2 success:      1
 
29507
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29508
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29509
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29510
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29511
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29512
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29513
'just inserted' FROM t0_template
 
29514
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29515
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29516
BEGIN
 
29517
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29518
f_charbig = 'updated by trigger'
 
29519
      WHERE f_int1 = new.f_int1;
 
29520
END|
 
29521
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29522
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29523
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29524
        
 
29525
# check trigger-1 success:      1
 
29526
DROP TRIGGER trg_1;
 
29527
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29528
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29529
f_charbig = 'just inserted'
 
29530
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29531
DELETE FROM t0_aux
 
29532
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29533
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29534
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29535
'just inserted' FROM t0_template
 
29536
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29537
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29538
BEGIN
 
29539
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29540
f_charbig = 'updated by trigger'
 
29541
      WHERE f_int1 = new.f_int1;
 
29542
END|
 
29543
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29544
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29545
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29546
        
 
29547
# check trigger-2 success:      1
 
29548
DROP TRIGGER trg_1;
 
29549
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29550
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29551
f_charbig = 'just inserted'
 
29552
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29553
DELETE FROM t0_aux
 
29554
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29555
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29556
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29557
'just inserted' FROM t0_template
 
29558
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29559
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29560
BEGIN
 
29561
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29562
f_charbig = 'updated by trigger'
 
29563
      WHERE f_int1 = new.f_int1;
 
29564
END|
 
29565
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29566
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29567
        
 
29568
# check trigger-3 success:      1
 
29569
DROP TRIGGER trg_1;
 
29570
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29571
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29572
f_charbig = 'just inserted'
 
29573
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29574
DELETE FROM t0_aux
 
29575
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29576
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29577
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29578
'just inserted' FROM t0_template
 
29579
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29580
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29581
BEGIN
 
29582
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29583
f_charbig = 'updated by trigger'
 
29584
      WHERE f_int1 = - old.f_int1;
 
29585
END|
 
29586
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29587
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29588
        
 
29589
# check trigger-4 success:      1
 
29590
DROP TRIGGER trg_1;
 
29591
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29592
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29593
f_charbig = 'just inserted'
 
29594
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29595
DELETE FROM t0_aux
 
29596
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29597
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29598
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29599
'just inserted' FROM t0_template
 
29600
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29601
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29602
BEGIN
 
29603
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29604
f_charbig = 'updated by trigger'
 
29605
      WHERE f_int1 = new.f_int1;
 
29606
END|
 
29607
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29608
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29609
        
 
29610
# check trigger-5 success:      1
 
29611
DROP TRIGGER trg_1;
 
29612
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29613
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29614
f_charbig = 'just inserted'
 
29615
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29616
DELETE FROM t0_aux
 
29617
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29618
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29619
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29620
'just inserted' FROM t0_template
 
29621
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29622
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29623
BEGIN
 
29624
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29625
f_charbig = 'updated by trigger'
 
29626
      WHERE f_int1 = - old.f_int1;
 
29627
END|
 
29628
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29629
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29630
        
 
29631
# check trigger-6 success:      1
 
29632
DROP TRIGGER trg_1;
 
29633
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29634
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29635
f_charbig = 'just inserted'
 
29636
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29637
DELETE FROM t0_aux
 
29638
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29639
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29640
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29641
'just inserted' FROM t0_template
 
29642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29643
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29644
BEGIN
 
29645
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29646
f_charbig = 'updated by trigger'
 
29647
      WHERE f_int1 = - old.f_int1;
 
29648
END|
 
29649
DELETE FROM t0_aux
 
29650
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29651
        
 
29652
# check trigger-7 success:      1
 
29653
DROP TRIGGER trg_1;
 
29654
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29655
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29656
f_charbig = 'just inserted'
 
29657
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29658
DELETE FROM t0_aux
 
29659
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29660
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29661
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29662
'just inserted' FROM t0_template
 
29663
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29664
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29665
BEGIN
 
29666
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29667
f_charbig = 'updated by trigger'
 
29668
      WHERE f_int1 = - old.f_int1;
 
29669
END|
 
29670
DELETE FROM t0_aux
 
29671
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29672
        
 
29673
# check trigger-8 success:      1
 
29674
DROP TRIGGER trg_1;
 
29675
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29676
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29677
f_charbig = 'just inserted'
 
29678
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29679
DELETE FROM t0_aux
 
29680
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29681
DELETE FROM t1
 
29682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29683
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29684
BEGIN
 
29685
SET new.f_int1 = old.f_int1 + @max_row,
 
29686
new.f_int2 = old.f_int2 - @max_row,
 
29687
new.f_charbig = '####updated per update trigger####';
 
29688
END|
 
29689
UPDATE t1
 
29690
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29691
f_charbig = '####updated per update statement itself####';
 
29692
        
 
29693
# check trigger-9 success:      1
 
29694
DROP TRIGGER trg_2;
 
29695
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29696
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29697
f_charbig = CONCAT('===',f_char1,'===');
 
29698
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29699
BEGIN
 
29700
SET new.f_int1 = new.f_int1 + @max_row,
 
29701
new.f_int2 = new.f_int2 - @max_row,
 
29702
new.f_charbig = '####updated per update trigger####';
 
29703
END|
 
29704
UPDATE t1
 
29705
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29706
f_charbig = '####updated per update statement itself####';
 
29707
        
 
29708
# check trigger-10 success:     1
 
29709
DROP TRIGGER trg_2;
 
29710
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29711
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29712
f_charbig = CONCAT('===',f_char1,'===');
 
29713
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29714
BEGIN
 
29715
SET new.f_int1 = @my_max1 + @counter,
 
29716
new.f_int2 = @my_min2 - @counter,
 
29717
new.f_charbig = '####updated per insert trigger####';
 
29718
SET @counter = @counter + 1;
 
29719
END|
 
29720
SET @counter = 1;
 
29721
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29722
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29723
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29724
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29726
ORDER BY f_int1;
 
29727
DROP TRIGGER trg_3;
 
29728
        
 
29729
# check trigger-11 success:     1
 
29730
DELETE FROM t1
 
29731
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29732
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29733
AND f_charbig = '####updated per insert trigger####';
 
29734
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29735
BEGIN
 
29736
SET new.f_int1 = @my_max1 + @counter,
 
29737
new.f_int2 = @my_min2 - @counter,
 
29738
new.f_charbig = '####updated per insert trigger####';
 
29739
SET @counter = @counter + 1;
 
29740
END|
 
29741
SET @counter = 1;
 
29742
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29743
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29744
SELECT CAST(f_int1 AS CHAR),
 
29745
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29747
ORDER BY f_int1;
 
29748
DROP TRIGGER trg_3;
 
29749
        
 
29750
# check trigger-12 success:     1
 
29751
DELETE FROM t1
 
29752
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29753
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29754
AND f_charbig = '####updated per insert trigger####';
 
29755
ANALYZE  TABLE t1;
 
29756
Table   Op      Msg_type        Msg_text
 
29757
test.t1 analyze status  OK
 
29758
CHECK    TABLE t1 EXTENDED;
 
29759
Table   Op      Msg_type        Msg_text
 
29760
test.t1 check   status  OK
 
29761
CHECKSUM TABLE t1 EXTENDED;
 
29762
Table   Checksum
 
29763
test.t1 <some_value>
 
29764
OPTIMIZE TABLE t1;
 
29765
Table   Op      Msg_type        Msg_text
 
29766
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
29767
test.t1 optimize        status  OK
 
29768
# check layout success:    1
 
29769
REPAIR   TABLE t1 EXTENDED;
 
29770
Table   Op      Msg_type        Msg_text
 
29771
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29772
# check layout success:    1
 
29773
TRUNCATE t1;
 
29774
        
 
29775
# check TRUNCATE success:       1
 
29776
# check layout success:    1
 
29777
# End usability test (inc/partition_check.inc)
 
29778
DROP TABLE t1;
 
29779
CREATE TABLE t1 (
 
29780
f_int1 INTEGER,
 
29781
f_int2 INTEGER,
 
29782
f_char1 CHAR(20),
 
29783
f_char2 CHAR(20),
 
29784
f_charbig VARCHAR(1000)
 
29785
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
29786
)
 
29787
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
29788
(PARTITION parta VALUES LESS THAN (0),
 
29789
PARTITION partb VALUES LESS THAN (5),
 
29790
PARTITION partc VALUES LESS THAN (10),
 
29791
PARTITION partd VALUES LESS THAN (2147483646));
 
29792
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29793
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
29794
# Start usability test (inc/partition_check.inc)
 
29795
create_command
 
29796
SHOW CREATE TABLE t1;
 
29797
Table   Create Table
 
29798
t1      CREATE TABLE `t1` (
 
29799
  `f_int1` int(11) DEFAULT NULL,
 
29800
  `f_int2` int(11) DEFAULT NULL,
 
29801
  `f_char1` char(20) DEFAULT NULL,
 
29802
  `f_char2` char(20) DEFAULT NULL,
 
29803
  `f_charbig` varchar(1000) DEFAULT NULL,
 
29804
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
29805
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
29806
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
29807
/*!50100 PARTITION BY RANGE (f_int1)
 
29808
SUBPARTITION BY HASH (f_int2)
 
29809
SUBPARTITIONS 2
 
29810
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
29811
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
29812
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
29813
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
29814
 
 
29815
unified filelist
 
29816
t1.frm
 
29817
t1.par
 
29818
 
 
29819
# check prerequisites-1 success:    1
 
29820
# check COUNT(*) success:    1
 
29821
# check MIN/MAX(f_int1) success:    1
 
29822
# check MIN/MAX(f_int2) success:    1
 
29823
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29824
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29825
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29826
WHERE f_int1 IN (2,3);
 
29827
ERROR 23000: Can't write; duplicate key in table 't1'
 
29828
# check prerequisites-3 success:    1
 
29829
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
29830
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29831
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
29832
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
29833
WHERE f_int1 IN (2,3);
 
29834
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29835
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29836
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
29837
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
29838
WHERE f_int1 IN (2,3);
 
29839
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29840
# check read via f_int1 success: 1
 
29841
# check read via f_int2 success: 1
 
29842
        
 
29843
# check multiple-1 success:     1
 
29844
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29845
        
 
29846
# check multiple-2 success:     1
 
29847
INSERT INTO t1 SELECT * FROM t0_template
 
29848
WHERE MOD(f_int1,3) = 0;
 
29849
        
 
29850
# check multiple-3 success:     1
 
29851
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29852
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29853
AND @max_row_div2 + @max_row_div4;
 
29854
        
 
29855
# check multiple-4 success:     1
 
29856
DELETE FROM t1
 
29857
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29858
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29859
        
 
29860
# check multiple-5 success:     1
 
29861
SELECT COUNT(*) INTO @try_count FROM t0_template
 
29862
WHERE MOD(f_int1,3) = 0
 
29863
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29864
SELECT COUNT(*) INTO @clash_count
 
29865
FROM t1 INNER JOIN t0_template USING(f_int1)
 
29866
WHERE MOD(f_int1,3) = 0
 
29867
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29868
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29869
INSERT INTO t1
 
29870
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29871
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29872
f_charbig = '#SINGLE#';
 
29873
        
 
29874
# check single-1 success:       1
 
29875
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29876
INSERT INTO t1
 
29877
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29878
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29879
f_charbig = '#SINGLE#';
 
29880
        
 
29881
# check single-2 success:       1
 
29882
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29883
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29884
UPDATE t1 SET f_int1 = @cur_value2
 
29885
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29886
        
 
29887
# check single-3 success:       1
 
29888
SET @cur_value1= -1;
 
29889
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29890
UPDATE t1 SET f_int1 = @cur_value1
 
29891
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29892
        
 
29893
# check single-4 success:       1
 
29894
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29895
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29896
        
 
29897
# check single-5 success:       1
 
29898
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29899
        
 
29900
# check single-6 success:       1
 
29901
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29902
ERROR HY000: Table has no partition for value 2147483647
 
29903
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29904
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29905
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29906
f_charbig = '#NULL#';
 
29907
INSERT INTO t1
 
29908
SET f_int1 = NULL , f_int2 = -@max_row,
 
29909
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29910
f_charbig = '#NULL#';
 
29911
# check null success:    1
 
29912
        
 
29913
# check null-1 success:         1
 
29914
UPDATE t1 SET f_int1 = -@max_row
 
29915
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29916
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29917
        
 
29918
# check null-2 success:         1
 
29919
UPDATE t1 SET f_int1 = NULL
 
29920
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29921
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29922
        
 
29923
# check null-3 success:         1
 
29924
DELETE FROM t1
 
29925
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29926
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29927
        
 
29928
# check null-4 success:         1
 
29929
DELETE FROM t1
 
29930
WHERE f_int1 = 0 AND f_int2 = 0
 
29931
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29932
AND f_charbig = '#NULL#';
 
29933
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29934
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29935
   FROM t0_template source_tab
 
29936
WHERE MOD(f_int1,3) = 0
 
29937
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
29938
ON DUPLICATE KEY
 
29939
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
29940
f_int2 = 2 * @max_row + source_tab.f_int1,
 
29941
f_charbig = 'was updated';
 
29942
        
 
29943
# check unique-1-a success:     1
 
29944
        
 
29945
# check unique-1-b success:     1
 
29946
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29947
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29948
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29949
f_charbig = CONCAT('===',f_char1,'===')
 
29950
WHERE f_charbig = 'was updated';
 
29951
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29952
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
29953
   FROM t0_template source_tab
 
29954
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29955
        
 
29956
# check replace success:        1
 
29957
DELETE FROM t1
 
29958
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
29959
DELETE FROM t1
 
29960
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
29961
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
29962
UPDATE t1 SET f_int2 = f_int1,
 
29963
f_char1 = CAST(f_int1 AS CHAR),
 
29964
f_char2 = CAST(f_int1 AS CHAR),
 
29965
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
29966
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
29967
SET AUTOCOMMIT= 0;
 
29968
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29969
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29970
FROM t0_template source_tab
 
29971
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29972
        
 
29973
# check transactions-1 success:         1
 
29974
COMMIT WORK;
 
29975
        
 
29976
# check transactions-2 success:         1
 
29977
ROLLBACK WORK;
 
29978
        
 
29979
# check transactions-3 success:         1
 
29980
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29981
COMMIT WORK;
 
29982
ROLLBACK WORK;
 
29983
        
 
29984
# check transactions-4 success:         1
 
29985
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29986
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29987
FROM t0_template source_tab
 
29988
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29989
        
 
29990
# check transactions-5 success:         1
 
29991
ROLLBACK WORK;
 
29992
        
 
29993
# check transactions-6 success:         1
 
29994
# INFO: Storage engine used for t1 seems to be transactional.
 
29995
COMMIT;
 
29996
        
 
29997
# check transactions-7 success:         1
 
29998
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29999
COMMIT WORK;
 
30000
SET @@session.sql_mode = 'traditional';
 
30001
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30002
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30003
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30004
'', '', 'was inserted' FROM t0_template
 
30005
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30006
ERROR 22012: Division by 0
 
30007
COMMIT;
 
30008
        
 
30009
# check transactions-8 success:         1
 
30010
# INFO: Storage engine used for t1 seems to be able to revert
 
30011
#       changes made by the failing statement.
 
30012
SET @@session.sql_mode = '';
 
30013
SET AUTOCOMMIT= 1;
 
30014
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30015
COMMIT WORK;
 
30016
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30017
        
 
30018
# check special-1 success:      1
 
30019
UPDATE t1 SET f_charbig = '';
 
30020
        
 
30021
# check special-2 success:      1
 
30022
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30023
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30024
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30027
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30028
'just inserted' FROM t0_template
 
30029
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30030
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30031
BEGIN
 
30032
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30033
f_charbig = 'updated by trigger'
 
30034
      WHERE f_int1 = new.f_int1;
 
30035
END|
 
30036
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30037
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30039
        
 
30040
# check trigger-1 success:      1
 
30041
DROP TRIGGER trg_1;
 
30042
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30043
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30044
f_charbig = 'just inserted'
 
30045
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30046
DELETE FROM t0_aux
 
30047
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30048
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30049
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30050
'just inserted' FROM t0_template
 
30051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30052
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30053
BEGIN
 
30054
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30055
f_charbig = 'updated by trigger'
 
30056
      WHERE f_int1 = new.f_int1;
 
30057
END|
 
30058
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30059
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30061
        
 
30062
# check trigger-2 success:      1
 
30063
DROP TRIGGER trg_1;
 
30064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30065
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30066
f_charbig = 'just inserted'
 
30067
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30068
DELETE FROM t0_aux
 
30069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30072
'just inserted' FROM t0_template
 
30073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30074
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30075
BEGIN
 
30076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30077
f_charbig = 'updated by trigger'
 
30078
      WHERE f_int1 = new.f_int1;
 
30079
END|
 
30080
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30081
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30082
        
 
30083
# check trigger-3 success:      1
 
30084
DROP TRIGGER trg_1;
 
30085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30087
f_charbig = 'just inserted'
 
30088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30089
DELETE FROM t0_aux
 
30090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30093
'just inserted' FROM t0_template
 
30094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30095
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30096
BEGIN
 
30097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30098
f_charbig = 'updated by trigger'
 
30099
      WHERE f_int1 = - old.f_int1;
 
30100
END|
 
30101
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30102
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30103
        
 
30104
# check trigger-4 success:      1
 
30105
DROP TRIGGER trg_1;
 
30106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30107
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30108
f_charbig = 'just inserted'
 
30109
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30110
DELETE FROM t0_aux
 
30111
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30112
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30113
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30114
'just inserted' FROM t0_template
 
30115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30116
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30117
BEGIN
 
30118
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30119
f_charbig = 'updated by trigger'
 
30120
      WHERE f_int1 = new.f_int1;
 
30121
END|
 
30122
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30123
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30124
        
 
30125
# check trigger-5 success:      1
 
30126
DROP TRIGGER trg_1;
 
30127
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30128
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30129
f_charbig = 'just inserted'
 
30130
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30131
DELETE FROM t0_aux
 
30132
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30133
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30134
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30135
'just inserted' FROM t0_template
 
30136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30137
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30138
BEGIN
 
30139
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30140
f_charbig = 'updated by trigger'
 
30141
      WHERE f_int1 = - old.f_int1;
 
30142
END|
 
30143
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30144
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30145
        
 
30146
# check trigger-6 success:      1
 
30147
DROP TRIGGER trg_1;
 
30148
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30149
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30150
f_charbig = 'just inserted'
 
30151
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30152
DELETE FROM t0_aux
 
30153
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30154
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30155
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30156
'just inserted' FROM t0_template
 
30157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30158
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30159
BEGIN
 
30160
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30161
f_charbig = 'updated by trigger'
 
30162
      WHERE f_int1 = - old.f_int1;
 
30163
END|
 
30164
DELETE FROM t0_aux
 
30165
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30166
        
 
30167
# check trigger-7 success:      1
 
30168
DROP TRIGGER trg_1;
 
30169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30171
f_charbig = 'just inserted'
 
30172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30173
DELETE FROM t0_aux
 
30174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30177
'just inserted' FROM t0_template
 
30178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30179
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30180
BEGIN
 
30181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30182
f_charbig = 'updated by trigger'
 
30183
      WHERE f_int1 = - old.f_int1;
 
30184
END|
 
30185
DELETE FROM t0_aux
 
30186
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30187
        
 
30188
# check trigger-8 success:      1
 
30189
DROP TRIGGER trg_1;
 
30190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30192
f_charbig = 'just inserted'
 
30193
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30194
DELETE FROM t0_aux
 
30195
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30196
DELETE FROM t1
 
30197
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30198
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30199
BEGIN
 
30200
SET new.f_int1 = old.f_int1 + @max_row,
 
30201
new.f_int2 = old.f_int2 - @max_row,
 
30202
new.f_charbig = '####updated per update trigger####';
 
30203
END|
 
30204
UPDATE t1
 
30205
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30206
f_charbig = '####updated per update statement itself####';
 
30207
        
 
30208
# check trigger-9 success:      1
 
30209
DROP TRIGGER trg_2;
 
30210
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30211
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30212
f_charbig = CONCAT('===',f_char1,'===');
 
30213
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30214
BEGIN
 
30215
SET new.f_int1 = new.f_int1 + @max_row,
 
30216
new.f_int2 = new.f_int2 - @max_row,
 
30217
new.f_charbig = '####updated per update trigger####';
 
30218
END|
 
30219
UPDATE t1
 
30220
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30221
f_charbig = '####updated per update statement itself####';
 
30222
        
 
30223
# check trigger-10 success:     1
 
30224
DROP TRIGGER trg_2;
 
30225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30227
f_charbig = CONCAT('===',f_char1,'===');
 
30228
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30229
BEGIN
 
30230
SET new.f_int1 = @my_max1 + @counter,
 
30231
new.f_int2 = @my_min2 - @counter,
 
30232
new.f_charbig = '####updated per insert trigger####';
 
30233
SET @counter = @counter + 1;
 
30234
END|
 
30235
SET @counter = 1;
 
30236
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30237
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30238
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30239
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30240
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30241
ORDER BY f_int1;
 
30242
DROP TRIGGER trg_3;
 
30243
        
 
30244
# check trigger-11 success:     1
 
30245
DELETE FROM t1
 
30246
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30247
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30248
AND f_charbig = '####updated per insert trigger####';
 
30249
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30250
BEGIN
 
30251
SET new.f_int1 = @my_max1 + @counter,
 
30252
new.f_int2 = @my_min2 - @counter,
 
30253
new.f_charbig = '####updated per insert trigger####';
 
30254
SET @counter = @counter + 1;
 
30255
END|
 
30256
SET @counter = 1;
 
30257
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30258
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30259
SELECT CAST(f_int1 AS CHAR),
 
30260
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30261
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30262
ORDER BY f_int1;
 
30263
DROP TRIGGER trg_3;
 
30264
        
 
30265
# check trigger-12 success:     1
 
30266
DELETE FROM t1
 
30267
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30268
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30269
AND f_charbig = '####updated per insert trigger####';
 
30270
ANALYZE  TABLE t1;
 
30271
Table   Op      Msg_type        Msg_text
 
30272
test.t1 analyze status  OK
 
30273
CHECK    TABLE t1 EXTENDED;
 
30274
Table   Op      Msg_type        Msg_text
 
30275
test.t1 check   status  OK
 
30276
CHECKSUM TABLE t1 EXTENDED;
 
30277
Table   Checksum
 
30278
test.t1 <some_value>
 
30279
OPTIMIZE TABLE t1;
 
30280
Table   Op      Msg_type        Msg_text
 
30281
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
30282
test.t1 optimize        status  OK
 
30283
# check layout success:    1
 
30284
REPAIR   TABLE t1 EXTENDED;
 
30285
Table   Op      Msg_type        Msg_text
 
30286
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30287
# check layout success:    1
 
30288
TRUNCATE t1;
 
30289
        
 
30290
# check TRUNCATE success:       1
 
30291
# check layout success:    1
 
30292
# End usability test (inc/partition_check.inc)
 
30293
DROP TABLE t1;
 
30294
CREATE TABLE t1 (
 
30295
f_int1 INTEGER,
 
30296
f_int2 INTEGER,
 
30297
f_char1 CHAR(20),
 
30298
f_char2 CHAR(20),
 
30299
f_charbig VARCHAR(1000)
 
30300
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
30301
)
 
30302
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
30303
(PARTITION part1 VALUES LESS THAN (0)
 
30304
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
30305
PARTITION part2 VALUES LESS THAN (5)
 
30306
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
30307
PARTITION part3 VALUES LESS THAN (10)
 
30308
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
30309
PARTITION part4 VALUES LESS THAN (2147483646)
 
30310
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
30311
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30312
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
30313
# Start usability test (inc/partition_check.inc)
 
30314
create_command
 
30315
SHOW CREATE TABLE t1;
 
30316
Table   Create Table
 
30317
t1      CREATE TABLE `t1` (
 
30318
  `f_int1` int(11) DEFAULT NULL,
 
30319
  `f_int2` int(11) DEFAULT NULL,
 
30320
  `f_char1` char(20) DEFAULT NULL,
 
30321
  `f_char2` char(20) DEFAULT NULL,
 
30322
  `f_charbig` varchar(1000) DEFAULT NULL,
 
30323
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
30324
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
30325
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
30326
/*!50100 PARTITION BY RANGE (f_int1)
 
30327
SUBPARTITION BY KEY (f_int2)
 
30328
(PARTITION part1 VALUES LESS THAN (0)
 
30329
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
30330
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
30331
 PARTITION part2 VALUES LESS THAN (5)
 
30332
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
30333
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
30334
 PARTITION part3 VALUES LESS THAN (10)
 
30335
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
30336
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
30337
 PARTITION part4 VALUES LESS THAN (2147483646)
 
30338
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
30339
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
30340
 
 
30341
unified filelist
 
30342
t1.frm
 
30343
t1.par
 
30344
 
 
30345
# check prerequisites-1 success:    1
 
30346
# check COUNT(*) success:    1
 
30347
# check MIN/MAX(f_int1) success:    1
 
30348
# check MIN/MAX(f_int2) success:    1
 
30349
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30350
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30351
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30352
WHERE f_int1 IN (2,3);
 
30353
ERROR 23000: Can't write; duplicate key in table 't1'
 
30354
# check prerequisites-3 success:    1
 
30355
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
30356
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30357
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
30358
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
30359
WHERE f_int1 IN (2,3);
 
30360
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30361
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30362
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
30363
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
30364
WHERE f_int1 IN (2,3);
 
30365
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30366
# check read via f_int1 success: 1
 
30367
# check read via f_int2 success: 1
 
30368
        
 
30369
# check multiple-1 success:     1
 
30370
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30371
        
 
30372
# check multiple-2 success:     1
 
30373
INSERT INTO t1 SELECT * FROM t0_template
 
30374
WHERE MOD(f_int1,3) = 0;
 
30375
        
 
30376
# check multiple-3 success:     1
 
30377
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30378
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30379
AND @max_row_div2 + @max_row_div4;
 
30380
        
 
30381
# check multiple-4 success:     1
 
30382
DELETE FROM t1
 
30383
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30384
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30385
        
 
30386
# check multiple-5 success:     1
 
30387
SELECT COUNT(*) INTO @try_count FROM t0_template
 
30388
WHERE MOD(f_int1,3) = 0
 
30389
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30390
SELECT COUNT(*) INTO @clash_count
 
30391
FROM t1 INNER JOIN t0_template USING(f_int1)
 
30392
WHERE MOD(f_int1,3) = 0
 
30393
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30394
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30395
INSERT INTO t1
 
30396
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30397
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30398
f_charbig = '#SINGLE#';
 
30399
        
 
30400
# check single-1 success:       1
 
30401
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30402
INSERT INTO t1
 
30403
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30404
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30405
f_charbig = '#SINGLE#';
 
30406
        
 
30407
# check single-2 success:       1
 
30408
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30409
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30410
UPDATE t1 SET f_int1 = @cur_value2
 
30411
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30412
        
 
30413
# check single-3 success:       1
 
30414
SET @cur_value1= -1;
 
30415
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30416
UPDATE t1 SET f_int1 = @cur_value1
 
30417
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30418
        
 
30419
# check single-4 success:       1
 
30420
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30421
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30422
        
 
30423
# check single-5 success:       1
 
30424
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30425
        
 
30426
# check single-6 success:       1
 
30427
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30428
ERROR HY000: Table has no partition for value 2147483647
 
30429
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30430
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30431
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30432
f_charbig = '#NULL#';
 
30433
INSERT INTO t1
 
30434
SET f_int1 = NULL , f_int2 = -@max_row,
 
30435
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30436
f_charbig = '#NULL#';
 
30437
# check null success:    1
 
30438
        
 
30439
# check null-1 success:         1
 
30440
UPDATE t1 SET f_int1 = -@max_row
 
30441
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30442
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30443
        
 
30444
# check null-2 success:         1
 
30445
UPDATE t1 SET f_int1 = NULL
 
30446
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30447
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30448
        
 
30449
# check null-3 success:         1
 
30450
DELETE FROM t1
 
30451
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30452
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30453
        
 
30454
# check null-4 success:         1
 
30455
DELETE FROM t1
 
30456
WHERE f_int1 = 0 AND f_int2 = 0
 
30457
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30458
AND f_charbig = '#NULL#';
 
30459
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30460
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30461
   FROM t0_template source_tab
 
30462
WHERE MOD(f_int1,3) = 0
 
30463
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
30464
ON DUPLICATE KEY
 
30465
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
30466
f_int2 = 2 * @max_row + source_tab.f_int1,
 
30467
f_charbig = 'was updated';
 
30468
        
 
30469
# check unique-1-a success:     1
 
30470
        
 
30471
# check unique-1-b success:     1
 
30472
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30473
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30474
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30475
f_charbig = CONCAT('===',f_char1,'===')
 
30476
WHERE f_charbig = 'was updated';
 
30477
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30478
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
30479
   FROM t0_template source_tab
 
30480
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30481
        
 
30482
# check replace success:        1
 
30483
DELETE FROM t1
 
30484
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
30485
DELETE FROM t1
 
30486
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
30487
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
30488
UPDATE t1 SET f_int2 = f_int1,
 
30489
f_char1 = CAST(f_int1 AS CHAR),
 
30490
f_char2 = CAST(f_int1 AS CHAR),
 
30491
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
30492
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
30493
SET AUTOCOMMIT= 0;
 
30494
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30495
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30496
FROM t0_template source_tab
 
30497
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30498
        
 
30499
# check transactions-1 success:         1
 
30500
COMMIT WORK;
 
30501
        
 
30502
# check transactions-2 success:         1
 
30503
ROLLBACK WORK;
 
30504
        
 
30505
# check transactions-3 success:         1
 
30506
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30507
COMMIT WORK;
 
30508
ROLLBACK WORK;
 
30509
        
 
30510
# check transactions-4 success:         1
 
30511
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30512
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30513
FROM t0_template source_tab
 
30514
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30515
        
 
30516
# check transactions-5 success:         1
 
30517
ROLLBACK WORK;
 
30518
        
 
30519
# check transactions-6 success:         1
 
30520
# INFO: Storage engine used for t1 seems to be transactional.
 
30521
COMMIT;
 
30522
        
 
30523
# check transactions-7 success:         1
 
30524
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30525
COMMIT WORK;
 
30526
SET @@session.sql_mode = 'traditional';
 
30527
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30528
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30529
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30530
'', '', 'was inserted' FROM t0_template
 
30531
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30532
ERROR 22012: Division by 0
 
30533
COMMIT;
 
30534
        
 
30535
# check transactions-8 success:         1
 
30536
# INFO: Storage engine used for t1 seems to be able to revert
 
30537
#       changes made by the failing statement.
 
30538
SET @@session.sql_mode = '';
 
30539
SET AUTOCOMMIT= 1;
 
30540
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30541
COMMIT WORK;
 
30542
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30543
        
 
30544
# check special-1 success:      1
 
30545
UPDATE t1 SET f_charbig = '';
 
30546
        
 
30547
# check special-2 success:      1
 
30548
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30549
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30550
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30551
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30553
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30554
'just inserted' FROM t0_template
 
30555
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30556
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30557
BEGIN
 
30558
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30559
f_charbig = 'updated by trigger'
 
30560
      WHERE f_int1 = new.f_int1;
 
30561
END|
 
30562
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30563
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30565
        
 
30566
# check trigger-1 success:      1
 
30567
DROP TRIGGER trg_1;
 
30568
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30569
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30570
f_charbig = 'just inserted'
 
30571
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30572
DELETE FROM t0_aux
 
30573
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30574
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30575
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30576
'just inserted' FROM t0_template
 
30577
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30578
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30579
BEGIN
 
30580
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30581
f_charbig = 'updated by trigger'
 
30582
      WHERE f_int1 = new.f_int1;
 
30583
END|
 
30584
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30585
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30586
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30587
        
 
30588
# check trigger-2 success:      1
 
30589
DROP TRIGGER trg_1;
 
30590
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30591
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30592
f_charbig = 'just inserted'
 
30593
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30594
DELETE FROM t0_aux
 
30595
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30596
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30597
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30598
'just inserted' FROM t0_template
 
30599
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30600
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30601
BEGIN
 
30602
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30603
f_charbig = 'updated by trigger'
 
30604
      WHERE f_int1 = new.f_int1;
 
30605
END|
 
30606
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30607
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30608
        
 
30609
# check trigger-3 success:      1
 
30610
DROP TRIGGER trg_1;
 
30611
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30612
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30613
f_charbig = 'just inserted'
 
30614
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30615
DELETE FROM t0_aux
 
30616
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30617
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30618
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30619
'just inserted' FROM t0_template
 
30620
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30621
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30622
BEGIN
 
30623
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30624
f_charbig = 'updated by trigger'
 
30625
      WHERE f_int1 = - old.f_int1;
 
30626
END|
 
30627
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30628
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30629
        
 
30630
# check trigger-4 success:      1
 
30631
DROP TRIGGER trg_1;
 
30632
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30633
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30634
f_charbig = 'just inserted'
 
30635
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30636
DELETE FROM t0_aux
 
30637
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30638
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30639
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30640
'just inserted' FROM t0_template
 
30641
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30642
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30643
BEGIN
 
30644
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30645
f_charbig = 'updated by trigger'
 
30646
      WHERE f_int1 = new.f_int1;
 
30647
END|
 
30648
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30649
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30650
        
 
30651
# check trigger-5 success:      1
 
30652
DROP TRIGGER trg_1;
 
30653
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30654
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30655
f_charbig = 'just inserted'
 
30656
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30657
DELETE FROM t0_aux
 
30658
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30659
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30660
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30661
'just inserted' FROM t0_template
 
30662
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30663
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30664
BEGIN
 
30665
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30666
f_charbig = 'updated by trigger'
 
30667
      WHERE f_int1 = - old.f_int1;
 
30668
END|
 
30669
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30670
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30671
        
 
30672
# check trigger-6 success:      1
 
30673
DROP TRIGGER trg_1;
 
30674
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30675
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30676
f_charbig = 'just inserted'
 
30677
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30678
DELETE FROM t0_aux
 
30679
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30680
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30681
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30682
'just inserted' FROM t0_template
 
30683
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30684
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30685
BEGIN
 
30686
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30687
f_charbig = 'updated by trigger'
 
30688
      WHERE f_int1 = - old.f_int1;
 
30689
END|
 
30690
DELETE FROM t0_aux
 
30691
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30692
        
 
30693
# check trigger-7 success:      1
 
30694
DROP TRIGGER trg_1;
 
30695
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30696
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30697
f_charbig = 'just inserted'
 
30698
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30699
DELETE FROM t0_aux
 
30700
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30701
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30702
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30703
'just inserted' FROM t0_template
 
30704
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30705
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30706
BEGIN
 
30707
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30708
f_charbig = 'updated by trigger'
 
30709
      WHERE f_int1 = - old.f_int1;
 
30710
END|
 
30711
DELETE FROM t0_aux
 
30712
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30713
        
 
30714
# check trigger-8 success:      1
 
30715
DROP TRIGGER trg_1;
 
30716
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30717
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30718
f_charbig = 'just inserted'
 
30719
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30720
DELETE FROM t0_aux
 
30721
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30722
DELETE FROM t1
 
30723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30724
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30725
BEGIN
 
30726
SET new.f_int1 = old.f_int1 + @max_row,
 
30727
new.f_int2 = old.f_int2 - @max_row,
 
30728
new.f_charbig = '####updated per update trigger####';
 
30729
END|
 
30730
UPDATE t1
 
30731
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30732
f_charbig = '####updated per update statement itself####';
 
30733
        
 
30734
# check trigger-9 success:      1
 
30735
DROP TRIGGER trg_2;
 
30736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30738
f_charbig = CONCAT('===',f_char1,'===');
 
30739
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30740
BEGIN
 
30741
SET new.f_int1 = new.f_int1 + @max_row,
 
30742
new.f_int2 = new.f_int2 - @max_row,
 
30743
new.f_charbig = '####updated per update trigger####';
 
30744
END|
 
30745
UPDATE t1
 
30746
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30747
f_charbig = '####updated per update statement itself####';
 
30748
        
 
30749
# check trigger-10 success:     1
 
30750
DROP TRIGGER trg_2;
 
30751
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30752
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30753
f_charbig = CONCAT('===',f_char1,'===');
 
30754
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30755
BEGIN
 
30756
SET new.f_int1 = @my_max1 + @counter,
 
30757
new.f_int2 = @my_min2 - @counter,
 
30758
new.f_charbig = '####updated per insert trigger####';
 
30759
SET @counter = @counter + 1;
 
30760
END|
 
30761
SET @counter = 1;
 
30762
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30763
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30764
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30765
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30766
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30767
ORDER BY f_int1;
 
30768
DROP TRIGGER trg_3;
 
30769
        
 
30770
# check trigger-11 success:     1
 
30771
DELETE FROM t1
 
30772
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30773
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30774
AND f_charbig = '####updated per insert trigger####';
 
30775
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30776
BEGIN
 
30777
SET new.f_int1 = @my_max1 + @counter,
 
30778
new.f_int2 = @my_min2 - @counter,
 
30779
new.f_charbig = '####updated per insert trigger####';
 
30780
SET @counter = @counter + 1;
 
30781
END|
 
30782
SET @counter = 1;
 
30783
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30784
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30785
SELECT CAST(f_int1 AS CHAR),
 
30786
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30787
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30788
ORDER BY f_int1;
 
30789
DROP TRIGGER trg_3;
 
30790
        
 
30791
# check trigger-12 success:     1
 
30792
DELETE FROM t1
 
30793
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30794
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30795
AND f_charbig = '####updated per insert trigger####';
 
30796
ANALYZE  TABLE t1;
 
30797
Table   Op      Msg_type        Msg_text
 
30798
test.t1 analyze status  OK
 
30799
CHECK    TABLE t1 EXTENDED;
 
30800
Table   Op      Msg_type        Msg_text
 
30801
test.t1 check   status  OK
 
30802
CHECKSUM TABLE t1 EXTENDED;
 
30803
Table   Checksum
 
30804
test.t1 <some_value>
 
30805
OPTIMIZE TABLE t1;
 
30806
Table   Op      Msg_type        Msg_text
 
30807
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
30808
test.t1 optimize        status  OK
 
30809
# check layout success:    1
 
30810
REPAIR   TABLE t1 EXTENDED;
 
30811
Table   Op      Msg_type        Msg_text
 
30812
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30813
# check layout success:    1
 
30814
TRUNCATE t1;
 
30815
        
 
30816
# check TRUNCATE success:       1
 
30817
# check layout success:    1
 
30818
# End usability test (inc/partition_check.inc)
 
30819
DROP TABLE t1;
 
30820
CREATE TABLE t1 (
 
30821
f_int1 INTEGER,
 
30822
f_int2 INTEGER,
 
30823
f_char1 CHAR(20),
 
30824
f_char2 CHAR(20),
 
30825
f_charbig VARCHAR(1000)
 
30826
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
30827
)
 
30828
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
30829
(PARTITION part1 VALUES IN (0)
 
30830
(SUBPARTITION sp11, SUBPARTITION sp12),
 
30831
PARTITION part2 VALUES IN (1)
 
30832
(SUBPARTITION sp21, SUBPARTITION sp22),
 
30833
PARTITION part3 VALUES IN (2)
 
30834
(SUBPARTITION sp31, SUBPARTITION sp32),
 
30835
PARTITION part4 VALUES IN (NULL)
 
30836
(SUBPARTITION sp41, SUBPARTITION sp42));
 
30837
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30838
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
30839
# Start usability test (inc/partition_check.inc)
 
30840
create_command
 
30841
SHOW CREATE TABLE t1;
 
30842
Table   Create Table
 
30843
t1      CREATE TABLE `t1` (
 
30844
  `f_int1` int(11) DEFAULT NULL,
 
30845
  `f_int2` int(11) DEFAULT NULL,
 
30846
  `f_char1` char(20) DEFAULT NULL,
 
30847
  `f_char2` char(20) DEFAULT NULL,
 
30848
  `f_charbig` varchar(1000) DEFAULT NULL,
 
30849
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
30850
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
30851
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
30852
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
30853
SUBPARTITION BY HASH (f_int2 + 1)
 
30854
(PARTITION part1 VALUES IN (0)
 
30855
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
30856
  SUBPARTITION sp12 ENGINE = InnoDB),
 
30857
 PARTITION part2 VALUES IN (1)
 
30858
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
30859
  SUBPARTITION sp22 ENGINE = InnoDB),
 
30860
 PARTITION part3 VALUES IN (2)
 
30861
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
30862
  SUBPARTITION sp32 ENGINE = InnoDB),
 
30863
 PARTITION part4 VALUES IN (NULL)
 
30864
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
30865
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
30866
 
 
30867
unified filelist
 
30868
t1.frm
 
30869
t1.par
 
30870
 
 
30871
# check prerequisites-1 success:    1
 
30872
# check COUNT(*) success:    1
 
30873
# check MIN/MAX(f_int1) success:    1
 
30874
# check MIN/MAX(f_int2) success:    1
 
30875
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30876
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30877
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30878
WHERE f_int1 IN (2,3);
 
30879
ERROR 23000: Can't write; duplicate key in table 't1'
 
30880
# check prerequisites-3 success:    1
 
30881
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
 
30882
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30883
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
30884
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
30885
WHERE f_int1 IN (2,3);
 
30886
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30887
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30888
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
 
30889
CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
 
30890
WHERE f_int1 IN (2,3);
 
30891
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30892
# check read via f_int1 success: 1
 
30893
# check read via f_int2 success: 1
 
30894
        
 
30895
# check multiple-1 success:     1
 
30896
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30897
        
 
30898
# check multiple-2 success:     1
 
30899
INSERT INTO t1 SELECT * FROM t0_template
 
30900
WHERE MOD(f_int1,3) = 0;
 
30901
        
 
30902
# check multiple-3 success:     1
 
30903
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30904
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30905
AND @max_row_div2 + @max_row_div4;
 
30906
        
 
30907
# check multiple-4 success:     1
 
30908
DELETE FROM t1
 
30909
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30910
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30911
        
 
30912
# check multiple-5 success:     1
 
30913
SELECT COUNT(*) INTO @try_count FROM t0_template
 
30914
WHERE MOD(f_int1,3) = 0
 
30915
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30916
SELECT COUNT(*) INTO @clash_count
 
30917
FROM t1 INNER JOIN t0_template USING(f_int1)
 
30918
WHERE MOD(f_int1,3) = 0
 
30919
AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30920
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30921
INSERT INTO t1
 
30922
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30923
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30924
f_charbig = '#SINGLE#';
 
30925
        
 
30926
# check single-1 success:       1
 
30927
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30928
INSERT INTO t1
 
30929
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30930
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30931
f_charbig = '#SINGLE#';
 
30932
        
 
30933
# check single-2 success:       1
 
30934
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30935
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30936
UPDATE t1 SET f_int1 = @cur_value2
 
30937
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30938
        
 
30939
# check single-3 success:       1
 
30940
SET @cur_value1= -1;
 
30941
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30942
UPDATE t1 SET f_int1 = @cur_value1
 
30943
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30944
        
 
30945
# check single-4 success:       1
 
30946
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30947
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30948
        
 
30949
# check single-5 success:       1
 
30950
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30951
        
 
30952
# check single-6 success:       1
 
30953
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30954
        
 
30955
# check single-7 success:       1
 
30956
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
30957
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30958
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30959
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30960
f_charbig = '#NULL#';
 
30961
INSERT INTO t1
 
30962
SET f_int1 = NULL , f_int2 = -@max_row,
 
30963
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30964
f_charbig = '#NULL#';
 
30965
# check null success:    1
 
30966
        
 
30967
# check null-1 success:         1
 
30968
UPDATE t1 SET f_int1 = -@max_row
 
30969
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30970
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30971
        
 
30972
# check null-2 success:         1
 
30973
UPDATE t1 SET f_int1 = NULL
 
30974
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30975
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30976
        
 
30977
# check null-3 success:         1
 
30978
DELETE FROM t1
 
30979
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30980
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30981
        
 
30982
# check null-4 success:         1
 
30983
DELETE FROM t1
 
30984
WHERE f_int1 = 0 AND f_int2 = 0
 
30985
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30986
AND f_charbig = '#NULL#';
 
30987
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30988
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30989
   FROM t0_template source_tab
 
30990
WHERE MOD(f_int1,3) = 0
 
30991
AND f_int1 BETWEEN @max_row_div2 AND @max_row
 
30992
ON DUPLICATE KEY
 
30993
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
 
30994
f_int2 = 2 * @max_row + source_tab.f_int1,
 
30995
f_charbig = 'was updated';
 
30996
        
 
30997
# check unique-1-a success:     1
 
30998
        
 
30999
# check unique-1-b success:     1
 
31000
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31003
f_charbig = CONCAT('===',f_char1,'===')
 
31004
WHERE f_charbig = 'was updated';
 
31005
REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31006
SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
 
31007
   FROM t0_template source_tab
 
31008
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31009
        
 
31010
# check replace success:        1
 
31011
DELETE FROM t1
 
31012
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
 
31013
DELETE FROM t1
 
31014
WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
 
31015
f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
 
31016
UPDATE t1 SET f_int2 = f_int1,
 
31017
f_char1 = CAST(f_int1 AS CHAR),
 
31018
f_char2 = CAST(f_int1 AS CHAR),
 
31019
f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
 
31020
WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
 
31021
SET AUTOCOMMIT= 0;
 
31022
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31023
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31024
FROM t0_template source_tab
 
31025
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31026
        
 
31027
# check transactions-1 success:         1
 
31028
COMMIT WORK;
 
31029
        
 
31030
# check transactions-2 success:         1
 
31031
ROLLBACK WORK;
 
31032
        
 
31033
# check transactions-3 success:         1
 
31034
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31035
COMMIT WORK;
 
31036
ROLLBACK WORK;
 
31037
        
 
31038
# check transactions-4 success:         1
 
31039
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31040
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31041
FROM t0_template source_tab
 
31042
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31043
        
 
31044
# check transactions-5 success:         1
 
31045
ROLLBACK WORK;
 
31046
        
 
31047
# check transactions-6 success:         1
 
31048
# INFO: Storage engine used for t1 seems to be transactional.
 
31049
COMMIT;
 
31050
        
 
31051
# check transactions-7 success:         1
 
31052
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31053
COMMIT WORK;
 
31054
SET @@session.sql_mode = 'traditional';
 
31055
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
31056
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31057
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
31058
'', '', 'was inserted' FROM t0_template
 
31059
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31060
ERROR 22012: Division by 0
 
31061
COMMIT;
 
31062
        
 
31063
# check transactions-8 success:         1
 
31064
# INFO: Storage engine used for t1 seems to be able to revert
 
31065
#       changes made by the failing statement.
 
31066
SET @@session.sql_mode = '';
 
31067
SET AUTOCOMMIT= 1;
 
31068
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31069
COMMIT WORK;
 
31070
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
31071
        
 
31072
# check special-1 success:      1
 
31073
UPDATE t1 SET f_charbig = '';
 
31074
        
 
31075
# check special-2 success:      1
 
31076
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
31077
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31078
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
31079
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31081
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31082
'just inserted' FROM t0_template
 
31083
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31084
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
31085
BEGIN
 
31086
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31087
f_charbig = 'updated by trigger'
 
31088
      WHERE f_int1 = new.f_int1;
 
31089
END|
 
31090
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31091
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31093
        
 
31094
# check trigger-1 success:      1
 
31095
DROP TRIGGER trg_1;
 
31096
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31097
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31098
f_charbig = 'just inserted'
 
31099
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31100
DELETE FROM t0_aux
 
31101
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31103
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31104
'just inserted' FROM t0_template
 
31105
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31106
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
31107
BEGIN
 
31108
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31109
f_charbig = 'updated by trigger'
 
31110
      WHERE f_int1 = new.f_int1;
 
31111
END|
 
31112
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31113
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31114
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31115
        
 
31116
# check trigger-2 success:      1
 
31117
DROP TRIGGER trg_1;
 
31118
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31119
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31120
f_charbig = 'just inserted'
 
31121
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31122
DELETE FROM t0_aux
 
31123
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31124
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31125
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31126
'just inserted' FROM t0_template
 
31127
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31128
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31129
BEGIN
 
31130
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31131
f_charbig = 'updated by trigger'
 
31132
      WHERE f_int1 = new.f_int1;
 
31133
END|
 
31134
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31135
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31136
        
 
31137
# check trigger-3 success:      1
 
31138
DROP TRIGGER trg_1;
 
31139
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31140
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31141
f_charbig = 'just inserted'
 
31142
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31143
DELETE FROM t0_aux
 
31144
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31145
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31146
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31147
'just inserted' FROM t0_template
 
31148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31149
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31150
BEGIN
 
31151
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31152
f_charbig = 'updated by trigger'
 
31153
      WHERE f_int1 = - old.f_int1;
 
31154
END|
 
31155
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31156
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31157
        
 
31158
# check trigger-4 success:      1
 
31159
DROP TRIGGER trg_1;
 
31160
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31161
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31162
f_charbig = 'just inserted'
 
31163
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31164
DELETE FROM t0_aux
 
31165
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31166
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31167
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31168
'just inserted' FROM t0_template
 
31169
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31170
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31171
BEGIN
 
31172
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31173
f_charbig = 'updated by trigger'
 
31174
      WHERE f_int1 = new.f_int1;
 
31175
END|
 
31176
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31177
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31178
        
 
31179
# check trigger-5 success:      1
 
31180
DROP TRIGGER trg_1;
 
31181
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31182
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31183
f_charbig = 'just inserted'
 
31184
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31185
DELETE FROM t0_aux
 
31186
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31187
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31188
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31189
'just inserted' FROM t0_template
 
31190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31191
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31192
BEGIN
 
31193
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31194
f_charbig = 'updated by trigger'
 
31195
      WHERE f_int1 = - old.f_int1;
 
31196
END|
 
31197
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31198
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31199
        
 
31200
# check trigger-6 success:      1
 
31201
DROP TRIGGER trg_1;
 
31202
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31203
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31204
f_charbig = 'just inserted'
 
31205
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31206
DELETE FROM t0_aux
 
31207
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31208
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31209
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31210
'just inserted' FROM t0_template
 
31211
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31212
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
31213
BEGIN
 
31214
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31215
f_charbig = 'updated by trigger'
 
31216
      WHERE f_int1 = - old.f_int1;
 
31217
END|
 
31218
DELETE FROM t0_aux
 
31219
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31220
        
 
31221
# check trigger-7 success:      1
 
31222
DROP TRIGGER trg_1;
 
31223
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31224
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31225
f_charbig = 'just inserted'
 
31226
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31227
DELETE FROM t0_aux
 
31228
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31229
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31230
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31231
'just inserted' FROM t0_template
 
31232
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31233
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
31234
BEGIN
 
31235
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31236
f_charbig = 'updated by trigger'
 
31237
      WHERE f_int1 = - old.f_int1;
 
31238
END|
 
31239
DELETE FROM t0_aux
 
31240
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31241
        
 
31242
# check trigger-8 success:      1
 
31243
DROP TRIGGER trg_1;
 
31244
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31245
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31246
f_charbig = 'just inserted'
 
31247
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31248
DELETE FROM t0_aux
 
31249
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31250
DELETE FROM t1
 
31251
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31252
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31253
BEGIN
 
31254
SET new.f_int1 = old.f_int1 + @max_row,
 
31255
new.f_int2 = old.f_int2 - @max_row,
 
31256
new.f_charbig = '####updated per update trigger####';
 
31257
END|
 
31258
UPDATE t1
 
31259
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31260
f_charbig = '####updated per update statement itself####';
 
31261
        
 
31262
# check trigger-9 success:      1
 
31263
DROP TRIGGER trg_2;
 
31264
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31265
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31266
f_charbig = CONCAT('===',f_char1,'===');
 
31267
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31268
BEGIN
 
31269
SET new.f_int1 = new.f_int1 + @max_row,
 
31270
new.f_int2 = new.f_int2 - @max_row,
 
31271
new.f_charbig = '####updated per update trigger####';
 
31272
END|
 
31273
UPDATE t1
 
31274
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31275
f_charbig = '####updated per update statement itself####';
 
31276
        
 
31277
# check trigger-10 success:     1
 
31278
DROP TRIGGER trg_2;
 
31279
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31280
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31281
f_charbig = CONCAT('===',f_char1,'===');
 
31282
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31283
BEGIN
 
31284
SET new.f_int1 = @my_max1 + @counter,
 
31285
new.f_int2 = @my_min2 - @counter,
 
31286
new.f_charbig = '####updated per insert trigger####';
 
31287
SET @counter = @counter + 1;
 
31288
END|
 
31289
SET @counter = 1;
 
31290
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31291
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31292
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31293
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31294
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31295
ORDER BY f_int1;
 
31296
DROP TRIGGER trg_3;
 
31297
        
 
31298
# check trigger-11 success:     1
 
31299
DELETE FROM t1
 
31300
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31301
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31302
AND f_charbig = '####updated per insert trigger####';
 
31303
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31304
BEGIN
 
31305
SET new.f_int1 = @my_max1 + @counter,
 
31306
new.f_int2 = @my_min2 - @counter,
 
31307
new.f_charbig = '####updated per insert trigger####';
 
31308
SET @counter = @counter + 1;
 
31309
END|
 
31310
SET @counter = 1;
 
31311
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31312
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
31313
SELECT CAST(f_int1 AS CHAR),
 
31314
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31315
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31316
ORDER BY f_int1;
 
31317
DROP TRIGGER trg_3;
 
31318
        
 
31319
# check trigger-12 success:     1
 
31320
DELETE FROM t1
 
31321
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31322
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31323
AND f_charbig = '####updated per insert trigger####';
 
31324
ANALYZE  TABLE t1;
 
31325
Table   Op      Msg_type        Msg_text
 
31326
test.t1 analyze status  OK
 
31327
CHECK    TABLE t1 EXTENDED;
 
31328
Table   Op      Msg_type        Msg_text
 
31329
test.t1 check   status  OK
 
31330
CHECKSUM TABLE t1 EXTENDED;
 
31331
Table   Checksum
 
31332
test.t1 <some_value>
 
31333
OPTIMIZE TABLE t1;
 
31334
Table   Op      Msg_type        Msg_text
 
31335
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
31336
test.t1 optimize        status  OK
 
31337
# check layout success:    1
 
31338
REPAIR   TABLE t1 EXTENDED;
 
31339
Table   Op      Msg_type        Msg_text
 
31340
test.t1 repair  note    The storage engine for the table doesn't support repair
 
31341
# check layout success:    1
 
31342
TRUNCATE t1;
 
31343
        
 
31344
# check TRUNCATE success:       1
 
31345
# check layout success:    1
 
31346
# End usability test (inc/partition_check.inc)
 
31347
DROP TABLE t1;
 
31348
CREATE TABLE t1 (
 
31349
f_int1 INTEGER,
 
31350
f_int2 INTEGER,
 
31351
f_char1 CHAR(20),
 
31352
f_char2 CHAR(20),
 
31353
f_charbig VARCHAR(1000)
 
31354
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
31355
)
 
31356
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
31357
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
31358
(PARTITION part1 VALUES IN (0),
 
31359
PARTITION part2 VALUES IN (1),
 
31360
PARTITION part3 VALUES IN (NULL));
 
31361
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31362
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
31363
# Start usability test (inc/partition_check.inc)
 
31364
create_command
 
31365
SHOW CREATE TABLE t1;
 
31366
Table   Create Table
 
31367
t1      CREATE TABLE `t1` (
 
31368
  `f_int1` int(11) DEFAULT NULL,
 
31369
  `f_int2` int(11) DEFAULT NULL,
 
31370
  `f_char1` char(20) DEFAULT NULL,
 
31371
  `f_char2` char(20) DEFAULT NULL,
 
31372
  `f_charbig` varchar(1000) DEFAULT NULL,
 
31373
  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
 
31374
  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
 
31375
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
31376
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
31377
SUBPARTITION BY KEY (f_int2)
 
31378
SUBPARTITIONS 3
 
31379
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
31380
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
31381
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
30894
31382
 
30895
31383
unified filelist
30896
31384
t1.frm