| | 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 | } |