From: tjhunt Date: Wed, 20 Aug 2008 06:51:46 +0000 (+0000) Subject: MDL-16141 Need an sql_position method to do POSITION(needle IN haystack) on crappy... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=1d861fce0692eac67b935d921194eb0ab66fb183;p=moodle.git MDL-16141 Need an sql_position method to do POSITION(needle IN haystack) on crappy databases; and MDL-16140 Table "testtable" already exists messages when re-running dml unit tests after a crash - make it self-healing. --- diff --git a/lib/dml/moodle_database.php b/lib/dml/moodle_database.php index 99921e0a58..5367966375 100644 --- a/lib/dml/moodle_database.php +++ b/lib/dml/moodle_database.php @@ -1344,6 +1344,20 @@ abstract class moodle_database { */ public abstract function sql_substr(); + /** + * Returns the SQL for returning searching one string for the location of another. + * Note, there is no guarantee which order $needle, $haystack will be in + * the resulting SQL, so when using this method, and both arguments contain + * placeholders, you should use named placeholders. + * @param string $needle the SQL expression that will be searched for. + * @param string $haystack the SQL expression that will be searched in. + * @return string the required SQL + */ + public function sql_position($needle, $haystack) { + // Implementation using standard SQL. + return "POSITION(($needle) IN ($haystack))"; + } + /** * Returns SQL WHERE conditions. * diff --git a/lib/dml/mssql_adodb_moodle_database.php b/lib/dml/mssql_adodb_moodle_database.php index 1ebb3944ed..4fde207bbe 100644 --- a/lib/dml/mssql_adodb_moodle_database.php +++ b/lib/dml/mssql_adodb_moodle_database.php @@ -127,6 +127,14 @@ class mssql_adodb_moodle_database extends adodb_moodle_database { return ' CONVERT(varchar, ' . $fieldname . ', ' . $numchars . ')'; } + /** + * Returns the SQL for returning searching one string for the location of another. + */ + public function sql_substr($needle, $haystack) { + // Implementation using standard SQL. + return "CHARINDEX(($needle), ($haystack))"; + } + public function sql_isempty($tablename, $fieldname, $nullablefield, $textfield) { if ($textfield) { return $this->sql_compare_text($fieldname)." = '' "; diff --git a/lib/dml/oci8po_adodb_moodle_database.php b/lib/dml/oci8po_adodb_moodle_database.php index 52ce5c7d41..bdcf2007f1 100644 --- a/lib/dml/oci8po_adodb_moodle_database.php +++ b/lib/dml/oci8po_adodb_moodle_database.php @@ -182,6 +182,14 @@ class oci8po_adodb_moodle_database extends adodb_moodle_database { return 'dbms_lob.substr(' . $fieldname . ', ' . $numchars . ',1)'; } + /** + * Returns the SQL for returning searching one string for the location of another. + */ + public function sql_substr($needle, $haystack) { + // Implementation using standard SQL. + return "INSTR(($haystack), ($needle))"; + } + public function sql_isempty($tablename, $fieldname, $nullablefield, $textfield) { if ($nullablefield) { return " $fieldname IS NULL "; /// empties in nullable fields are stored as diff --git a/lib/dml/simpletest/testdml.php b/lib/dml/simpletest/testdml.php index 9c9f86b398..61d6255884 100755 --- a/lib/dml/simpletest/testdml.php +++ b/lib/dml/simpletest/testdml.php @@ -35,6 +35,23 @@ class dml_test extends UnitTestCase { $this->tables = array(); } + /** + * Get a xmldb_table object for testing, deleting any existing table + * of the same name, for example if one was left over from a previous test + * run that crashed. + * + * @param database_manager $dbman the database_manager to use. + * @param string $tablename the name of the table to create. + * @return xmldb_table the table object. + */ + private function get_test_table(database_manager $dbman, $tablename) { + $table = new xmldb_table($tablename); + if ($dbman->table_exists($table)) { + $dbman->drop_table($table); + } + return $table; + } + function test_fix_sql_params() { $DB = $this->tdb; @@ -147,10 +164,11 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $this->tdb->get_manager(); + // Need to test with multiple DBs + $table = $this->get_test_table($dbman, "testtable"); + $original_count = count($DB->get_tables()); - // Need to test with multiple DBs - $table = new xmldb_table("testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); $dbman->create_table($table); @@ -163,7 +181,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $this->tdb->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('enumfield', XMLDB_TYPE_CHAR, '255', null, null, null, XMLDB_ENUM, array('test','test2','test3'),null); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -186,7 +204,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $this->tdb->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $enumvalues = array('test','test2','test3'); $table->add_field('enumfield', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, XMLDB_ENUM, $enumvalues, 'test2'); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); @@ -206,7 +224,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $this->tdb->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_index('course', XMLDB_INDEX_NOTUNIQUE, array('course')); @@ -232,7 +250,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $this->tdb->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, '0'); @@ -261,7 +279,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $this->tdb->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, '0'); @@ -418,7 +436,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, '0'); @@ -452,7 +470,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, '0'); @@ -522,7 +540,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_index('course', XMLDB_INDEX_NOTUNIQUE, array('course')); @@ -550,7 +568,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -581,7 +599,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -605,7 +623,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -654,7 +672,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -678,7 +696,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -701,7 +719,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -726,7 +744,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -755,7 +773,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -784,7 +802,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -803,7 +821,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -823,7 +841,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -843,7 +861,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -860,7 +878,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -878,7 +896,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -896,7 +914,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -921,7 +939,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -945,7 +963,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -961,7 +979,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -980,7 +998,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('description', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1001,7 +1019,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('description', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null); $table->add_field('image', XMLDB_TYPE_BINARY, 'big', null, null, null, null, null, null); @@ -1025,7 +1043,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1044,7 +1062,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1065,7 +1083,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('description', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1089,7 +1107,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('description', XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null); $table->add_field('image', XMLDB_TYPE_BINARY, 'big', null, null, null, null, null, null); @@ -1118,7 +1136,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1135,7 +1153,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1154,7 +1172,7 @@ class dml_test extends UnitTestCase { $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1175,7 +1193,7 @@ class dml_test extends UnitTestCase { $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1195,7 +1213,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1215,7 +1233,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1235,7 +1253,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1254,7 +1272,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1273,7 +1291,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1301,7 +1319,7 @@ class dml_test extends UnitTestCase { $DB = $this->tdb; $dbman = $DB->get_manager(); - $table = new xmldb_table("testtable"); + $table = $this->get_test_table($dbman, "testtable"); $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); @@ -1315,6 +1333,14 @@ class dml_test extends UnitTestCase { $this->assertTrue($DB->delete_records_select('testtable', 'course = ?', array(2))); $this->assertEqual(1, $DB->count_records('testtable')); } + + function test_sql_position() { + $DB = $this->tdb; + $this->assertEqual($DB->get_field_sql( + "SELECT " . $DB->sql_position("'ood'", "'Moodle'") . $DB->sql_null_from_clause()), 2); + $this->assertEqual($DB->get_field_sql( + "SELECT " . $DB->sql_position("'Oracle'", "'Moodle'") . $DB->sql_null_from_clause()), 0); + } } /**