Proyectos de Subversion Moodle

Rev

Rev 11 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 11 Rev 1441
Línea 31... Línea 31...
31
 * @package    core_ddl
31
 * @package    core_ddl
32
 * @category   test
32
 * @category   test
33
 * @copyright  2008 Nicolas Connault
33
 * @copyright  2008 Nicolas Connault
34
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
34
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35
 */
35
 */
36
class ddl_test extends \database_driver_testcase {
36
final class ddl_test extends \database_driver_testcase {
37
    /** @var xmldb_table[] keys are table name. Created in setUp. */
37
    /** @var xmldb_table[] keys are table name. Created in setUp. */
38
    private $tables = array();
38
    private $tables = array();
39
    /** @var array table name => array of stdClass test records loaded into that table. Created in setUp. */
39
    /** @var array table name => array of stdClass test records loaded into that table. Created in setUp. */
40
    private $records = array();
40
    private $records = array();
Línea 2129... Línea 2129...
2129
        $this->assertTrue(!empty($id));
2129
        $this->assertTrue(!empty($id));
Línea 2130... Línea 2130...
2130
 
2130
 
2131
        $rec = $DB->get_record($tablename, array('id'=>$id));
2131
        $rec = $DB->get_record($tablename, array('id'=>$id));
Línea 2132... Línea -...
2132
        $this->assertSame($maxstr, $rec->name);
-
 
2133
 
2132
        $this->assertSame($maxstr, $rec->name);
2134
        // Following test is supposed to fail in oracle.
2133
 
2135
        $maxstr = '';
2134
        $maxstr = '';
2136
        for ($i=0; $i<xmldb_field::CHAR_MAX_LENGTH; $i++) {
2135
        for ($i=0; $i<xmldb_field::CHAR_MAX_LENGTH; $i++) {
Línea 2145... Línea 2144...
2145
            $this->assertTrue(!empty($id));
2144
            $this->assertTrue(!empty($id));
Línea 2146... Línea 2145...
2146
 
2145
 
2147
            $rec = $DB->get_record($tablename, array('id'=>$id));
2146
            $rec = $DB->get_record($tablename, array('id'=>$id));
2148
            $this->assertSame($maxstr, $rec->name);
2147
            $this->assertSame($maxstr, $rec->name);
2149
        } catch (dml_exception $e) {
-
 
2150
            if ($DB->get_dbfamily() === 'oracle') {
-
 
2151
                $this->fail('Oracle does not support text fields larger than 4000 bytes, this is not a big problem for mostly ascii based languages');
-
 
2152
            } else {
2148
        } catch (dml_exception $e) {
2153
                throw $e;
-
 
2154
            }
2149
            throw $e;
Línea 2155... Línea 2150...
2155
        }
2150
        }
2156
 
2151
 
2157
        $table = new xmldb_table('testtable');
2152
        $table = new xmldb_table('testtable');
Línea 2262... Línea 2257...
2262
    /**
2257
    /**
2263
     * Data provider for test_get_enc_quoted().
2258
     * Data provider for test_get_enc_quoted().
2264
     *
2259
     *
2265
     * @return array The type-value pair fixture.
2260
     * @return array The type-value pair fixture.
2266
     */
2261
     */
2267
    public function get_enc_quoted_provider() {
2262
    public static function get_enc_quoted_provider(): array {
2268
        return array(
2263
        return array(
2269
            // Reserved: some examples from SQL-92.
2264
            // Reserved: some examples from SQL-92.
2270
            [true, 'from'],
2265
            [true, 'from'],
2271
            [true, 'table'],
2266
            [true, 'table'],
2272
            [true, 'where'],
2267
            [true, 'where'],
Línea 2296... Línea 2291...
2296
            switch ($dbfamily) {
2291
            switch ($dbfamily) {
2297
                case 'mysql':
2292
                case 'mysql':
2298
                    $this->assertSame("`$columnname`", $gen->getEncQuoted($columnname));
2293
                    $this->assertSame("`$columnname`", $gen->getEncQuoted($columnname));
2299
                    break;
2294
                    break;
2300
                case 'mssql': // The Moodle connection runs under 'QUOTED_IDENTIFIER ON'.
2295
                case 'mssql': // The Moodle connection runs under 'QUOTED_IDENTIFIER ON'.
2301
                case 'oracle':
-
 
2302
                case 'postgres':
2296
                case 'postgres':
2303
                case 'sqlite':
-
 
2304
                default:
2297
                default:
2305
                    $this->assertSame('"' . $columnname . '"', $gen->getEncQuoted($columnname));
2298
                    $this->assertSame('"' . $columnname . '"', $gen->getEncQuoted($columnname));
2306
                    break;
2299
                    break;
2307
            }
2300
            }
2308
        }
2301
        }
Línea 2311... Línea 2304...
2311
    /**
2304
    /**
2312
     * Data provider for test_sql_generator_get_rename_field_sql().
2305
     * Data provider for test_sql_generator_get_rename_field_sql().
2313
     *
2306
     *
2314
     * @return array The type-old-new tuple fixture.
2307
     * @return array The type-old-new tuple fixture.
2315
     */
2308
     */
2316
    public function sql_generator_get_rename_field_sql_provider() {
2309
    public static function sql_generator_get_rename_field_sql_provider(): array {
2317
        return array(
2310
        return array(
2318
            // Reserved: an example from SQL-92.
2311
            // Reserved: an example from SQL-92.
2319
            // Both names should be reserved.
2312
            // Both names should be reserved.
2320
            [true, 'from', 'where'],
2313
            [true, 'from', 'where'],
2321
            // Not reserved.
2314
            // Not reserved.
Línea 2348... Línea 2341...
2348
                    $this->assertSame(
2341
                    $this->assertSame(
2349
                        [ "ALTER TABLE {$prefix}$tablename CHANGE $oldcolumnname $newcolumnname BIGINT(11) NOT NULL" ],
2342
                        [ "ALTER TABLE {$prefix}$tablename CHANGE $oldcolumnname $newcolumnname BIGINT(11) NOT NULL" ],
2350
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
2343
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
2351
                    );
2344
                    );
2352
                    break;
2345
                    break;
2353
                case 'sqlite':
-
 
2354
                    // Skip it, since the DB is not supported yet.
-
 
2355
                    // BTW renaming a column name is already covered by the integration test 'testRenameField'.
-
 
2356
                    break;
-
 
2357
                case 'mssql': // The Moodle connection runs under 'QUOTED_IDENTIFIER ON'.
2346
                case 'mssql': // The Moodle connection runs under 'QUOTED_IDENTIFIER ON'.
2358
                    $this->assertSame(
2347
                    $this->assertSame(
2359
                        [ "sp_rename '{$prefix}$tablename.[$oldcolumnname]', '$newcolumnname', 'COLUMN'" ],
2348
                        [ "sp_rename '{$prefix}$tablename.[$oldcolumnname]', '$newcolumnname', 'COLUMN'" ],
2360
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
2349
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
2361
                    );
2350
                    );
2362
                    break;
2351
                    break;
2363
                case 'oracle':
-
 
2364
                case 'postgres':
2352
                case 'postgres':
2365
                default:
2353
                default:
2366
                    $this->assertSame(
2354
                    $this->assertSame(
2367
                        [ "ALTER TABLE {$prefix}$tablename RENAME COLUMN $oldcolumnname TO $newcolumnname" ],
2355
                        [ "ALTER TABLE {$prefix}$tablename RENAME COLUMN $oldcolumnname TO $newcolumnname" ],
2368
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
2356
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
Línea 2376... Línea 2364...
2376
                    $this->assertSame(
2364
                    $this->assertSame(
2377
                        [ "ALTER TABLE {$prefix}$tablename CHANGE `$oldcolumnname` `$newcolumnname` BIGINT(11) NOT NULL" ],
2365
                        [ "ALTER TABLE {$prefix}$tablename CHANGE `$oldcolumnname` `$newcolumnname` BIGINT(11) NOT NULL" ],
2378
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
2366
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
2379
                    );
2367
                    );
2380
                    break;
2368
                    break;
2381
                case 'sqlite':
-
 
2382
                    // Skip it, since the DB is not supported yet.
-
 
2383
                    // BTW renaming a column name is already covered by the integration test 'testRenameField'.
-
 
2384
                break;
-
 
2385
                case 'mssql': // The Moodle connection runs under 'QUOTED_IDENTIFIER ON'.
2369
                case 'mssql': // The Moodle connection runs under 'QUOTED_IDENTIFIER ON'.
2386
                    $this->assertSame(
2370
                    $this->assertSame(
2387
                        [ "sp_rename '{$prefix}$tablename.[$oldcolumnname]', '$newcolumnname', 'COLUMN'" ],
2371
                        [ "sp_rename '{$prefix}$tablename.[$oldcolumnname]', '$newcolumnname', 'COLUMN'" ],
2388
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
2372
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
2389
                    );
2373
                    );
2390
                    break;
2374
                    break;
2391
                case 'oracle':
-
 
2392
                case 'postgres':
2375
                case 'postgres':
2393
                default:
2376
                default:
2394
                    $this->assertSame(
2377
                    $this->assertSame(
2395
                        [ "ALTER TABLE {$prefix}$tablename RENAME COLUMN \"$oldcolumnname\" TO \"$newcolumnname\"" ],
2378
                        [ "ALTER TABLE {$prefix}$tablename RENAME COLUMN \"$oldcolumnname\" TO \"$newcolumnname\"" ],
2396
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)
2379
                        $gen->getRenameFieldSQL($table, $field, $newcolumnname)