| Línea 42... | 
            Línea 42... | 
          
          
            | 42 | 
             * @category   test
  | 
            42 | 
             * @category   test
  | 
          
          
            | 43 | 
             * @copyright  2008 Nicolas Connault
  | 
            43 | 
             * @copyright  2008 Nicolas Connault
  | 
          
          
            | 44 | 
             * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  | 
            44 | 
             * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  | 
          
          
            | 45 | 
             * @covers \moodle_database
  | 
            45 | 
             * @covers \moodle_database
  | 
          
          
            | 46 | 
             */
  | 
            46 | 
             */
  | 
          
          
            | 47 | 
            class dml_test extends \database_driver_testcase {
  | 
            47 | 
            final class dml_test extends \database_driver_testcase {
  | 
          
          
            | Línea 48... | 
            Línea 48... | 
          
          
            | 48 | 
             
  | 
            48 | 
             
  | 
          
          
            | 49 | 
                protected function setUp(): void {
  | 
            49 | 
                protected function setUp(): void {
  | 
          
          
            | 50 | 
                    parent::setUp();
  | 
            50 | 
                    parent::setUp();
  | 
          
          
            | 51 | 
                    $dbman = $this->tdb->get_manager(); // Loads DDL libs.
  | 
            51 | 
                    $dbman = $this->tdb->get_manager(); // Loads DDL libs.
  | 
          
          
            | Línea 485... | 
            Línea 485... | 
          
          
            | 485 | 
                public function test_add_sql_debugging(): void {
  | 
            485 | 
                public function test_add_sql_debugging(): void {
  | 
          
          
            | 486 | 
                    global $CFG;
  | 
            486 | 
                    global $CFG;
  | 
          
          
            | 487 | 
                    $DB = $this->tdb;
  | 
            487 | 
                    $DB = $this->tdb;
  | 
          
          
            | Línea 488... | 
            Línea 488... | 
          
          
            | 488 | 
             
  | 
            488 | 
             
  | 
          
          
            | - | 
               | 
            489 | 
                    require_once($CFG->dirroot . '/lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php');
  | 
          
          
            | 489 | 
                    require_once($CFG->dirroot . '/lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php');
  | 
            490 | 
                    $databasemock = $this->getMockBuilder(\moodle_database::class)->getMock();
  | 
          
          
            | Línea 490... | 
            Línea 491... | 
          
          
            | 490 | 
                    $fixture = new \test_dml_sql_debugging_fixture($this);
  | 
            491 | 
                    $fixture = new \test_dml_sql_debugging_fixture($databasemock);
  | 
          
          
            | Línea 491... | 
            Línea 492... | 
          
          
            | 491 | 
             
  | 
            492 | 
             
  | 
          
          
            | Línea 497... | 
            Línea 498... | 
          
          
            | 497 | 
                    $this->assertEquals("SELECT * FROM {users}", $out);
  | 
            498 | 
                    $this->assertEquals("SELECT * FROM {users}", $out);
  | 
          
          
            | Línea 498... | 
            Línea 499... | 
          
          
            | 498 | 
             
  | 
            499 | 
             
  | 
          
          
            | 499 | 
                    $CFG->debugsqltrace = 1;
  | 
            500 | 
                    $CFG->debugsqltrace = 1;
  | 
          
          
            | 500 | 
                    $out = $fixture->four($sql);
  | 
            501 | 
                    $out = $fixture->four($sql);
  | 
          
          
            | 501 | 
                    $expected = <<<EOD
  | 
            502 | 
                    $expected = <<<EOD
  | 
          
          
            | 502 | 
            SELECT * FROM {users}
  | 
            503 | 
            SELECT \* FROM {users}
  | 
          
          
            | 503 | 
            -- line 64 of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to ReflectionMethod->invoke()
  | 
            504 | 
            -- line \d+ of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to ReflectionMethod->invoke\(\)
  | 
          
          
            | 504 | 
            EOD;
  | 
            505 | 
            EOD;
  | 
          
          
            | Línea 505... | 
            Línea 506... | 
          
          
            | 505 | 
                    $this->assertEquals($this->unix_to_os_dirsep($expected), $out);
  | 
            506 | 
                    $this->assertMatchesRegularExpression('@' . $this->unix_to_os_dirsep($expected) . '@', $out);
  | 
          
          
            | 506 | 
             
  | 
            507 | 
             
  | 
          
          
            | 507 | 
                    $CFG->debugsqltrace = 2;
  | 
            508 | 
                    $CFG->debugsqltrace = 2;
  | 
          
          
            | 508 | 
                    $out = $fixture->four($sql);
  | 
            509 | 
                    $out = $fixture->four($sql);
  | 
          
          
            | 509 | 
                    $expected = <<<EOD
  | 
            510 | 
                    $expected = <<<EOD
  | 
          
          
            | 510 | 
            SELECT * FROM {users}
  | 
            511 | 
            SELECT \* FROM {users}
  | 
          
          
            | 511 | 
            -- line 64 of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to ReflectionMethod->invoke()
  | 
            512 | 
            -- line \d+ of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to ReflectionMethod->invoke\(\)
  | 
          
          
            | 512 | 
            -- line 73 of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to test_dml_sql_debugging_fixture->one()
  | 
            513 | 
            -- line \d+ of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to test_dml_sql_debugging_fixture->one\(\)
  | 
          
          
            | Línea 513... | 
            Línea 514... | 
          
          
            | 513 | 
            EOD;
  | 
            514 | 
            EOD;
  | 
          
          
            | 514 | 
                    $this->assertEquals($this->unix_to_os_dirsep($expected), $out);
  | 
            515 | 
                    $this->assertMatchesRegularExpression('@' . $this->unix_to_os_dirsep($expected) . '@', $out);
  | 
          
          
            | 515 | 
             
  | 
            516 | 
             
  | 
          
          
            | 516 | 
                    $CFG->debugsqltrace = 5;
  | 
            517 | 
                    $CFG->debugsqltrace = 5;
  | 
          
          
            | 517 | 
                    $out = $fixture->four($sql);
  | 
            518 | 
                    $out = $fixture->four($sql);
  | 
          
          
            | 518 | 
                    $expected = <<<EOD
  | 
            519 | 
                    $expected = <<<EOD
  | 
          
          
            | 519 | 
            SELECT * FROM {users}
  | 
            520 | 
            SELECT \* FROM {users}
  | 
          
          
            | 520 | 
            -- line 64 of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to ReflectionMethod->invoke()
  | 
            521 | 
            -- line \d+ of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to ReflectionMethod->invoke\(\)
  | 
          
          
            | 521 | 
            -- line 73 of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to test_dml_sql_debugging_fixture->one()
  | 
            522 | 
            -- line \d+ of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to test_dml_sql_debugging_fixture->one\(\)
  | 
          
          
            | 522 | 
            -- line 82 of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to test_dml_sql_debugging_fixture->two()
  | 
            523 | 
            -- line \d+ of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to test_dml_sql_debugging_fixture->two\(\)
  | 
          
          
            | 523 | 
            -- line 91 of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to test_dml_sql_debugging_fixture->three()
  | 
            524 | 
            -- line \d+ of /lib/dml/tests/fixtures/test_dml_sql_debugging_fixture.php: call to test_dml_sql_debugging_fixture->three\(\)
  | 
          
          
            | Línea 524... | 
            Línea 525... | 
          
          
            | 524 | 
            -- line 517 of /lib/dml/tests/dml_test.php: call to test_dml_sql_debugging_fixture->four()
  | 
            525 | 
            -- line \d+ of /lib/dml/tests/dml_test.php: call to test_dml_sql_debugging_fixture->four\(\)
  | 
          
          
            | 525 | 
            EOD;
  | 
            526 | 
            EOD;
  | 
          
          
            | Línea 526... | 
            Línea 527... | 
          
          
            | 526 | 
                    $this->assertEquals($this->unix_to_os_dirsep($expected), $out);
  | 
            527 | 
                    $this->assertMatchesRegularExpression('@' . $this->unix_to_os_dirsep($expected) . '@', $out);
  | 
          
          
            | 527 | 
             
  | 
            528 | 
             
  | 
          
          
            | 528 | 
                    $CFG->debugsqltrace = 0;
  | 
            - | 
               | 
          
          
            | 529 | 
                }
  | 
            - | 
               | 
          
          
            | 530 | 
             
  | 
            529 | 
                    $CFG->debugsqltrace = 0;
  | 
          
          
            | 531 | 
                /**
  | 
            530 | 
                }
  | 
          
          
            | 532 | 
                 * Test the database debugging as SQL comment in anon class
  | 
            531 | 
             
  | 
          
          
            | 533 | 
                 *
  | 
            532 | 
                /**
  | 
          
          
            | Línea 573... | 
            Línea 572... | 
          
          
            | 573 | 
                    $DB->get_records($tablename, array('id'=>1));
  | 
            572 | 
                    $DB->get_records($tablename, array('id'=>1));
  | 
          
          
            | Línea 574... | 
            Línea 573... | 
          
          
            | 574 | 
             
  | 
            573 | 
             
  | 
          
          
            | 575 | 
                    $this->assertSame(strtok('?'), 'b');
  | 
            574 | 
                    $this->assertSame(strtok('?'), 'b');
  | 
          
          
            | Línea 576... | 
            Línea -... | 
          
          
            | 576 | 
                }
  | 
            - | 
               | 
          
          
            | 577 | 
             
  | 
            - | 
               | 
          
          
            | 578 | 
                public function test_tweak_param_names(): void {
  | 
            - | 
               | 
          
          
            | 579 | 
             
  | 
            - | 
               | 
          
          
            | 580 | 
                    // Note the tweak_param_names() method is only available in the oracle driver,
  | 
            - | 
               | 
          
          
            | 581 | 
                    // hence we look for expected results indirectly, by testing various DML methods.
  | 
            - | 
               | 
          
          
            | 582 | 
                    // with some "extreme" conditions causing the tweak to happen.
  | 
            - | 
               | 
          
          
            | 583 | 
                    $DB = $this->tdb;
  | 
            - | 
               | 
          
          
            | 584 | 
                    $dbman = $this->tdb->get_manager();
  | 
            - | 
               | 
          
          
            | 585 | 
             
  | 
            - | 
               | 
          
          
            | 586 | 
                    $table = $this->get_test_table();
  | 
            - | 
               | 
          
          
            | 587 | 
                    $tablename = $table->getName();
  | 
            - | 
               | 
          
          
            | 588 | 
             
  | 
            - | 
               | 
          
          
            | 589 | 
                    // Prepare some long column names.
  | 
            - | 
               | 
          
          
            | 590 | 
                    $intnearmax = str_pad('long_int_columnname_near_', \xmldb_field::NAME_MAX_LENGTH - 1, 'x');
  | 
            - | 
               | 
          
          
            | 591 | 
                    $decnearmax = str_pad('long_dec_columnname_near_', \xmldb_field::NAME_MAX_LENGTH - 1, 'x');
  | 
            - | 
               | 
          
          
            | 592 | 
                    $strnearmax = str_pad('long_str_columnname_near_', \xmldb_field::NAME_MAX_LENGTH - 1, 'x');
  | 
            - | 
               | 
          
          
            | 593 | 
                    $intmax = str_pad('long_int_columnname_max', \xmldb_field::NAME_MAX_LENGTH, 'x');
  | 
            - | 
               | 
          
          
            | 594 | 
                    $decmax = str_pad('long_dec_columnname_max', \xmldb_field::NAME_MAX_LENGTH, 'x');
  | 
            - | 
               | 
          
          
            | 595 | 
                    $strmax = str_pad('long_str_columnname_max', \xmldb_field::NAME_MAX_LENGTH, 'x');
  | 
            - | 
               | 
          
          
            | 596 | 
             
  | 
            - | 
               | 
          
          
            | 597 | 
                    $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
  | 
            - | 
               | 
          
          
            | 598 | 
                    // Add some correct columns with \xmldb_field::NAME_MAX_LENGTH minus 1 chars in the name.
  | 
            - | 
               | 
          
          
            | 599 | 
                    $table->add_field($intnearmax, XMLDB_TYPE_INTEGER, '10');
  | 
            - | 
               | 
          
          
            | 600 | 
                    $table->add_field($decnearmax, XMLDB_TYPE_NUMBER, '10,2');
  | 
            - | 
               | 
          
          
            | 601 | 
                    $table->add_field($strnearmax, XMLDB_TYPE_CHAR, '100');
  | 
            - | 
               | 
          
          
            | 602 | 
                    // Add some correct columns with xmldb_table::NAME_MAX_LENGTH chars in the name.
  | 
            - | 
               | 
          
          
            | 603 | 
                    $table->add_field($intmax, XMLDB_TYPE_INTEGER, '10');
  | 
            - | 
               | 
          
          
            | 604 | 
                    $table->add_field($decmax, XMLDB_TYPE_NUMBER, '10,2');
  | 
            - | 
               | 
          
          
            | 605 | 
                    $table->add_field($strmax, XMLDB_TYPE_CHAR, '100');
  | 
            - | 
               | 
          
          
            | 606 | 
             
  | 
            - | 
               | 
          
          
            | 607 | 
                    $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
  | 
            - | 
               | 
          
          
            | 608 | 
             
  | 
            - | 
               | 
          
          
            | 609 | 
                    $dbman->create_table($table);
  | 
            - | 
               | 
          
          
            | 610 | 
             
  | 
            - | 
               | 
          
          
            | 611 | 
                    $this->assertTrue($dbman->table_exists($tablename));
  | 
            - | 
               | 
          
          
            | 612 | 
             
  | 
            - | 
               | 
          
          
            | 613 | 
                    // Test insert record.
  | 
            - | 
               | 
          
          
            | 614 | 
                    $rec1 = new \stdClass();
  | 
            - | 
               | 
          
          
            | 615 | 
                    $rec1->{$intnearmax} = 62;
  | 
            - | 
               | 
          
          
            | 616 | 
                    $rec1->{$decnearmax} = 62.62;
  | 
            - | 
               | 
          
          
            | 617 | 
                    $rec1->{$strnearmax} = '62';
  | 
            - | 
               | 
          
          
            | 618 | 
                    $rec1->{$intmax} = 63;
  | 
            - | 
               | 
          
          
            | 619 | 
                    $rec1->{$decmax} = 63.63;
  | 
            - | 
               | 
          
          
            | 620 | 
                    $rec1->{$strmax} = '63';
  | 
            - | 
               | 
          
          
            | 621 | 
             
  | 
            - | 
               | 
          
          
            | 622 | 
                    // Insert_record().
  | 
            - | 
               | 
          
          
            | 623 | 
                    $rec1->id = $DB->insert_record($tablename, $rec1);
  | 
            - | 
               | 
          
          
            | 624 | 
                    $this->assertEquals($rec1, $DB->get_record($tablename, array('id' => $rec1->id)));
  | 
            - | 
               | 
          
          
            | 625 | 
             
  | 
            - | 
               | 
          
          
            | 626 | 
                    // Update_record().
  | 
            - | 
               | 
          
          
            | 627 | 
                    $DB->update_record($tablename, $rec1);
  | 
            - | 
               | 
          
          
            | 628 | 
                    $this->assertEquals($rec1, $DB->get_record($tablename, array('id' => $rec1->id)));
  | 
            - | 
               | 
          
          
            | 629 | 
             
  | 
            - | 
               | 
          
          
            | 630 | 
                    // Set_field().
  | 
            - | 
               | 
          
          
            | 631 | 
                    $rec1->{$intnearmax} = 620;
  | 
            - | 
               | 
          
          
            | 632 | 
                    $DB->set_field($tablename, $intnearmax, $rec1->{$intnearmax},
  | 
            - | 
               | 
          
          
            | 633 | 
                        array('id' => $rec1->id, $intnearmax => 62));
  | 
            - | 
               | 
          
          
            | 634 | 
                    $rec1->{$decnearmax} = 620.62;
  | 
            - | 
               | 
          
          
            | 635 | 
                    $DB->set_field($tablename, $decnearmax, $rec1->{$decnearmax},
  | 
            - | 
               | 
          
          
            | 636 | 
                        array('id' => $rec1->id, $decnearmax => 62.62));
  | 
            - | 
               | 
          
          
            | 637 | 
                    $rec1->{$strnearmax} = '620';
  | 
            - | 
               | 
          
          
            | 638 | 
                    $DB->set_field($tablename, $strnearmax, $rec1->{$strnearmax},
  | 
            - | 
               | 
          
          
            | 639 | 
                        array('id' => $rec1->id, $strnearmax => '62'));
  | 
            - | 
               | 
          
          
            | 640 | 
                    $rec1->{$intmax} = 630;
  | 
            - | 
               | 
          
          
            | 641 | 
                    $DB->set_field($tablename, $intmax, $rec1->{$intmax},
  | 
            - | 
               | 
          
          
            | 642 | 
                        array('id' => $rec1->id, $intmax => 63));
  | 
            - | 
               | 
          
          
            | 643 | 
                    $rec1->{$decmax} = 630.63;
  | 
            - | 
               | 
          
          
            | 644 | 
                    $DB->set_field($tablename, $decmax, $rec1->{$decmax},
  | 
            - | 
               | 
          
          
            | 645 | 
                        array('id' => $rec1->id, $decmax => 63.63));
  | 
            - | 
               | 
          
          
            | 646 | 
                    $rec1->{$strmax} = '630';
  | 
            - | 
               | 
          
          
            | 647 | 
                    $DB->set_field($tablename, $strmax, $rec1->{$strmax},
  | 
            - | 
               | 
          
          
            | 648 | 
                        array('id' => $rec1->id, $strmax => '63'));
  | 
            - | 
               | 
          
          
            | 649 | 
                    $this->assertEquals($rec1, $DB->get_record($tablename, array('id' => $rec1->id)));
  | 
            - | 
               | 
          
          
            | 650 | 
             
  | 
            - | 
               | 
          
          
            | 651 | 
                    // Delete_records().
  | 
            - | 
               | 
          
          
            | 652 | 
                    $rec2 = $DB->get_record($tablename, array('id' => $rec1->id));
  | 
            - | 
               | 
          
          
            | 653 | 
                    $rec2->id = $DB->insert_record($tablename, $rec2);
  | 
            - | 
               | 
          
          
            | 654 | 
                    $this->assertEquals(2, $DB->count_records($tablename));
  | 
            - | 
               | 
          
          
            | 655 | 
                    $DB->delete_records($tablename, (array) $rec2);
  | 
            - | 
               | 
          
          
            | 656 | 
                    $this->assertEquals(1, $DB->count_records($tablename));
  | 
            - | 
               | 
          
          
            | 657 | 
             
  | 
            - | 
               | 
          
          
            | 658 | 
                    // Get_recordset().
  | 
            - | 
               | 
          
          
            | 659 | 
                    $rs = $DB->get_recordset($tablename, (array) $rec1);
  | 
            - | 
               | 
          
          
            | 660 | 
                    $iterations = 0;
  | 
            - | 
               | 
          
          
            | 661 | 
                    foreach ($rs as $rec2) {
  | 
            - | 
               | 
          
          
            | 662 | 
                        $iterations++;
  | 
            - | 
               | 
          
          
            | 663 | 
                    }
  | 
            - | 
               | 
          
          
            | 664 | 
                    $rs->close();
  | 
            - | 
               | 
          
          
            | 665 | 
                    $this->assertEquals(1, $iterations);
  | 
            - | 
               | 
          
          
            | 666 | 
                    $this->assertEquals($rec1, $rec2);
  | 
            - | 
               | 
          
          
            | 667 | 
             
  | 
            - | 
               | 
          
          
            | 668 | 
                    // Get_records().
  | 
            - | 
               | 
          
          
            | 669 | 
                    $recs = $DB->get_records($tablename, (array) $rec1);
  | 
            - | 
               | 
          
          
            | 670 | 
                    $this->assertCount(1, $recs);
  | 
            - | 
               | 
          
          
            | 671 | 
                    $this->assertEquals($rec1, reset($recs));
  | 
            - | 
               | 
          
          
            | 672 | 
             
  | 
            - | 
               | 
          
          
            | 673 | 
                    // Get_fieldset_select().
  | 
            - | 
               | 
          
          
            | 674 | 
                    $select = "id = :id AND
  | 
            - | 
               | 
          
          
            | 675 | 
                               $intnearmax = :$intnearmax AND
  | 
            - | 
               | 
          
          
            | 676 | 
                               $decnearmax = :$decnearmax AND
  | 
            - | 
               | 
          
          
            | 677 | 
                               $strnearmax = :$strnearmax AND
  | 
            - | 
               | 
          
          
            | 678 | 
                               $intmax = :$intmax AND
  | 
            - | 
               | 
          
          
            | 679 | 
                               $decmax = :$decmax AND
  | 
            - | 
               | 
          
          
            | 680 | 
                               $strmax = :$strmax";
  | 
            - | 
               | 
          
          
            | 681 | 
                    $fields = $DB->get_fieldset_select($tablename, $intnearmax, $select, (array)$rec1);
  | 
            - | 
               | 
          
          
            | 682 | 
                    $this->assertCount(1, $fields);
  | 
            - | 
               | 
          
          
            | 683 | 
                    $this->assertEquals($rec1->{$intnearmax}, reset($fields));
  | 
            - | 
               | 
          
          
            | 684 | 
                    $fields = $DB->get_fieldset_select($tablename, $decnearmax, $select, (array)$rec1);
  | 
            - | 
               | 
          
          
            | 685 | 
                    $this->assertEquals($rec1->{$decnearmax}, reset($fields));
  | 
            - | 
               | 
          
          
            | 686 | 
                    $fields = $DB->get_fieldset_select($tablename, $strnearmax, $select, (array)$rec1);
  | 
            - | 
               | 
          
          
            | 687 | 
                    $this->assertEquals($rec1->{$strnearmax}, reset($fields));
  | 
            - | 
               | 
          
          
            | 688 | 
                    $fields = $DB->get_fieldset_select($tablename, $intmax, $select, (array)$rec1);
  | 
            - | 
               | 
          
          
            | 689 | 
                    $this->assertEquals($rec1->{$intmax}, reset($fields));
  | 
            - | 
               | 
          
          
            | 690 | 
                    $fields = $DB->get_fieldset_select($tablename, $decmax, $select, (array)$rec1);
  | 
            - | 
               | 
          
          
            | 691 | 
                    $this->assertEquals($rec1->{$decmax}, reset($fields));
  | 
            - | 
               | 
          
          
            | 692 | 
                    $fields = $DB->get_fieldset_select($tablename, $strmax, $select, (array)$rec1);
  | 
            - | 
               | 
          
          
            | 693 | 
                    $this->assertEquals($rec1->{$strmax}, reset($fields));
  | 
            - | 
               | 
          
          
            | 694 | 
             
  | 
            - | 
               | 
          
          
            | 695 | 
                    // Overlapping placeholders (progressive str_replace).
  | 
            - | 
               | 
          
          
            | 696 | 
                    $nearmaxparam = str_pad('allowed_long_param', \xmldb_field::NAME_MAX_LENGTH - 1, 'x');
  | 
            - | 
               | 
          
          
            | 697 | 
                    $maxparam = str_pad('allowed_long_param', \xmldb_field::NAME_MAX_LENGTH, 'x');
  | 
            - | 
               | 
          
          
            | 698 | 
                    $overlapselect = "id = :p AND
  | 
            - | 
               | 
          
          
            | 699 | 
                               $intnearmax = :param1 AND
  | 
            - | 
               | 
          
          
            | 700 | 
                               $decnearmax = :param2 AND
  | 
            - | 
               | 
          
          
            | 701 | 
                               $strnearmax = :{$nearmaxparam} AND
  | 
            - | 
               | 
          
          
            | 702 | 
                               $intmax = :{$maxparam} AND
  | 
            - | 
               | 
          
          
            | 703 | 
                               $decmax = :param_ AND
  | 
            - | 
               | 
          
          
            | 704 | 
                               $strmax = :param__";
  | 
            - | 
               | 
          
          
            | 705 | 
                    $overlapparams = array(
  | 
            - | 
               | 
          
          
            | 706 | 
                        'p' => $rec1->id,
  | 
            - | 
               | 
          
          
            | 707 | 
                        'param1' => $rec1->{$intnearmax},
  | 
            - | 
               | 
          
          
            | 708 | 
                        'param2' => $rec1->{$decnearmax},
  | 
            - | 
               | 
          
          
            | 709 | 
                        $nearmaxparam => $rec1->{$strnearmax},
  | 
            - | 
               | 
          
          
            | 710 | 
                        $maxparam => $rec1->{$intmax},
  | 
            - | 
               | 
          
          
            | 711 | 
                        'param_' => $rec1->{$decmax},
  | 
            - | 
               | 
          
          
            | 712 | 
                        'param__' => $rec1->{$strmax});
  | 
            - | 
               | 
          
          
            | 713 | 
                    $recs = $DB->get_records_select($tablename, $overlapselect, $overlapparams);
  | 
            - | 
               | 
          
          
            | 714 | 
                    $this->assertCount(1, $recs);
  | 
            - | 
               | 
          
          
            | 715 | 
                    $this->assertEquals($rec1, reset($recs));
  | 
            - | 
               | 
          
          
            | 716 | 
             
  | 
            - | 
               | 
          
          
            | 717 | 
                    // Execute().
  | 
            - | 
               | 
          
          
            | 718 | 
                    $DB->execute("DELETE FROM {{$tablename}} WHERE $select", (array)$rec1);
  | 
            - | 
               | 
          
          
            | 719 | 
                    $this->assertEquals(0, $DB->count_records($tablename));
  | 
            - | 
               | 
          
          
            | 720 | 
                }
  | 
            575 | 
                }
  | 
          
          
            | 721 | 
             
  | 
            576 | 
             
  | 
          
          
            | 722 | 
                public function test_get_tables(): void {
  | 
            577 | 
                public function test_get_tables(): void {
  | 
          
          
            | Línea 723... | 
            Línea 578... | 
          
          
            | 723 | 
                    $DB = $this->tdb;
  | 
            578 | 
                    $DB = $this->tdb;
  | 
          
          
            | Línea 3922... | 
            Línea 3777... | 
          
          
            | 3922 | 
                    $this->assertEquals(666, $DB->get_field_sql($sql));
  | 
            3777 | 
                    $this->assertEquals(666, $DB->get_field_sql($sql));
  | 
          
          
            | 3923 | 
                }
  | 
            3778 | 
                }
  | 
          
          
            | Línea 3924... | 
            Línea 3779... | 
          
          
            | 3924 | 
             
  | 
            3779 | 
             
  | 
          
          
            | 3925 | 
                /**
  | 
            3780 | 
                /**
  | 
          
          
            | 3926 | 
                 * Test DML libraries sql_cast_to_char method
  | 
            - | 
               | 
          
          
            | 3927 | 
                 *
  | 
            - | 
               | 
          
          
            | 3928 | 
                 * @covers ::sql_cast_to_char
  | 
            3781 | 
                 * Test DML libraries sql_cast_to_char method
  | 
          
          
            | 3929 | 
                 */
  | 
            3782 | 
                 */
  | 
          
          
            | 3930 | 
                public function test_cast_to_char(): void {
  | 
            3783 | 
                public function test_cast_to_char(): void {
  | 
          
          
            | 3931 | 
                    $DB = $this->tdb;
  | 
            3784 | 
                    $DB = $this->tdb;
  | 
          
          
            | Línea 4086... | 
            Línea 3939... | 
          
          
            | 4086 | 
                    $DB->insert_record($tablename, array('name'=>'abcd',   'description'=>'abcd'));
  | 
            3939 | 
                    $DB->insert_record($tablename, array('name'=>'abcd',   'description'=>'abcd'));
  | 
          
          
            | 4087 | 
                    $DB->insert_record($tablename, array('name'=>'abcdef', 'description'=>'bbcdef'));
  | 
            3940 | 
                    $DB->insert_record($tablename, array('name'=>'abcdef', 'description'=>'bbcdef'));
  | 
          
          
            | 4088 | 
                    $DB->insert_record($tablename, array('name'=>'aaaa', 'description'=>'aaaacccccccccccccccccc'));
  | 
            3941 | 
                    $DB->insert_record($tablename, array('name'=>'aaaa', 'description'=>'aaaacccccccccccccccccc'));
  | 
          
          
            | 4089 | 
                    $DB->insert_record($tablename, array('name'=>'xxxx',   'description'=>'123456789a123456789b123456789c123456789d'));
  | 
            3942 | 
                    $DB->insert_record($tablename, array('name'=>'xxxx',   'description'=>'123456789a123456789b123456789c123456789d'));
  | 
          
          
            | Línea 4090... | 
            Línea 3943... | 
          
          
            | 4090 | 
             
  | 
            3943 | 
             
  | 
          
          
            | 4091 | 
                    // Only some supported databases truncate TEXT fields for comparisons, currently MSSQL and Oracle.
  | 
            3944 | 
                    // Only some supported databases truncate TEXT fields for comparisons, currently MSSQL.
  | 
          
          
            | Línea 4092... | 
            Línea 3945... | 
          
          
            | 4092 | 
                    $dbtruncatestextfields = ($DB->get_dbfamily() == 'mssql' || $DB->get_dbfamily() == 'oracle');
  | 
            3945 | 
                    $dbtruncatestextfields = ($DB->get_dbfamily() == 'mssql');
  | 
          
          
            | 4093 | 
             
  | 
            3946 | 
             
  | 
          
          
            | Línea 4094... | 
            Línea 3947... | 
          
          
            | 4094 | 
                    if ($dbtruncatestextfields) {
  | 
            3947 | 
                    if ($dbtruncatestextfields) {
  | 
          
          
            | Línea 4164... | 
            Línea 4017... | 
          
          
            | 4164 | 
                    } catch (\moodle_exception $e) {
  | 
            4017 | 
                    } catch (\moodle_exception $e) {
  | 
          
          
            | 4165 | 
                        $family = $DB->get_dbfamily();
  | 
            4018 | 
                        $family = $DB->get_dbfamily();
  | 
          
          
            | 4166 | 
                        if ($family === 'mysql' or $family === 'mssql') {
  | 
            4019 | 
                        if ($family === 'mysql' or $family === 'mssql') {
  | 
          
          
            | 4167 | 
                            $this->fail("Unique index is accent insensitive, this may cause problems for non-ascii languages. This is usually caused by accent insensitive default collation.");
  | 
            4020 | 
                            $this->fail("Unique index is accent insensitive, this may cause problems for non-ascii languages. This is usually caused by accent insensitive default collation.");
  | 
          
          
            | 4168 | 
                        } else {
  | 
            4021 | 
                        } else {
  | 
          
          
            | 4169 | 
                            // This should not happen, PostgreSQL and Oracle do not support accent insensitive uniqueness.
  | 
            4022 | 
                            // This should not happen, PostgreSQL does not support accent insensitive uniqueness.
  | 
          
          
            | 4170 | 
                            $this->fail("Unique index is accent insensitive, this may cause problems for non-ascii languages.");
  | 
            4023 | 
                            $this->fail("Unique index is accent insensitive, this may cause problems for non-ascii languages.");
  | 
          
          
            | 4171 | 
                        }
  | 
            4024 | 
                        }
  | 
          
          
            | 4172 | 
                        throw($e);
  | 
            4025 | 
                        throw($e);
  | 
          
          
            | 4173 | 
                    }
  | 
            4026 | 
                    }
  | 
          
          
            | 4174 | 
                }
  | 
            4027 | 
                }
  | 
          
          
            | Línea 4416... | 
            Línea 4269... | 
          
          
            | 4416 | 
                    $table->add_field('charlong', XMLDB_TYPE_CHAR, '1333');
  | 
            4269 | 
                    $table->add_field('charlong', XMLDB_TYPE_CHAR, '1333');
  | 
          
          
            | 4417 | 
                    $table->add_field('description', XMLDB_TYPE_TEXT, 'big');
  | 
            4270 | 
                    $table->add_field('description', XMLDB_TYPE_TEXT, 'big');
  | 
          
          
            | 4418 | 
                    $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
  | 
            4271 | 
                    $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
  | 
          
          
            | 4419 | 
                    $dbman->create_table($table);
  | 
            4272 | 
                    $dbman->create_table($table);
  | 
          
          
            | Línea 4420... | 
            Línea 4273... | 
          
          
            | 4420 | 
             
  | 
            4273 | 
             
  | 
          
          
            | - | 
               | 
            4274 | 
                    // Regarding the 1300 length - all supported drivers allow larger values (2K+),
  | 
          
          
            | 4421 | 
                    // Regarding 1300 length - all drivers except Oracle support larger values (2K+), but this hits a limit on Oracle.
  | 
            4275 | 
                    // previously limited by Oracle, which no longer applies as Oracle support has been removed.
  | 
          
          
            | 4422 | 
                    $DB->insert_record($tablename, [
  | 
            4276 | 
                    $DB->insert_record($tablename, [
  | 
          
          
            | 4423 | 
                        'charshort' => 'áéíóú',
  | 
            4277 | 
                        'charshort' => 'áéíóú',
  | 
          
          
            | 4424 | 
                        'charlong' => str_repeat('A', 512),
  | 
            4278 | 
                        'charlong' => str_repeat('A', 512),
  | 
          
          
            | 4425 | 
                        'description' => str_repeat('X', 1300),
  | 
            4279 | 
                        'description' => str_repeat('X', 1300),
  | 
          
          
            | Línea 4475... | 
            Línea 4329... | 
          
          
            | 4475 | 
                        '333',
  | 
            4329 | 
                        '333',
  | 
          
          
            | 4476 | 
                    ], $DB->get_fieldset_select($tablename, $fieldsql, ''));
  | 
            4330 | 
                    ], $DB->get_fieldset_select($tablename, $fieldsql, ''));
  | 
          
          
            | Línea 4477... | 
            Línea 4331... | 
          
          
            | 4477 | 
             
  | 
            4331 | 
             
  | 
          
          
            | Línea 4478... | 
            Línea 4332... | 
          
          
            | 4478 | 
                }
  | 
            4332 | 
                }
  | 
          
          
            | 4479 | 
             
  | 
            4333 | 
             
  | 
          
          
            | 4480 | 
                public function sql_concat_join_provider() {
  | 
            4334 | 
                public static function sql_concat_join_provider(): array {
  | 
          
          
            | 4481 | 
                    return array(
  | 
            4335 | 
                    return array(
  | 
          
          
            | 4482 | 
                        // All strings.
  | 
            4336 | 
                        // All strings.
  | 
          
          
            | 4483 | 
                        array(
  | 
            4337 | 
                        array(
  | 
          
          
            | Línea 4668... | 
            Línea 4522... | 
          
          
            | 4668 | 
                        ],
  | 
            4522 | 
                        ],
  | 
          
          
            | 4669 | 
                        (object) [
  | 
            4523 | 
                        (object) [
  | 
          
          
            | 4670 | 
                            'name' => 'Bob',
  | 
            4524 | 
                            'name' => 'Bob',
  | 
          
          
            | 4671 | 
                            'falias' => 'Dan, Grace',
  | 
            4525 | 
                            'falias' => 'Dan, Grace',
  | 
          
          
            | 4672 | 
                        ],
  | 
            4526 | 
                        ],
  | 
          
          
            | 4673 | 
                    ], $DB->get_records_sql($sql));
  | 
            4527 | 
                    ], array_values($DB->get_records_sql($sql)));
  | 
          
          
            | - | 
               | 
            4528 | 
                }
  | 
          
          
            | - | 
               | 
            4529 | 
             
  | 
          
          
            | - | 
               | 
            4530 | 
                /**
  | 
          
          
            | - | 
               | 
            4531 | 
                 * Test that the SQL_INT_MAX constant can be used for all insert, update, select and delete queries
  | 
          
          
            | - | 
               | 
            4532 | 
                 */
  | 
          
          
            | - | 
               | 
            4533 | 
                public function test_sql_max_int(): void {
  | 
          
          
            | - | 
               | 
            4534 | 
                    $DB = $this->tdb;
  | 
          
          
            | - | 
               | 
            4535 | 
                    $dbman = $DB->get_manager();
  | 
          
          
            | - | 
               | 
            4536 | 
             
  | 
          
          
            | - | 
               | 
            4537 | 
                    $table = $this->get_test_table();
  | 
          
          
            | - | 
               | 
            4538 | 
                    $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
  | 
          
          
            | - | 
               | 
            4539 | 
                    $table->add_field('intfield', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
  | 
          
          
            | - | 
               | 
            4540 | 
                    $table->add_field('charfield', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
  | 
          
          
            | - | 
               | 
            4541 | 
                    $table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
  | 
          
          
            | - | 
               | 
            4542 | 
                    $dbman->create_table($table);
  | 
          
          
            | - | 
               | 
            4543 | 
             
  | 
          
          
            | - | 
               | 
            4544 | 
                    $tablename = $table->getName();
  | 
          
          
            | - | 
               | 
            4545 | 
             
  | 
          
          
            | - | 
               | 
            4546 | 
                    // Insert.
  | 
          
          
            | - | 
               | 
            4547 | 
                    $id = $DB->insert_record($tablename, ['intfield' => SQL_INT_MAX, 'charfield' => 'Test']);
  | 
          
          
            | - | 
               | 
            4548 | 
                    $this->assertEquals((object) [
  | 
          
          
            | - | 
               | 
            4549 | 
                        'intfield' => SQL_INT_MAX,
  | 
          
          
            | - | 
               | 
            4550 | 
                        'charfield' => 'Test',
  | 
          
          
            | - | 
               | 
            4551 | 
                    ], $DB->get_record($tablename, ['id' => $id], 'intfield, charfield'));
  | 
          
          
            | - | 
               | 
            4552 | 
             
  | 
          
          
            | - | 
               | 
            4553 | 
                    // Update.
  | 
          
          
            | - | 
               | 
            4554 | 
                    $DB->set_field($tablename, 'charfield', 'Test 2', ['intfield' => SQL_INT_MAX]);
  | 
          
          
            | - | 
               | 
            4555 | 
                    $this->assertEquals((object) [
  | 
          
          
            | - | 
               | 
            4556 | 
                        'intfield' => SQL_INT_MAX,
  | 
          
          
            | - | 
               | 
            4557 | 
                        'charfield' => 'Test 2',
  | 
          
          
            | - | 
               | 
            4558 | 
                    ], $DB->get_record($tablename, ['id' => $id], 'intfield, charfield'));
  | 
          
          
            | - | 
               | 
            4559 | 
             
  | 
          
          
            | - | 
               | 
            4560 | 
                    // Select.
  | 
          
          
            | - | 
               | 
            4561 | 
                    $this->assertEquals('Test 2', $DB->get_field($tablename, 'charfield', ['intfield' => SQL_INT_MAX]));
  | 
          
          
            | - | 
               | 
            4562 | 
             
  | 
          
          
            | - | 
               | 
            4563 | 
                    // Delete.
  | 
          
          
            | - | 
               | 
            4564 | 
                    $DB->delete_records($tablename, ['intfield' => SQL_INT_MAX]);
  | 
          
          
            | - | 
               | 
            4565 | 
                    $this->assertFalse($DB->record_exists($tablename, ['id' => $id]));
  | 
          
          
            | 4674 | 
                }
  | 
            4566 | 
                }
  | 
          
          
            | Línea 4675... | 
            Línea 4567... | 
          
          
            | 4675 | 
             
  | 
            4567 | 
             
  | 
          
          
            | 4676 | 
                public function test_sql_fullname(): void {
  | 
            4568 | 
                public function test_sql_fullname(): void {
  | 
          
          
            | 4677 | 
                    $DB = $this->tdb;
  | 
            4569 | 
                    $DB = $this->tdb;
  | 
          
          
            | Línea 5034... | 
            Línea 4926... | 
          
          
            | 5034 | 
                    $DB->insert_record($tablename, array('course' => 3, 'content' => 'world', 'name'=>'abc'));
  | 
            4926 | 
                    $DB->insert_record($tablename, array('course' => 3, 'content' => 'world', 'name'=>'abc'));
  | 
          
          
            | 5035 | 
                    $DB->insert_record($tablename, array('course' => 5, 'content' => 'hello', 'name'=>'def'));
  | 
            4927 | 
                    $DB->insert_record($tablename, array('course' => 5, 'content' => 'hello', 'name'=>'def'));
  | 
          
          
            | 5036 | 
                    $DB->insert_record($tablename, array('course' => 2, 'content' => 'universe', 'name'=>'abc'));
  | 
            4928 | 
                    $DB->insert_record($tablename, array('course' => 2, 'content' => 'universe', 'name'=>'abc'));
  | 
          
          
            | Línea 5037... | 
            Línea 4929... | 
          
          
            | 5037 | 
             
  | 
            4929 | 
             
  | 
          
          
            | 5038 | 
                    // Test grouping by expressions in the query. MDL-26819. Note that there are 4 ways:
  | 
            4930 | 
                    // Test grouping by expressions in the query. MDL-26819. Note that there are 4 ways:
  | 
          
          
            | 5039 | 
                    // - By column position (GROUP by 1) - Not supported by mssql & oracle
  | 
            4931 | 
                    // - By column position (GROUP by 1) - Not supported by mssql
  | 
          
          
            | 5040 | 
                    // - By column name (GROUP by course) - Supported by all, but leading to wrong results
  | 
            4932 | 
                    // - By column name (GROUP by course) - Supported by all, but leading to wrong results
  | 
          
          
            | 5041 | 
                    // - By column alias (GROUP by casecol) - Not supported by mssql & oracle
  | 
            4933 | 
                    // - By column alias (GROUP by casecol) - Not supported by mssql
  | 
          
          
            | 5042 | 
                    // - By complete expression (GROUP BY CASE ...) - 100% cross-db, this test checks it
  | 
            4934 | 
                    // - By complete expression (GROUP BY CASE ...) - 100% cross-db, this test checks it
  | 
          
          
            | 5043 | 
                    $sql = "SELECT (CASE WHEN course = 3 THEN 1 ELSE 0 END) AS casecol,
  | 
            4935 | 
                    $sql = "SELECT (CASE WHEN course = 3 THEN 1 ELSE 0 END) AS casecol,
  | 
          
          
            | 5044 | 
                                   COUNT(1) AS countrecs,
  | 
            4936 | 
                                   COUNT(1) AS countrecs,
  | 
          
          
            | 5045 | 
                                   MAX(name) AS maxname
  | 
            4937 | 
                                   MAX(name) AS maxname
  | 
          
          
            | Línea 5107... | 
            Línea 4999... | 
          
          
            | 5107 | 
                    // Both limitfrom and limitnum.
  | 
            4999 | 
                    // Both limitfrom and limitnum.
  | 
          
          
            | 5108 | 
                    $records = $DB->get_records_sql($sql, null, 2, 2);
  | 
            5000 | 
                    $records = $DB->get_records_sql($sql, null, 2, 2);
  | 
          
          
            | 5109 | 
                    $this->assertCount(1, $records);
  | 
            5001 | 
                    $this->assertCount(1, $records);
  | 
          
          
            | 5110 | 
                    $this->assertEquals(5, reset($records)->course);
  | 
            5002 | 
                    $this->assertEquals(5, reset($records)->course);
  | 
          
          
            | Línea 5111... | 
            Línea 5003... | 
          
          
            | 5111 | 
             
  | 
            5003 | 
             
  | 
          
          
            | 5112 | 
                    // We have sql like this in moodle, this syntax breaks on older versions of sqlite for example..
  | 
            5004 | 
                    // We have sql like this in moodle.
  | 
          
          
            | 5113 | 
                    $sql = "SELECT a.id AS id, a.course AS course
  | 
            5005 | 
                    $sql = "SELECT a.id AS id, a.course AS course
  | 
          
          
            | 5114 | 
                              FROM {{$tablename}} a
  | 
            5006 | 
                              FROM {{$tablename}} a
  | 
          
          
            | 5115 | 
                              JOIN (SELECT * FROM {{$tablename}}) b ON a.id = b.id
  | 
            5007 | 
                              JOIN (SELECT * FROM {{$tablename}}) b ON a.id = b.id
  | 
          
          
            | Línea 5670... | 
            Línea 5562... | 
          
          
            | 5670 | 
                    // Open second connection.
  | 
            5562 | 
                    // Open second connection.
  | 
          
          
            | 5671 | 
                    $cfg = $DB->export_dbconfig();
  | 
            5563 | 
                    $cfg = $DB->export_dbconfig();
  | 
          
          
            | 5672 | 
                    if (!isset($cfg->dboptions)) {
  | 
            5564 | 
                    if (!isset($cfg->dboptions)) {
  | 
          
          
            | 5673 | 
                        $cfg->dboptions = array();
  | 
            5565 | 
                        $cfg->dboptions = array();
  | 
          
          
            | 5674 | 
                    }
  | 
            5566 | 
                    }
  | 
          
          
            | 5675 | 
                    // If we have a readonly slave situation, we need to either observe
  | 
            5567 | 
                    // If we have a readonly replica situation, we need to either observe
  | 
          
          
            | 5676 | 
                    // the latency, or if the latency is not specified we need to take
  | 
            5568 | 
                    // the latency, or if the latency is not specified we need to take
  | 
          
          
            | 5677 | 
                    // the slave out because the table may not have propagated yet.
  | 
            5569 | 
                    // the replica out because the table may not have propagated yet.
  | 
          
          
            | 5678 | 
                    if (isset($cfg->dboptions['readonly'])) {
  | 
            5570 | 
                    if (isset($cfg->dboptions['readonly'])) {
  | 
          
          
            | 5679 | 
                        if (isset($cfg->dboptions['readonly']['latency'])) {
  | 
            5571 | 
                        if (isset($cfg->dboptions['readonly']['latency'])) {
  | 
          
          
            | 5680 | 
                            usleep(intval(1000000 * $cfg->dboptions['readonly']['latency']));
  | 
            5572 | 
                            usleep(intval(1000000 * $cfg->dboptions['readonly']['latency']));
  | 
          
          
            | 5681 | 
                        } else {
  | 
            5573 | 
                        } else {
  | 
          
          
            | 5682 | 
                            unset($cfg->dboptions['readonly']);
  | 
            5574 | 
                            unset($cfg->dboptions['readonly']);
  | 
          
          
            | Línea 6279... | 
            Línea 6171... | 
          
          
            | 6279 | 
                 * - a string representing the expected DB version
  | 
            6171 | 
                 * - a string representing the expected DB version
  | 
          
          
            | 6280 | 
                 *
  | 
            6172 | 
                 *
  | 
          
          
            | 6281 | 
                 * @return array[]
  | 
            6173 | 
                 * @return array[]
  | 
          
          
            | 6282 | 
                 * @see \mysqli_native_moodle_database::get_server_info
  | 
            6174 | 
                 * @see \mysqli_native_moodle_database::get_server_info
  | 
          
          
            | 6283 | 
                 */
  | 
            6175 | 
                 */
  | 
          
          
            | 6284 | 
                public function get_server_info_mysql_provider() {
  | 
            6176 | 
                public static function get_server_info_mysql_provider(): array {
  | 
          
          
            | 6285 | 
                    return [
  | 
            6177 | 
                    return [
  | 
          
          
            | 6286 | 
                        'MySQL 5.7.39 - MySQLi version' => [
  | 
            6178 | 
                        'MySQL 5.7.39 - MySQLi version' => [
  | 
          
          
            | 6287 | 
                            '5.7.39-log',
  | 
            6179 | 
                            '5.7.39-log',
  | 
          
          
            | 6288 | 
                            '',
  | 
            6180 | 
                            '',
  | 
          
          
            | 6289 | 
                            false,
  | 
            6181 | 
                            false,
  | 
          
          
            | Línea 6396... | 
            Línea 6288... | 
          
          
            | 6396 | 
                        "Found invalid DB server version when reading version from DB i.e. RPL_VERSION_HACK: '{$version}' ({$description}).");
  | 
            6288 | 
                        "Found invalid DB server version when reading version from DB i.e. RPL_VERSION_HACK: '{$version}' ({$description}).");
  | 
          
          
            | 6397 | 
                    $this->assertMatchesRegularExpression('/^\d+\.\d+\.\d+$/', $version,
  | 
            6289 | 
                    $this->assertMatchesRegularExpression('/^\d+\.\d+\.\d+$/', $version,
  | 
          
          
            | 6398 | 
                        "Found invalid DB server version format when reading version from DB: '{$version}' ({$description}).");
  | 
            6290 | 
                        "Found invalid DB server version format when reading version from DB: '{$version}' ({$description}).");
  | 
          
          
            | 6399 | 
                    $db2->dispose();
  | 
            6291 | 
                    $db2->dispose();
  | 
          
          
            | 6400 | 
                }
  | 
            6292 | 
                }
  | 
          
          
            | - | 
               | 
            6293 | 
             
  | 
          
          
            | - | 
               | 
            6294 | 
                /**
  | 
          
          
            | - | 
               | 
            6295 | 
                 * Test the COUNT() window function with the actual DB Server.
  | 
          
          
            | - | 
               | 
            6296 | 
                 *
  | 
          
          
            | - | 
               | 
            6297 | 
                 * @covers \moodle_database::get_counted_recordset_sql()
  | 
          
          
            | - | 
               | 
            6298 | 
                 * @covers \moodle_database::get_counted_records_sql()
  | 
          
          
            | - | 
               | 
            6299 | 
                 * @covers \moodle_database::generate_fullcount_sql()
  | 
          
          
            | - | 
               | 
            6300 | 
                 * @return void
  | 
          
          
            | - | 
               | 
            6301 | 
                 */
  | 
          
          
            | - | 
               | 
            6302 | 
                public function test_count_window_function(): void {
  | 
          
          
            | - | 
               | 
            6303 | 
                    $DB = $this->tdb;
  | 
          
          
            | - | 
               | 
            6304 | 
                    $dbman = $DB->get_manager();
  | 
          
          
            | - | 
               | 
            6305 | 
             
  | 
          
          
            | - | 
               | 
            6306 | 
                    $table = $this->get_test_table();
  | 
          
          
            | - | 
               | 
            6307 | 
                    $tablename = $table->getName();
  | 
          
          
            | - | 
               | 
            6308 | 
             
  | 
          
          
            | - | 
               | 
            6309 | 
                    $table->add_field('id', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
  | 
          
          
            | - | 
               | 
            6310 | 
                    $table->add_field('course', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0');
  | 
          
          
            | - | 
               | 
            6311 | 
                    $table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
  | 
          
          
            | - | 
               | 
            6312 | 
                    $dbman->create_table($table);
  | 
          
          
            | - | 
               | 
            6313 | 
             
  | 
          
          
            | - | 
               | 
            6314 | 
                    for ($i = 1; $i <= 5; $i++) {
  | 
          
          
            | - | 
               | 
            6315 | 
                        $DB->insert_record($tablename, ['course' => $i], false);
  | 
          
          
            | - | 
               | 
            6316 | 
                    }
  | 
          
          
            | - | 
               | 
            6317 | 
             
  | 
          
          
            | - | 
               | 
            6318 | 
                    // Test with the get_recordset_select().
  | 
          
          
            | - | 
               | 
            6319 | 
                    $rs = $DB->get_counted_recordset_sql(
  | 
          
          
            | - | 
               | 
            6320 | 
                        sql: "SELECT * FROM {{$tablename}}",
  | 
          
          
            | - | 
               | 
            6321 | 
                        fullcountcolumn: 'fullcount',
  | 
          
          
            | - | 
               | 
            6322 | 
                        sort: "course DESC",
  | 
          
          
            | - | 
               | 
            6323 | 
                        limitfrom: 1,
  | 
          
          
            | - | 
               | 
            6324 | 
                        limitnum: 3,
  | 
          
          
            | - | 
               | 
            6325 | 
                    );
  | 
          
          
            | - | 
               | 
            6326 | 
                    // Check whether the fullcount column returns the correct number.
  | 
          
          
            | - | 
               | 
            6327 | 
                    $this->assertEquals(5, $rs->current()->fullcount);
  | 
          
          
            | - | 
               | 
            6328 | 
                    // Check whether the `limitfrom` works properly.
  | 
          
          
            | - | 
               | 
            6329 | 
                    $this->assertEquals(4, $rs->current()->course);
  | 
          
          
            | - | 
               | 
            6330 | 
                    // Check whether the 'limitnum' works properly.
  | 
          
          
            | - | 
               | 
            6331 | 
                    $this->assertEquals(3, iterator_count($rs));
  | 
          
          
            | - | 
               | 
            6332 | 
             
  | 
          
          
            | - | 
               | 
            6333 | 
                    // Test with the get_records_select().
  | 
          
          
            | - | 
               | 
            6334 | 
                    $rs = $DB->get_counted_records_sql(
  | 
          
          
            | - | 
               | 
            6335 | 
                        sql: "SELECT * FROM {{$tablename}}",
  | 
          
          
            | - | 
               | 
            6336 | 
                        fullcountcolumn: 'fullcount',
  | 
          
          
            | - | 
               | 
            6337 | 
                        sort: "course DESC",
  | 
          
          
            | - | 
               | 
            6338 | 
                        limitfrom: 3,
  | 
          
          
            | - | 
               | 
            6339 | 
                        limitnum: 2,
  | 
          
          
            | - | 
               | 
            6340 | 
                    );
  | 
          
          
            | - | 
               | 
            6341 | 
                    $resetrs = reset($rs);
  | 
          
          
            | - | 
               | 
            6342 | 
                    // Check whether the fullcount column returns the correct number.
  | 
          
          
            | - | 
               | 
            6343 | 
                    $this->assertEquals(5, $resetrs->fullcount);
  | 
          
          
            | - | 
               | 
            6344 | 
                    // Check whether the 'limitfrom' works properly.
  | 
          
          
            | - | 
               | 
            6345 | 
                    $this->assertEquals(2, $resetrs->course);
  | 
          
          
            | - | 
               | 
            6346 | 
                    // Check whether the 'limitnum' works properly.
  | 
          
          
            | - | 
               | 
            6347 | 
                    $this->assertEquals(2, count($rs));
  | 
          
          
            | - | 
               | 
            6348 | 
                }
  | 
          
          
            | 6401 | 
            }
  | 
            6349 | 
            }
  | 
          
          
            | Línea 6402... | 
            Línea 6350... | 
          
          
            | 6402 | 
             
  | 
            6350 | 
             
  | 
          
          
            | 6403 | 
            /**
  | 
            6351 | 
            /**
  | 
          
          
            | 6404 | 
             * This class is not a proper subclass of moodle_database. It is
  | 
            6352 | 
             * This class is not a proper subclass of moodle_database. It is
  | 
          
          
            | Línea 6416... | 
            Línea 6364... | 
          
          
            | 6416 | 
                public function get_dbfamily() {}
  | 
            6364 | 
                public function get_dbfamily() {}
  | 
          
          
            | 6417 | 
                protected function get_dbtype() {}
  | 
            6365 | 
                protected function get_dbtype() {}
  | 
          
          
            | 6418 | 
                protected function get_dblibrary() {}
  | 
            6366 | 
                protected function get_dblibrary() {}
  | 
          
          
            | 6419 | 
                public function get_name() {}
  | 
            6367 | 
                public function get_name() {}
  | 
          
          
            | 6420 | 
                public function get_configuration_help() {}
  | 
            6368 | 
                public function get_configuration_help() {}
  | 
          
          
            | 6421 | 
                public function connect($dbhost, $dbuser, $dbpass, $dbname, $prefix, array $dboptions=null) {}
  | 
            6369 | 
                public function connect($dbhost, $dbuser, $dbpass, $dbname, $prefix, ?array $dboptions=null) {}
  | 
          
          
            | 6422 | 
                public function get_server_info() {}
  | 
            6370 | 
                public function get_server_info() {}
  | 
          
          
            | 6423 | 
                protected function allowed_param_types() {}
  | 
            6371 | 
                protected function allowed_param_types() {}
  | 
          
          
            | 6424 | 
                public function get_last_error() {}
  | 
            6372 | 
                public function get_last_error() {}
  | 
          
          
            | 6425 | 
                public function get_tables($usecache=true) {}
  | 
            6373 | 
                public function get_tables($usecache=true) {}
  | 
          
          
            | 6426 | 
                public function get_indexes($table) {}
  | 
            6374 | 
                public function get_indexes($table) {}
  | 
          
          
            | Línea 6429... | 
            Línea 6377... | 
          
          
            | 6429 | 
                }
  | 
            6377 | 
                }
  | 
          
          
            | 6430 | 
                protected function normalise_value($column, $value) {}
  | 
            6378 | 
                protected function normalise_value($column, $value) {}
  | 
          
          
            | 6431 | 
                public function set_debug($state) {}
  | 
            6379 | 
                public function set_debug($state) {}
  | 
          
          
            | 6432 | 
                public function get_debug() {}
  | 
            6380 | 
                public function get_debug() {}
  | 
          
          
            | 6433 | 
                public function change_database_structure($sql, $tablenames = null) {}
  | 
            6381 | 
                public function change_database_structure($sql, $tablenames = null) {}
  | 
          
          
            | 6434 | 
                public function execute($sql, array $params=null) {}
  | 
            6382 | 
                public function execute($sql, ?array $params=null) {}
  | 
          
          
            | 6435 | 
                public function get_recordset_sql($sql, array $params=null, $limitfrom=0, $limitnum=0) {}
  | 
            6383 | 
                public function get_recordset_sql($sql, ?array $params=null, $limitfrom=0, $limitnum=0) {}
  | 
          
          
            | 6436 | 
                public function get_records_sql($sql, array $params=null, $limitfrom=0, $limitnum=0) {}
  | 
            6384 | 
                public function get_records_sql($sql, ?array $params=null, $limitfrom=0, $limitnum=0) {}
  | 
          
          
            | 6437 | 
                public function get_fieldset_sql($sql, array $params=null) {}
  | 
            6385 | 
                public function get_fieldset_sql($sql, ?array $params=null) {}
  | 
          
          
            | 6438 | 
                public function insert_record_raw($table, $params, $returnid=true, $bulk=false, $customsequence=false) {}
  | 
            6386 | 
                public function insert_record_raw($table, $params, $returnid=true, $bulk=false, $customsequence=false) {}
  | 
          
          
            | 6439 | 
                public function insert_record($table, $dataobject, $returnid=true, $bulk=false) {}
  | 
            6387 | 
                public function insert_record($table, $dataobject, $returnid=true, $bulk=false) {}
  | 
          
          
            | 6440 | 
                public function import_record($table, $dataobject) {}
  | 
            6388 | 
                public function import_record($table, $dataobject) {}
  | 
          
          
            | 6441 | 
                public function update_record_raw($table, $params, $bulk=false) {}
  | 
            6389 | 
                public function update_record_raw($table, $params, $bulk=false) {}
  | 
          
          
            | 6442 | 
                public function update_record($table, $dataobject, $bulk=false) {}
  | 
            6390 | 
                public function update_record($table, $dataobject, $bulk=false) {}
  | 
          
          
            | 6443 | 
                public function set_field_select($table, $newfield, $newvalue, $select, array $params=null) {}
  | 
            6391 | 
                public function set_field_select($table, $newfield, $newvalue, $select, ?array $params=null) {}
  | 
          
          
            | 6444 | 
                public function delete_records_select($table, $select, array $params=null) {}
  | 
            6392 | 
                public function delete_records_select($table, $select, ?array $params=null) {}
  | 
          
          
            | 6445 | 
                public function sql_concat(...$arr) {}
  | 
            6393 | 
                public function sql_concat(...$arr) {}
  | 
          
          
            | 6446 | 
                public function sql_concat_join($separator="' '", $elements=array()) {}
  | 
            6394 | 
                public function sql_concat_join($separator="' '", $elements=array()) {}
  | 
          
          
            | 6447 | 
                public function sql_group_concat(string $field, string $separator = ', ', string $sort = ''): string {
  | 
            6395 | 
                public function sql_group_concat(string $field, string $separator = ', ', string $sort = ''): string {
  | 
          
          
            | 6448 | 
                    return '';
  | 
            6396 | 
                    return '';
  | 
          
          
            | 6449 | 
                }
  | 
            6397 | 
                }
  |