~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-06-25 12:55:45 UTC
  • mfrom: (0.2.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 9.
  • Revision ID: james.westby@ubuntu.com-20090625125545-v27uqh8rlsj8uh2y
Tags: upstream-5.1.34
ImportĀ upstreamĀ versionĀ 5.1.34

Show diffs side-by-side

added added

removed removed

Lines of Context:
7538
7538
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7539
7539
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7540
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) */
19207
 
 
19208
 
unified filelist
19209
 
t1.frm
19210
 
t1.par
19211
 
 
19212
 
# check prerequisites-1 success:    1
19213
 
# check COUNT(*) success:    1
19214
 
# check MIN/MAX(f_int1) success:    1
19215
 
# check MIN/MAX(f_int2) success:    1
19216
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19217
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19218
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19219
 
WHERE f_int1 IN (2,3);
19220
 
ERROR 23000: Can't write; duplicate key in table 't1'
 
7541
ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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) */
 
19207
 
 
19208
unified filelist
 
19209
t1.frm
 
19210
t1.par
 
19211
 
 
19212
# check prerequisites-1 success:    1
 
19213
# check COUNT(*) success:    1
 
19214
# check MIN/MAX(f_int1) success:    1
 
19215
# check MIN/MAX(f_int2) success:    1
 
19216
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19217
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19218
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19219
WHERE f_int1 IN (2,3);
 
19220
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
19221
19221
# check prerequisites-3 success:    1
19222
19222
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19223
19223
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19731
19731
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19732
19732
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19733
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) */
31382
 
 
31383
 
unified filelist
31384
 
t1.frm
31385
 
t1.par
31386
 
 
31387
 
# check prerequisites-1 success:    1
31388
 
# check COUNT(*) success:    1
31389
 
# check MIN/MAX(f_int1) success:    1
31390
 
# check MIN/MAX(f_int2) success:    1
31391
 
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31392
 
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
31393
 
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
31394
 
WHERE f_int1 IN (2,3);
31395
 
ERROR 23000: Can't write; duplicate key in table 't1'
 
19734
ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'PRIMARY'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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: Duplicate entry '2-2' for key 'uidx1'
 
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) */
 
31382
 
 
31383
unified filelist
 
31384
t1.frm
 
31385
t1.par
 
31386
 
 
31387
# check prerequisites-1 success:    1
 
31388
# check COUNT(*) success:    1
 
31389
# check MIN/MAX(f_int1) success:    1
 
31390
# check MIN/MAX(f_int2) success:    1
 
31391
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31392
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31393
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31394
WHERE f_int1 IN (2,3);
 
31395
ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
31396
31396
# check prerequisites-3 success:    1
31397
31397
# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
31398
31398
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)