Ticket #45299: 45299.3.diff
File 45299.3.diff, 4.1 KB (added by , 6 years ago) |
---|
-
src/wp-includes/wp-db.php
2456 2456 2457 2457 $new_array = array(); 2458 2458 // Extract the column values 2459 for ( $i = 0, $j = count( $this->last_result ); $i < $j; $i++ ) { 2460 $new_array[$i] = $this->get_var( null, $x, $i ); 2459 if ( $this->last_result ) { 2460 for ( $i = 0, $j = count( $this->last_result ); $i < $j; $i++ ) { 2461 $new_array[ $i ] = $this->get_var( null, $x, $i ); 2462 } 2461 2463 } 2462 2464 return $new_array; 2463 2465 } … … 2497 2499 } elseif ( $output == OBJECT_K ) { 2498 2500 // Return an array of row objects with keys from column 1 2499 2501 // (Duplicates are discarded) 2500 foreach ( $this->last_result as $row ) { 2501 $var_by_ref = get_object_vars( $row ); 2502 $key = array_shift( $var_by_ref ); 2503 if ( ! isset( $new_array[ $key ] ) ) 2504 $new_array[ $key ] = $row; 2502 if ( $this->last_result ) { 2503 foreach ( $this->last_result as $row ) { 2504 $var_by_ref = get_object_vars( $row ); 2505 $key = array_shift( $var_by_ref ); 2506 if ( ! isset( $new_array[ $key ] ) ) { 2507 $new_array[ $key ] = $row; 2508 } 2509 } 2505 2510 } 2506 2511 return $new_array; 2507 2512 } elseif ( $output == ARRAY_A || $output == ARRAY_N ) { -
tests/phpunit/tests/db.php
156 156 * @dataProvider data_like_query 157 157 * @param $data string The haystack, raw. 158 158 * @param $like string The like phrase, raw. 159 159 * @param $result string The expected comparison result; '1' = true, '0' = false 160 160 */ 161 161 function test_like_query( $data, $like, $result ) { 162 162 global $wpdb; … … 559 559 $this->assertEquals( 'Walter Sobchak', $row->display_name ); 560 560 } 561 561 562 /** 563 * Test the `get_col()` method. 564 * 565 * @param string|null $query The query to run. 566 * @param string|array $expected The expected resulting value. 567 * @param arrray|string|null $last_result The value to assign to `$wpdb->last_result`. 568 * @param int|string $column The column index to retrieve. 569 * 570 * @dataProvider data_test_get_col 571 * 572 * @ticket 45299 573 */ 574 function test_get_col( $query, $expected, $last_result, $column ) { 575 global $wpdb; 576 577 $wpdb->last_result = $last_result; 578 579 $result = $wpdb->get_col( $query, $column ); 580 581 if ( $query ) { 582 $this->assertSame( $query, $wpdb->last_query ); 583 } 584 585 if ( is_array( $expected ) ) { 586 $this->assertSame( $expected, $result ); 587 } else { 588 $this->assertContains( $expected, $result ); 589 } 590 } 591 592 /** 593 * Data provider for testing `get_col()`. 594 * 595 * @return array { 596 * Arguments for testing `get_col()`. 597 * 598 * @type string|null $query The query to run. 599 * @type string|array $expected The resulting expected value. 600 * @type arrray|string|null $last_result The value to assign to `$wpdb->last_result`. 601 * @type int|string $column The column index to retrieve. 602 */ 603 function data_test_get_col() { 604 global $wpdb; 605 606 return array( 607 array( 608 "SELECT display_name FROM $wpdb->users", 609 'admin', 610 array(), 611 0, 612 ), 613 array( 614 "SELECT user_login, user_email FROM $wpdb->users", 615 'admin', 616 array(), 617 0, 618 ), 619 array( 620 "SELECT user_login, user_email FROM $wpdb->users", 621 'admin@example.org', 622 array(), 623 1, 624 ), 625 array( 626 "SELECT user_login, user_email FROM $wpdb->users", 627 'admin@example.org', 628 array(), 629 '1', 630 ), 631 array( 632 "SELECT user_login, user_email FROM $wpdb->users", 633 array( null ), 634 array(), 635 3, 636 ), 637 array( 638 '', 639 array(), 640 null, 641 0, 642 ), 643 array( 644 null, 645 array(), 646 '', 647 0 648 ), 649 ); 650 } 651 562 652 function test_replace() { 563 653 global $wpdb; 564 654 $rows1 = $wpdb->insert( $wpdb->users, array( 'display_name' => 'Walter Sobchak' ) );