Skip to content

Commit

Permalink
Merge branch 'wip-MDL-29496-master' of git://github.com/phalacee/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
stronk7 committed Oct 18, 2011
2 parents 77c3e9d + fc0aebb commit 36903ce
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/datalib.php
Original file line number Diff line number Diff line change
Expand Up @@ -717,7 +717,7 @@ function get_courses_search($searchterms, $sort='fullname ASC', $page=0, $record
$params = array();
$i = 0;

$concat = $DB->sql_concat('c.summary', "' '", 'c.fullname', "' '", 'c.idnumber', "' '", 'c.shortname');
$concat = $DB->sql_concat("COALESCE(c.summary, ". $DB->sql_empty() .")", "' '", 'c.fullname', "' '", 'c.idnumber', "' '", 'c.shortname');

foreach ($searchterms as $searchterm) {
$i++;
Expand Down
42 changes: 42 additions & 0 deletions lib/dml/simpletest/testdml.php
Original file line number Diff line number Diff line change
Expand Up @@ -3378,6 +3378,48 @@ function test_sql_ilike() {
$DB->get_records_sql($sql, $params);
}

function test_coalesce() {
$DB = $this->tdb;

// Testing not-null ocurrences, return 1st
$sql = "SELECT COALESCE('returnthis', 'orthis', 'orwhynotthis') AS test" . $DB->sql_null_from_clause();
$this->assertEqual('returnthis', $DB->get_field_sql($sql, array()));
$sql = "SELECT COALESCE(:paramvalue, 'orthis', 'orwhynotthis') AS test" . $DB->sql_null_from_clause();
$this->assertEqual('returnthis', $DB->get_field_sql($sql, array('paramvalue' => 'returnthis')));

// Testing null ocurrences, return 2nd
$sql = "SELECT COALESCE(null, 'returnthis', 'orthis') AS test" . $DB->sql_null_from_clause();
$this->assertEqual('returnthis', $DB->get_field_sql($sql, array()));
$sql = "SELECT COALESCE(:paramvalue, 'returnthis', 'orthis') AS test" . $DB->sql_null_from_clause();
$this->assertEqual('returnthis', $DB->get_field_sql($sql, array('paramvalue' => null)));
$sql = "SELECT COALESCE(null, :paramvalue, 'orthis') AS test" . $DB->sql_null_from_clause();
$this->assertEqual('returnthis', $DB->get_field_sql($sql, array('paramvalue' => 'returnthis')));

// Testing null ocurrences, return 3rd
$sql = "SELECT COALESCE(null, null, 'returnthis') AS test" . $DB->sql_null_from_clause();
$this->assertEqual('returnthis', $DB->get_field_sql($sql, array()));
$sql = "SELECT COALESCE(null, :paramvalue, 'returnthis') AS test" . $DB->sql_null_from_clause();
$this->assertEqual('returnthis', $DB->get_field_sql($sql, array('paramvalue' => null)));
$sql = "SELECT COALESCE(null, null, :paramvalue) AS test" . $DB->sql_null_from_clause();
$this->assertEqual('returnthis', $DB->get_field_sql($sql, array('paramvalue' => 'returnthis')));

// Testing all null ocurrences, return null
// Note: under mssql, if all elements are nulls, at least one must be a "typed" null, hence
// we cannot test this in a cross-db way easily, so next 2 tests are using
// different queries depending of the DB family
$customnull = $DB->get_dbfamily() == 'mssql' ? 'CAST(null AS varchar)' : 'null';
$sql = "SELECT COALESCE(null, null, " . $customnull . ") AS test" . $DB->sql_null_from_clause();
$this->assertNull($DB->get_field_sql($sql, array()));
$sql = "SELECT COALESCE(null, :paramvalue, " . $customnull . ") AS test" . $DB->sql_null_from_clause();
$this->assertNull($DB->get_field_sql($sql, array('paramvalue' => null)));

// Check there are not problems with whitespace strings
$sql = "SELECT COALESCE(null, '', null) AS test" . $DB->sql_null_from_clause();
$this->assertEqual('', $DB->get_field_sql($sql, array()));
$sql = "SELECT COALESCE(null, :paramvalue, null) AS test" . $DB->sql_null_from_clause();
$this->assertEqual('', $DB->get_field_sql($sql, array('paramvalue' => '')));
}

function test_sql_concat() {
$DB = $this->tdb;
$dbman = $DB->get_manager();
Expand Down

0 comments on commit 36903ce

Please sign in to comment.