| 539 | |
| 540 | /** |
| 541 | * @ticket 20263 |
| 542 | */ |
| 543 | function test_query_with_backticks_does_not_cause_a_query_to_alter_all_columns_and_indices_to_run_even_if_none_have_changed() { |
| 544 | global $wpdb; |
| 545 | |
| 546 | $schema = " |
| 547 | CREATE TABLE {$wpdb->prefix}dbdelta_test2 ( |
| 548 | `id` bigint(20) NOT NULL AUTO_INCREMENT, |
| 549 | `references` varchar(255) NOT NULL, |
| 550 | PRIMARY KEY (`id`), |
| 551 | KEY `compound_key` (`id`,`references`) |
| 552 | ) |
| 553 | "; |
| 554 | |
| 555 | $wpdb->query( $schema ); |
| 556 | |
| 557 | $updates = dbDelta( $schema ); |
| 558 | |
| 559 | $table_indices = $wpdb->get_results( "SHOW INDEX FROM {$wpdb->prefix}dbdelta_test2" ); |
| 560 | $compound_key_index = wp_list_filter( $table_indices, array( 'Key_name' => 'compound_key' ) ); |
| 561 | |
| 562 | $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}dbdelta_test2" ); |
| 563 | |
| 564 | $this->assertCount( 2, $compound_key_index ); |
| 565 | $this->assertEmpty( $updates ); |
| 566 | } |
| 567 | |
| 568 | /** |
| 569 | * @ticket 20263 |
| 570 | */ |
| 571 | function test_index_with_reserved_keywords_can_be_created() { |
| 572 | global $wpdb; |
| 573 | |
| 574 | $updates = dbDelta( |
| 575 | " |
| 576 | CREATE TABLE {$wpdb->prefix}dbdelta_test ( |
| 577 | id bigint(20) NOT NULL AUTO_INCREMENT, |
| 578 | column_1 varchar(255) NOT NULL, |
| 579 | column_2 text, |
| 580 | column_3 blob, |
| 581 | `references` varchar(255) NOT NULL, |
| 582 | PRIMARY KEY (id), |
| 583 | KEY key_1 (column_1), |
| 584 | KEY compound_key (id , column_1), |
| 585 | KEY compound_key2 (id,`references`), |
| 586 | FULLTEXT KEY fulltext_key (column_1) |
| 587 | ) ENGINE=MyISAM |
| 588 | " |
| 589 | ); |
| 590 | |
| 591 | $table_indices = $wpdb->get_results( "SHOW INDEX FROM {$wpdb->prefix}dbdelta_test" ); |
| 592 | |
| 593 | $this->assertCount( 2, wp_list_filter( $table_indices, array( 'Key_name' => 'compound_key2' ) , 'AND' ) ); |
| 594 | |
| 595 | $this->assertSame( |
| 596 | array( |
| 597 | "{$wpdb->prefix}dbdelta_test.references" => "Added column {$wpdb->prefix}dbdelta_test.references", |
| 598 | 0 => "Added index {$wpdb->prefix}dbdelta_test KEY `compound_key2` (`id`,`references`)", |
| 599 | ), |
| 600 | $updates |
| 601 | ); |
| 602 | } |
| 603 | |
| 604 | /** |
| 605 | * @ticket 20263 |
| 606 | */ |
| 607 | function test_wp_get_db_schema_does_no_alter_queries_on_existing_install() { |
| 608 | $updates = dbDelta( wp_get_db_schema() ); |
| 609 | |
| 610 | $this->assertEmpty( $updates ); |
| 611 | } |
| 612 | |
| 613 | /** |
| 614 | * @ticket 20263 |
| 615 | */ |
| 616 | function test_all_possible_index_types_are_supported() { |
| 617 | global $wpdb; |
| 618 | |
| 619 | $schema = " |
| 620 | CREATE TABLE {$wpdb->prefix}dbdelta_test ( |
| 621 | id bigint(20) NOT NULL AUTO_INCREMENT, |
| 622 | column_1 varchar(255) NOT NULL, |
| 623 | column_2 text, |
| 624 | column_3 blob, |
| 625 | PRIMARY KEY (id), |
| 626 | KEY key_1 (column_1), |
| 627 | KEY compound_key (id,column_1), |
| 628 | FULLTEXT KEY fulltext_key (column_1), |
| 629 | INDEX key_2 (column_1), |
| 630 | UNIQUE KEY key_3 (column_1), |
| 631 | UNIQUE INDEX key_4 (column_1), |
| 632 | FULLTEXT INDEX key_5 (column_1), |
| 633 | ) ENGINE=MyISAM |
| 634 | "; |
| 635 | |
| 636 | $creates = dbDelta( $schema ); |
| 637 | $this->assertSame( |
| 638 | array( |
| 639 | 0 => "Added index {$wpdb->prefix}dbdelta_test KEY `key_2` (`column_1`)", |
| 640 | 1 => "Added index {$wpdb->prefix}dbdelta_test UNIQUE KEY `key_3` (`column_1`)", |
| 641 | 2 => "Added index {$wpdb->prefix}dbdelta_test UNIQUE KEY `key_4` (`column_1`)", |
| 642 | 3 => "Added index {$wpdb->prefix}dbdelta_test FULLTEXT KEY `key_5` (`column_1`)", |
| 643 | ), |
| 644 | $creates |
| 645 | ); |
| 646 | |
| 647 | $updates = dbDelta( $schema ); |
| 648 | $this->assertEmpty( $updates ); |
| 649 | } |
| 650 | |
| 651 | /** |
| 652 | * @ticket 20263 |
| 653 | */ |
| 654 | function test_index_and_key_is_the_same_and_does_not_recreate_index() { |
| 655 | global $wpdb; |
| 656 | |
| 657 | $updates = dbDelta( |
| 658 | " |
| 659 | CREATE TABLE {$wpdb->prefix}dbdelta_test ( |
| 660 | id bigint(20) NOT NULL AUTO_INCREMENT, |
| 661 | column_1 varchar(255) NOT NULL, |
| 662 | column_2 text, |
| 663 | column_3 blob, |
| 664 | PRIMARY KEY (id), |
| 665 | INDEX key_1 (column_1), |
| 666 | INDEX compound_key (id,column_1), |
| 667 | FULLTEXT INDEX fulltext_key (column_1) |
| 668 | ) ENGINE=MyISAM |
| 669 | " |
| 670 | ); |
| 671 | |
| 672 | $this->assertEmpty( $updates ); |
| 673 | } |
| 674 | |
| 675 | /** |
| 676 | * @ticket 20263 |
| 677 | */ |
| 678 | function test_indices_with_prefix_limits_are_created_and_do_not_cause_an_index_recreate() { |
| 679 | global $wpdb; |
| 680 | |
| 681 | $schema = " |
| 682 | CREATE TABLE {$wpdb->prefix}dbdelta_test ( |
| 683 | id bigint(20) NOT NULL AUTO_INCREMENT, |
| 684 | column_1 varchar(255) NOT NULL, |
| 685 | column_2 text, |
| 686 | column_3 blob, |
| 687 | PRIMARY KEY (id), |
| 688 | KEY key_1 (column_1), |
| 689 | KEY compound_key (id,column_1), |
| 690 | FULLTEXT KEY fulltext_key (column_1), |
| 691 | KEY key_2 (column_1(10)), |
| 692 | KEY key_3 (column_2(100),column_1(10)), |
| 693 | ) ENGINE=MyISAM |
| 694 | "; |
| 695 | |
| 696 | $creates = dbDelta( $schema ); |
| 697 | $this->assertSame( |
| 698 | array( |
| 699 | 0 => "Added index {$wpdb->prefix}dbdelta_test KEY `key_2` (`column_1`(10))", |
| 700 | 1 => "Added index {$wpdb->prefix}dbdelta_test KEY `key_3` (`column_2`(100),`column_1`(10))", |
| 701 | ), |
| 702 | $creates |
| 703 | ); |
| 704 | |
| 705 | $updates = dbDelta( $schema ); |
| 706 | $this->assertEmpty( $updates ); |
| 707 | } |
| 708 | |
| 709 | /** |
| 710 | * @ticket 34959 |
| 711 | */ |
| 712 | function test_index_col_name_with_order_does_not_recreate_index() { |
| 713 | global $wpdb; |
| 714 | |
| 715 | $updates = dbDelta( |
| 716 | " |
| 717 | CREATE TABLE {$wpdb->prefix}dbdelta_test ( |
| 718 | id bigint(20) NOT NULL AUTO_INCREMENT, |
| 719 | column_1 varchar(255) NOT NULL, |
| 720 | column_2 text, |
| 721 | column_3 blob, |
| 722 | PRIMARY KEY (id), |
| 723 | KEY key_1 (column_1 DESC), |
| 724 | KEY compound_key (id,column_1 ASC), |
| 725 | FULLTEXT KEY fulltext_key (column_1) |
| 726 | ) ENGINE=MyISAM |
| 727 | " |
| 728 | ); |
| 729 | |
| 730 | $this->assertEmpty( $updates ); |
| 731 | } |
| 732 | |
| 733 | /** |
| 734 | * @ticket 34873 |
| 735 | */ |
| 736 | function test_primary_key_with_single_space_does_not_recreate_index() { |
| 737 | global $wpdb; |
| 738 | |
| 739 | $updates = dbDelta( |
| 740 | " |
| 741 | CREATE TABLE {$wpdb->prefix}dbdelta_test ( |
| 742 | id bigint(20) NOT NULL AUTO_INCREMENT, |
| 743 | column_1 varchar(255) NOT NULL, |
| 744 | column_2 text, |
| 745 | column_3 blob, |
| 746 | PRIMARY KEY (id), |
| 747 | KEY key_1 (column_1), |
| 748 | KEY compound_key (id,column_1), |
| 749 | FULLTEXT KEY fulltext_key (column_1) |
| 750 | ) ENGINE=MyISAM |
| 751 | " |
| 752 | ); |
| 753 | |
| 754 | $this->assertEmpty( $updates ); |
| 755 | } |
| 756 | |
| 757 | /** |
| 758 | * @ticket 34869 |
| 759 | */ |
| 760 | function test_index_definitions_with_spaces_do_not_recreate_indices() { |
| 761 | global $wpdb; |
| 762 | |
| 763 | $updates = dbDelta( |
| 764 | " |
| 765 | CREATE TABLE {$wpdb->prefix}dbdelta_test ( |
| 766 | id bigint(20) NOT NULL AUTO_INCREMENT, |
| 767 | column_1 varchar(255) NOT NULL, |
| 768 | column_2 text, |
| 769 | column_3 blob, |
| 770 | PRIMARY KEY (id), |
| 771 | KEY key_1 (column_1), |
| 772 | KEY compound_key (id, column_1), |
| 773 | FULLTEXT KEY fulltext_key (column_1) |
| 774 | ) ENGINE=MyISAM |
| 775 | " |
| 776 | ); |
| 777 | |
| 778 | $this->assertEmpty( $updates ); |
| 779 | } |
| 780 | |
| 781 | /** |
| 782 | * @ticket 34871 |
| 783 | */ |
| 784 | function test_index_types_are_not_case_sensitive_and_do_not_recreate_indices() { |
| 785 | global $wpdb; |
| 786 | |
| 787 | $updates = dbDelta( |
| 788 | " |
| 789 | CREATE TABLE {$wpdb->prefix}dbdelta_test ( |
| 790 | id bigint(20) NOT NULL AUTO_INCREMENT, |
| 791 | column_1 varchar(255) NOT NULL, |
| 792 | column_2 text, |
| 793 | column_3 blob, |
| 794 | PRIMARY KEY (id), |
| 795 | key key_1 (column_1), |
| 796 | key compound_key (id,column_1), |
| 797 | FULLTEXT KEY fulltext_key (column_1) |
| 798 | ) ENGINE=MyISAM |
| 799 | " |
| 800 | ); |
| 801 | |
| 802 | $this->assertEmpty( $updates ); |
| 803 | } |
| 804 | |
| 805 | /** |
| 806 | * @ticket 34874 |
| 807 | */ |
| 808 | function test_index_names_are_not_case_sensitive_and_do_not_recreate_indices() { |
| 809 | $this->markTestSkipped(); |
| 810 | global $wpdb; |
| 811 | |
| 812 | $updates = dbDelta( |
| 813 | " |
| 814 | CREATE TABLE {$wpdb->prefix}dbdelta_test ( |
| 815 | id bigint(20) NOT NULL AUTO_INCREMENT, |
| 816 | column_1 varchar(255) NOT NULL, |
| 817 | column_2 text, |
| 818 | column_3 blob, |
| 819 | PRIMARY KEY (id), |
| 820 | KEY key_1 (column_1), |
| 821 | KEY COMPOUND_KEY (id,column_1), |
| 822 | FULLTEXT KEY fulltext_key (column_1) |
| 823 | ) ENGINE=MyISAM |
| 824 | " |
| 825 | ); |
| 826 | |
| 827 | $this->assertEmpty( $updates ); |
| 828 | } |