From 4bf855771fa17a681efdc7098e6d632438f516e9 Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Sat, 7 Apr 2012 16:00:54 +0200 Subject: [PATCH] MDL-32365 fix hardcoded auto-increment on id columns --- lib/dml/database_column_info.php | 1 - lib/dml/mysqli_native_moodle_database.php | 1 - lib/dml/simpletest/testdml.php | 12 ++++++++++++ lib/dml/tests/dml_test.php | 12 ++++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/dml/database_column_info.php b/lib/dml/database_column_info.php index a31d3621181..b6198838689 100644 --- a/lib/dml/database_column_info.php +++ b/lib/dml/database_column_info.php @@ -152,7 +152,6 @@ class database_column_info { switch ($this->meta_type) { case 'R': // normalise counters (usually 'id') - $this->auto_increment = true; $this->binary = false; $this->has_default = false; $this->default_value = null; diff --git a/lib/dml/mysqli_native_moodle_database.php b/lib/dml/mysqli_native_moodle_database.php index 2f5e20f78b7..c834eb471f0 100644 --- a/lib/dml/mysqli_native_moodle_database.php +++ b/lib/dml/mysqli_native_moodle_database.php @@ -485,7 +485,6 @@ class mysqli_native_moodle_database extends moodle_database { $rawcolumn->is_nullable = $rawcolumn->null; unset($rawcolumn->null); $rawcolumn->column_default = $rawcolumn->default; unset($rawcolumn->default); $rawcolumn->column_key = $rawcolumn->key; unset($rawcolumn->default); - $rawcolumn->extra = ($rawcolumn->column_name === 'id') ? 'auto_increment' : ''; if (preg_match('/(enum|varchar)\((\d+)\)/i', $rawcolumn->column_type, $matches)) { $rawcolumn->data_type = $matches[1]; diff --git a/lib/dml/simpletest/testdml.php b/lib/dml/simpletest/testdml.php index 70044dd7a89..d3261c9faf3 100644 --- a/lib/dml/simpletest/testdml.php +++ b/lib/dml/simpletest/testdml.php @@ -825,6 +825,18 @@ class dml_test extends UnitTestCase { // Test get_columns for non-existing table returns empty array. MDL-30147 $columns = $DB->get_columns('xxxx'); $this->assertEqual(array(), $columns); + + // create something similar to "context_temp" with id column without sequence + $dbman->drop_table($table); + $table = $this->get_test_table(); + $tablename = $table->getName(); + $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null); + $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); + $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); + $dbman->create_table($table); + + $columns = $DB->get_columns($tablename); + $this->assertFalse($columns['id']->auto_increment); } public function test_get_manager() { diff --git a/lib/dml/tests/dml_test.php b/lib/dml/tests/dml_test.php index 04e62f1037e..d17bfea27bb 100644 --- a/lib/dml/tests/dml_test.php +++ b/lib/dml/tests/dml_test.php @@ -778,6 +778,18 @@ class dml_testcase extends database_driver_testcase { // Test get_columns for non-existing table returns empty array. MDL-30147 $columns = $DB->get_columns('xxxx'); $this->assertEquals(array(), $columns); + + // create something similar to "context_temp" with id column without sequence + $dbman->drop_table($table); + $table = $this->get_test_table(); + $tablename = $table->getName(); + $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null); + $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0'); + $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); + $dbman->create_table($table); + + $columns = $DB->get_columns($tablename); + $this->assertFalse($columns['id']->auto_increment); } public function test_get_manager() {