" WHERE {$this->config->fielduser} = '".$this->ext_addslashes($extusername)."'";
if ($rs = $authdb->Execute($sql)) {
if ( !$rs->EOF ) {
- $fields_obj = rs_fetch_record($rs);
+ $fields_obj = $rs->FetchObj();
foreach ($selectfields as $localname=>$externalname) {
$result[$localname] = $textlib->convert($fields_obj->{$localname}, $this->config->extencoding, 'utf-8');
}
}
- rs_close($rs);
+ $rs->Close();
}
}
$authdb->Close();
if (!$rs) {
print_error('auth_dbcantconnect','auth');
} else if ( !$rs->EOF ) {
- while ($rec = rs_fetch_next_record($rs)) {
+ while ($rec = $rs->FetchRow()) {
array_push($result, $rec->username);
}
}
$sql = "SELECT e.id, e.courseid, e.userid, c.fullname
FROM {enrol_authorize} e
- INNER JOIN {course} c ON c.id = e.courseid
+ JOIN {course} c ON c.id = e.courseid
WHERE e.id IN(" . implode(',', $orderdata) . ")
ORDER BY e.userid";
- if (($rs = $DB->get_recordset_sql($sql)) && ($ei = rs_fetch_next_record($rs)))
+ if (!$rs = $DB->get_recordset_sql($sql)) {
+ return;
+ }
+
+ if ($ts->valid() and $ei = current($rs))
{
if (1 < count($orderdata)) {
$sender = get_admin();
while ($ei && $ei->userid == $lastuserid) {
$usercourses[] = $ei->fullname;
- $ei = rs_fetch_next_record($rs);
+ if (!$rs->valid()) {
+ break;
+ }
+ $rs->next();
+ $ei = $rs->current();
}
if (($user = $DB->get_record('user', array('id'=>$lastuserid)))) {
}
while ($ei);
- rs_close($rs);
+ $rs->close();
}
}
//$count = 0;
$courselist = array();
- while ($fields_obj = rs_fetch_next_record($rs)) { // Make a nice little array of courses to process
+ while ($fields_obj = (object)$rs->FetchRow()) { // Make a nice little array of courses to process
$courselist[] = $fields_obj->enrolremotecoursefield;
//$count++;
}
- rs_close($rs);
+ $rs->close();
//error_log('[ENROL_DB] Found '.count($existing).' existing roles and '.$count.' in external database');
$DB->begin_sql();
$extcourses = array();
- while ($extcourse_obj = rs_fetch_next_record($rs)) { // there are more course records
+ while ($extcourse_obj = (object)$rs->FetchRow()) { // there are more course records
$extcourse = $extcourse_obj->{$CFG->enrol_remotecoursefield};
array_push($extcourses, $extcourse);
}
// slurp results into an array
- while ($crs_obj = rs_fetch_next_record($crs)) {
+ while ($crs_obj = (object)$crs->FetchRow()) {
array_push($extenrolments, $crs_obj->{$CFG->enrol_remoteuserfield});
}
- rs_close($crs); // release the handle
+ $crs->close(); // release the handle
//
// prune enrolments to users that are no longer in ext auth
} // end foreach member
} // end while course records
- rs_close($rs); //Close the main course recordset
+ $rs->close(); //Close the main course recordset
//
// prune enrolments to courses that are no longer in ext auth
function search_users($courseid, $groupid, $searchtext, $sort='', array $exceptions=null) {
global $DB;
- $LIKE = sql_ilike();
- $fullname = sql_fullname('u.firstname', 'u.lastname');
+ $LIKE = $DB->sql_ilike();
+ $fullname = $DB->sql_fullname('u.firstname', 'u.lastname');
if (!empty($exceptions)) {
list($exceptions, $params) = $DB->get_in_or_equal($exceptions, SQL_PARAMS_NAMED, 'ex0000', false);
'load so much data into memory.', DEBUG_DEVELOPER);
}
- $LIKE = sql_ilike();
- $fullname = sql_fullname();
+ $LIKE = $DB->sql_ilike();
+ $fullname = $DB->sql_fullname();
$select = " username <> :guest AND deleted = 0";
$params = array('guest'=>'guest');
$search='', $firstinitial='', $lastinitial='', $extraselect='', array $extraparams=null) {
global $DB;
- $LIKE = sql_ilike();
- $fullname = sql_fullname();
+ $LIKE = $DB->sql_ilike();
+ $fullname = $DB->sql_fullname();
$select = "deleted <> 1";
$params = array();
// now add path and depth to top level categories
$sql = "UPDATE {course_categories}
- SET depth = 1, path = ".sql_concat("'/'", "id")."
+ SET depth = 1, path = ".$DB->sql_concat("'/'", "id")."
WHERE parent = 0";
$DB->execute($sql);
$fieldname = $xmldb_field->getName();
/// Look for any default constraint in this field and drop it
- if ($default = get_record_sql("SELECT id, object_name(cdefault) AS defaultconstraint
- FROM syscolumns
- WHERE id = object_id('{$tablename}')
- AND name = '{$fieldname}'")) {
+ if ($default = $this->mdb->get_record_sql("SELECT id, object_name(cdefault) AS defaultconstraint
+ FROM syscolumns
+ WHERE id = object_id(?)
+ AND name = ?", array($tablename, $fieldname))) {
return $default->defaultconstraint;
} else {
return false;
* If no check constraints are found, returns an empty array
*/
public function getCheckConstraintsFromDB($xmldb_table, $xmldb_field = null) {
+
$results = array();
$tablename = $this->getTableName($xmldb_table);
- if ($constraints = get_records_sql("SELECT o.name, c.text AS description
- FROM sysobjects o,
- sysobjects p,
- syscomments c
- WHERE p.id = o.parent_obj
- AND o.id = c.id
- AND o.xtype = 'C'
- AND p.name = '{$tablename}'")) {
+ if ($constraints = $this->mdb->get_records_sql("SELECT o.name, c.text AS description
+ FROM sysobjects o,
+ sysobjects p,
+ syscomments c
+ WHERE p.id = o.parent_obj
+ AND o.id = c.id
+ AND o.xtype = 'C'
+ AND p.name = ?", array($tablename))) {
foreach ($constraints as $constraint) {
$results[$constraint->name] = $constraint;
}
case 'uk':
case 'fk':
case 'ck':
- if ($check = get_records_sql("SELECT name
- FROM sysobjects
- WHERE lower(name) = '" . strtolower($object_name) . "'")) {
+ if ($check = $this->mdb->get_records_sql("SELECT name
+ FROM sysobjects
+ WHERE lower(name) = ?", array(strtolower($object_name)))) {
return true;
}
break;
case 'ix':
case 'uix':
- if ($check = get_records_sql("SELECT name
- FROM sysindexes
- WHERE lower(name) = '" . strtolower($object_name) . "'")) {
+ if ($check = $this->mdb->get_records_sql("SELECT name
+ FROM sysindexes
+ WHERE lower(name) = ?", array(strtolower($object_name)))) {
return true;
}
break;
if ($oldmetatype == 'N') {
$uppertablename = strtoupper($tablename);
$upperfieldname = strtoupper($fieldname);
- if ($col = get_record_sql("SELECT cname, precision
- FROM col
- WHERE tname = '$uppertablename'
- AND cname = '$upperfieldname'")) {
+ if ($col = $this->mdb->get_record_sql("SELECT cname, precision
+ FROM col
+ WHERE tname = ? AND cname = ?",
+ array($uppertablename, $upperfieldname))) {
$oldlength = $col->precision;
}
}
$tablename = strtoupper($this->getTableName($xmldb_table));
- if ($constraints = get_records_sql("SELECT lower(c.constraint_name) AS name, c.search_condition AS description
- FROM user_constraints c
- WHERE c.table_name = '{$tablename}'
- AND c.constraint_type = 'C'
- AND c.constraint_name not like 'SYS%'")) {
+ if ($constraints = $this->mdb->get_records_sql("SELECT lower(c.constraint_name) AS name, c.search_condition AS description
+ FROM user_constraints c
+ WHERE c.table_name = ?
+ AND c.constraint_type = 'C'
+ AND c.constraint_name not like 'SYS%'",
+ array($tablename))) {
foreach ($constraints as $constraint) {
$results[$constraint->name] = $constraint;
}
$prefixupper = strtoupper($this->prefix);
$sequencename = false;
- if ($trigger = get_record_sql("SELECT trigger_name, trigger_body
- FROM user_triggers
- WHERE table_name = '{$tablename}'
- AND trigger_name LIKE '{$prefixupper}%_ID%_TRG'")) {
+ if ($trigger = $this->mdb->get_record_sql("SELECT trigger_name, trigger_body
+ FROM user_triggers
+ WHERE table_name = ? AND trigger_name LIKE ?",
+ array($tablename, "{$prefixupper}%_ID%_TRG"))) {
/// If trigger found, regexp it looking for the sequence name
preg_match('/.*SELECT (.*)\.nextval/i', $trigger->trigger_body, $matches);
if (isset($matches[1])) {
$prefixupper = strtoupper($this->prefix);
$triggername = false;
- if ($trigger = get_record_sql("SELECT trigger_name, trigger_body
- FROM user_triggers
- WHERE table_name = '{$tablename}'
- AND trigger_name LIKE '{$prefixupper}%_ID%_TRG'")) {
+ if ($trigger = $this->mdb->get_record_sql("SELECT trigger_name, trigger_body
+ FROM user_triggers
+ WHERE table_name = ? AND trigger_name LIKE ?",
+ array($tablename, "{$prefixupper}%_ID%_TRG"))) {
$triggername = $trigger->trigger_name;
}
case 'uix':
case 'seq':
case 'trg':
- if ($check = get_records_sql("SELECT object_name
- FROM user_objects
- WHERE lower(object_name) = '" . strtolower($object_name) . "'")) {
+ if ($check = $this->mdb->get_records_sql("SELECT object_name
+ FROM user_objects
+ WHERE lower(object_name) = ?", array(strtolower($object_name)))) {
return true;
}
break;
case 'uk':
case 'fk':
case 'ck':
- if ($check = get_records_sql("SELECT constraint_name
- FROM user_constraints
- WHERE lower(constraint_name) = '" . strtolower($object_name) . "'")) {
+ if ($check = $this->mdb->get_records_sql("SELECT constraint_name
+ FROM user_constraints
+ WHERE lower(constraint_name) = ?", array(strtolower($object_name)))) {
return true;
}
break;
$tablename = $this->getTableName($xmldb_table);
- if ($constraints = get_records_sql("SELECT co.conname AS name, co.consrc AS description
- FROM pg_constraint co,
- pg_class cl
- WHERE co.conrelid = cl.oid
- AND co.contype = 'c'
- AND cl.relname = '{$tablename}'")) {
+ if ($constraints = $this->mdb->get_records_sql("SELECT co.conname AS name, co.consrc AS description
+ FROM pg_constraint co, pg_class cl
+ WHERE co.conrelid = cl.oid
+ AND co.contype = 'c' AND cl.relname = ?",
+ array($tablename))) {
foreach ($constraints as $constraint) {
$results[$constraint->name] = $constraint;
}
$tablename = $this->getTableName($xmldb_table);
$sequencename = $tablename . '_id_seq';
- if (!get_record_sql("SELECT *
- FROM pg_class
- WHERE relname = '{$sequencename}'
- AND relkind = 'S'")) {
+ if (!$this->mdb->get_record_sql("SELECT *
+ FROM pg_class
+ WHERE relname = ? AND relkind = 'S'",
+ array($sequencename))) {
$sequencename = false;
}
case 'ix':
case 'uix':
case 'seq':
- if ($check = get_records_sql("SELECT relname
- FROM pg_class
- WHERE lower(relname) = '" . strtolower($object_name) . "'")) {
+ if ($check = $this->mdb->get_records_sql("SELECT relname
+ FROM pg_class
+ WHERE lower(relname) = ?", array(strtolower($object_name)))) {
return true;
}
break;
case 'uk':
case 'fk':
case 'ck':
- if ($check = get_records_sql("SELECT conname
- FROM pg_constraint
- WHERE lower(conname) = '" . strtolower($object_name) . "'")) {
+ if ($check = $this->mdb->get_records_sql("SELECT conname
+ FROM pg_constraint
+ WHERE lower(conname) = ?", array(strtolower($object_name)))) {
return true;
}
break;
case 'trg':
- if ($check = get_records_sql("SELECT tgname
- FROM pg_trigger
- WHERE lower(tgname) = '" . strtolower($object_name) . "'")) {
+ if ($check = $this->mdb->get_records_sql("SELECT tgname
+ FROM pg_trigger
+ WHERE lower(tgname) = ?", array(strtolower($object_name)))) {
return true;
}
break;
}
}
- /// Now call the standard sql_concat() DML function
+ /// Now call the standard $DB->sql_concat() DML function
return call_user_func_array(array($this->mdb, 'sql_concat'), $elements);
}
* @param string $message The message to display to the user about the error.
* @param string $link The url where the user will be prompted to continue. If no url is provided the user will be directed to the site index page.
*/
-function error ($message, $link='') {
+function error($message, $link='') {
global $CFG, $SESSION, $THEME;
debugging('error() is a deprecated function, please call print_error() instead of error()', DEBUG_DEVELOPER);
}
/// removed functions
-function addslashes_object( $dataobject ) {
+function addslashes_object($dataobject) {
error('addslashes() not available anymore');
}
error('addslashes_recursive() not available anymore');
}
+function execute_sql($command, $feedback=true) {
+ error('execute_sql() not available anymore');
+}
+
+function record_exists_select($table, $select='') {
+ error('record_exists_select() not available anymore');
+}
+
+function record_exists_sql($sql) {
+ error('record_exists_sql() not available anymore');
+}
+
+function count_records_select($table, $select='', $countitem='COUNT(*)') {
+ error('count_records_select() not available anymore');
+}
+
+function count_records_sql($sql) {
+ error('count_records_sql() not available anymore');
+}
+
+function get_record_sql($sql, $expectmultiple=false, $nolimit=false) {
+ error('get_record_sql() not available anymore');
+}
+
+function get_record_select($table, $select='', $fields='*') {
+ error('get_record_select() not available anymore');
+}
+
+function get_recordset($table, $field='', $value='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
+ error('get_recordset() not available anymore');
+}
+
+function get_recordset_sql($sql, $limitfrom=null, $limitnum=null) {
+ error('get_recordset_sql() not available anymore');
+}
+
+function rs_fetch_record(&$rs) {
+ error('rs_fetch_record() not available anymore');
+}
+
+function rs_next_record(&$rs) {
+ error('rs_next_record() not available anymore');
+}
+
+function rs_fetch_next_record(&$rs) {
+ error('rs_fetch_next_record() not available anymore');
+}
+
+function rs_EOF($rs) {
+ error('rs_EOF() not available anymore');
+}
+
+function rs_close(&$rs) {
+ error('rs_close() not available anymore');
+}
+
+function get_records_select($table, $select='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
+ error('get_records_select() not available anymore');
+}
+
+function get_field_select($table, $return, $select) {
+ error('get_field_select() not available anymore');
+}
+
+function get_field_sql($sql) {
+ error('get_field_sql() not available anymore');
+}
+function delete_records_select($table, $select='') {
+ delete_records_select('get_field_sql() not available anymore');
+}
+
+
+function configure_dbconnection() {
+ error('configure_dbconnection() removed');
+}
+
+function sql_max($field) {
+ error('sql_max() removed - use normal sql MAX() instead');
+}
+
+function sql_as() {
+ error('sql_as() removed - do not use AS for tables at all');
+}
+
+function sql_paging_limit($page, $recordsperpage) {
+ error('Function sql_paging_limit() is deprecated. Replace it with the correct use of limitfrom, limitnum parameters');
+}
+
+function db_uppercase() {
+ error('upper() removed - use normal sql UPPER()');
+}
+
+function db_lowercase() {
+ error('upper() removed - use normal sql LOWER()');
+}
+
+function modify_database($sqlfile='', $sqlstring='') {
+ error('modify_database() removed - use new XMLDB functions');
+}
+
+function where_clause($field1='', $value1='', $field2='', $value2='', $field3='', $value3='') {
+ error('where_clause() removed - use new functions with $conditions parameter');
+}
+
+function execute_sql_arr($sqlarr, $continue=true, $feedback=true) {
+ error('execute_sql_arr() removed');
+}
+
+function get_records_list($table, $field='', $values='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
+ error('get_records_list() removed');
+}
+
+function get_recordset_list($table, $field='', $values='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
+ error('get_recordset_list() removed');
+}
+
+function get_records_menu($table, $field='', $value='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
+ error('get_records_menu() removed');
+}
+
+function get_records_select_menu($table, $select='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
+ error('get_records_select_menu() removed');
+}
+
+function get_records_sql_menu($sql, $limitfrom='', $limitnum='') {
+ error('get_records_sql_menu() removed');
+}
+
+function column_type($table, $column) {
+ error('column_type() removed');
+}
+
+function recordset_to_menu($rs) {
+ error('recordset_to_menu() removed');
+}
+
+function records_to_menu($records, $field1, $field2) {
+ error('records_to_menu() removed');
+}
+
+function set_field_select($table, $newfield, $newvalue, $select, $localcall = false) {
+ error('set_field_select() removed');
+}
+
+function get_fieldset_select($table, $return, $select) {
+ error('get_fieldset_select() removed');
+}
+
+function get_fieldset_sql($sql) {
+ error('get_fieldset_sql() removed');
+}
+
+function sql_ilike() {
+ error('sql_ilike() not available anymore');
+}
+
+function sql_fullname($first='firstname', $last='lastname') {
+ error('sql_fullname() not available anymore');
+}
+
+function sql_concat() {
+ error('sql_concat() not available anymore');
+}
+
+function sql_empty() {
+ error('sql_empty() not available anymore');
+}
+
+function sql_substr() {
+ error('sql_substr() not available anymore');
+}
+
+function sql_bitand($int1, $int2) {
+ error('sql_bitand() not available anymore');
+}
+
+function sql_bitnot($int1) {
+ error('sql_bitnot() not available anymore');
+}
+
+function sql_bitor($int1, $int2) {
+ error('sql_bitor() not available anymore');
+}
+
+function sql_bitxor($int1, $int2) {
+ error('sql_bitxor() not available anymore');
+}
+
+function sql_cast_char2int($fieldname, $text=false) {
+ error('sql_cast_char2int() not available anymore');
+}
+
+function sql_compare_text($fieldname, $numchars=32) {
+ error('sql_compare_text() not available anymore');
+}
+
+function sql_order_by_text($fieldname, $numchars=32) {
+ error('sql_order_by_text() not available anymore');
+}
+
+function sql_concat_join($separator="' '", $elements=array()) {
+ error('sql_concat_join() not available anymore');
+}
+
+function sql_isempty($tablename, $fieldname, $nullablefield, $textfield) {
+ error('sql_isempty() not available anymore');
+}
+
+function sql_isnotempty($tablename, $fieldname, $nullablefield, $textfield) {
+ error('sql_isnotempty() not available anymore');
+}
+
+function begin_sql() {
+ error('begin_sql() not available anymore');
+}
+
+function commit_sql() {
+ error('commit_sql() not available anymore');
+}
+
+function rollback_sql() {
+ error('rollback_sql() not available anymore');
+}
+
+function insert_record($table, $dataobject, $returnid=true, $primarykey='id') {
+ error('insert_record() not available anymore');
+}
+
+function update_record($table, $dataobject) {
+ error('update_record() not available anymore');
+}
+
+function get_records($table, $field='', $value='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
+ error('get_records() not available anymore');
+}
+
+function get_record($table, $field1, $value1, $field2='', $value2='', $field3='', $value3='', $fields='*') {
+ error('get_record() not available anymore');
+}
+
+function set_field($table, $newfield, $newvalue, $field1, $value1, $field2='', $value2='', $field3='', $value3='') {
+ error('set_field() not available anymore');
+}
+
+function count_records($table, $field1='', $value1='', $field2='', $value2='', $field3='', $value3='') {
+ error('count_records() not available anymore');
+}
+
+function record_exists($table, $field1='', $value1='', $field2='', $value2='', $field3='', $value3='') {
+ error('record_exists() not available anymore');
+}
+
+function delete_records($table, $field1='', $value1='', $field2='', $value2='', $field3='', $value3='') {
+ error('delete_records() not available anymore');
+}
+
+function get_field($table, $return, $field1, $value1, $field2='', $value2='', $field3='', $value3='') {
+ error('get_field() not available anymore');
+}
-?>
+
\ No newline at end of file
return true;
}
-
-
-
-
-
-
-
-
-
-
-
-
-/////// DEPRECATED - works fine
-
-
-function sql_ilike() {
- global $DB;
- return $DB->sql_ilike();
-}
-
-function sql_fullname($first='firstname', $last='lastname') {
- global $DB;
- return $DB->sql_fullname($first, $last);
-}
-
-function sql_concat() {
- global $DB;
-
- $args = func_get_args();
- return call_user_func_array(array($DB, 'sql_concat'), $args);
-}
-
-function sql_empty() {
- global $DB;
- return $DB->sql_empty();
-}
-
-function sql_substr() {
- global $DB;
- return $DB->sql_substr();
-}
-
-function sql_bitand($int1, $int2) {
- global $DB;
- return $DB->sql_bitand($int1, $int2);
-}
-
-function sql_bitnot($int1) {
- global $DB;
- return $DB->sql_bitnot($int1);
-}
-
-function sql_bitor($int1, $int2) {
- global $DB;
- return $DB->sql_bitor($int1);
-
-}
-
-function sql_bitxor($int1, $int2) {
- global $DB;
- return $DB->sql_bitxor($int1, $int2);
-
-}
-
-function sql_cast_char2int($fieldname, $text=false) {
- global $DB;
- return $DB->sql_cast_char2int($fieldname, $text);
-}
-
-function sql_compare_text($fieldname, $numchars=32) {
- return sql_order_by_text($fieldname, $numchars);
-}
-
-function sql_order_by_text($fieldname, $numchars=32) {
- global $DB;
- return $DB->sql_order_by_text($fieldname, $numchars);
-}
-
-
-function sql_concat_join($separator="' '", $elements=array()) {
- global $DB;
- return $DB->sql_concat_join($separator, $elements);
-}
-
-function sql_isempty($tablename, $fieldname, $nullablefield, $textfield) {
- global $DB;
- return $DB->sql_isempty($tablename, $fieldname, $nullablefield, $textfield);
-}
-
-function sql_isnotempty($tablename, $fieldname, $nullablefield, $textfield) {
- global $DB;
- return $DB->sql_isnotempty($tablename, $fieldname, $nullablefield, $textfield);
-}
-
-
-function begin_sql() {
- global $DB;
- return $DB->begin_sql();
-}
-
-function commit_sql() {
- global $DB;
- return $DB->commit_sql();
-}
-
-function rollback_sql() {
- global $DB;
- return $DB->rollback_sql();
-}
-
-function insert_record($table, $dataobject, $returnid=true, $primarykey='id') {
- global $DB;
-
- return $DB->insert_record($table, $dataobject, $returnid);
-}
-
-function update_record($table, $dataobject) {
- global $DB;
-
- return $DB->update_record($table, $dataobject, true);
-}
-
-function get_records($table, $field='', $value='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
- global $DB;
-
- $conditions = array();
- if ($field) {
- $conditions[$field] = $value;
- }
-
- return $DB->get_records($table, $conditions, $sort, $fields, $limitfrom, $limitnum);
-}
-
-function get_record($table, $field1, $value1, $field2='', $value2='', $field3='', $value3='', $fields='*') {
- global $DB;
-
- $conditions = array();
- if ($field1) {
- $conditions[$field1] = $value1;
- }
- if ($field2) {
- $conditions[$field2] = $value2;
- }
- if ($field3) {
- $conditions[$field3] = $value3;
- }
-
- return $DB->get_record($table, $conditions, $fields);
-}
-
-function set_field($table, $newfield, $newvalue, $field1, $value1, $field2='', $value2='', $field3='', $value3='') {
- global $DB;
-
- $conditions = array();
- if ($field1) {
- $conditions[$field1] = $value1;
- }
- if ($field2) {
- $conditions[$field2] = $value2;
- }
- if ($field3) {
- $conditions[$field3] = $value3;
- }
-
- return $DB->set_field($table, $newfield, $newvalue, $conditions);
-}
-
-function count_records($table, $field1='', $value1='', $field2='', $value2='', $field3='', $value3='') {
- global $DB;
-
- $conditions = array();
- if ($field1) {
- $conditions[$field1] = $value1;
- }
- if ($field2) {
- $conditions[$field2] = $value2;
- }
- if ($field3) {
- $conditions[$field3] = $value3;
- }
-
- return $DB->count_records($table, $conditions);
-}
-
-function record_exists($table, $field1='', $value1='', $field2='', $value2='', $field3='', $value3='') {
- global $DB;
-
- $conditions = array();
- if ($field1) {
- $conditions[$field1] = $value1;
- }
- if ($field2) {
- $conditions[$field2] = $value2;
- }
- if ($field3) {
- $conditions[$field3] = $value3;
- }
-
- return $DB->record_exists($table, $conditions);
-}
-
-function delete_records($table, $field1='', $value1='', $field2='', $value2='', $field3='', $value3='') {
- global $DB;
-
- if (is_array($field1)) {
- error('Incorrect parameter! (probably missing $DB->)');
- }
-
- $conditions = array();
- if ($field1) {
- $conditions[$field1] = $value1;
- }
- if ($field2) {
- $conditions[$field2] = $value2;
- }
- if ($field3) {
- $conditions[$field3] = $value3;
- }
-
- return $DB->delete_records($table, $conditions);
-}
-
-function get_field($table, $return, $field1, $value1, $field2='', $value2='', $field3='', $value3='') {
- global $DB;
-
- $conditions = array();
- if ($field1) {
- $conditions[$field1] = $value1;
- }
- if ($field2) {
- $conditions[$field2] = $value2;
- }
- if ($field3) {
- $conditions[$field3] = $value3;
- }
-
- return $DB->get_field($table, $return, $conditions);
-}
-
-
-
-
-///// DELETED - must not be used anymore!
-
-function configure_dbconnection() {
- error('configure_dbconnection() removed');
-}
-
-function sql_max($field) {
- error('sql_max() removed - use normal sql MAX() instead');
-}
-
-function sql_as() {
- error('sql_as() removed - do not use AS for tables at all');
-}
-
-function sql_paging_limit($page, $recordsperpage) {
- error('Function sql_paging_limit() is deprecated. Replace it with the correct use of limitfrom, limitnum parameters');
-}
-
-function db_uppercase() {
- error('upper() removed - use normal sql UPPER()');
-}
-
-function db_lowercase() {
- error('upper() removed - use normal sql LOWER()');
-}
-
-function modify_database($sqlfile='', $sqlstring='') {
- error('modify_database() removed - use new XMLDB functions');
-}
-
-function where_clause($field1='', $value1='', $field2='', $value2='', $field3='', $value3='') {
- error('where_clause() removed - use new functions with $conditions parameter');
-}
-
-function execute_sql_arr($sqlarr, $continue=true, $feedback=true) {
- error('execute_sql_arr() removed');
-}
-
-function get_records_list($table, $field='', $values='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
- error('get_records_list() removed');
-}
-
-function get_recordset_list($table, $field='', $values='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
- error('get_recordset_list() removed');
-}
-
-function get_records_menu($table, $field='', $value='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
- error('get_records_menu() removed');
-}
-
-function get_records_select_menu($table, $select='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
- error('get_records_select_menu() removed');
-}
-
-function get_records_sql_menu($sql, $limitfrom='', $limitnum='') {
- error('get_records_sql_menu() removed');
-}
-
-function column_type($table, $column) {
- error('column_type() removed');
-}
-
-function recordset_to_menu($rs) {
- error('recordset_to_menu() removed');
-}
-
-function records_to_menu($records, $field1, $field2) {
- error('records_to_menu() removed');
-}
-
-function set_field_select($table, $newfield, $newvalue, $select, $localcall = false) {
- error('set_field_select() removed');
-}
-
-function get_fieldset_select($table, $return, $select) {
- error('get_fieldset_select() removed');
-}
-
-function get_fieldset_sql($sql) {
- error('get_fieldset_sql() removed');
-}
+++ /dev/null
-<?php //$Id$
-
-/// FUNCTIONS FOR DATABASE HANDLING ////////////////////////////////
-
-/**
- * Execute a given sql command string
- *
- * Completely general function - it just runs some SQL and reports success.
- *
- * @uses $db
- * @param string $command The sql string you wish to be executed.
- * @param bool $feedback Set this argument to true if the results generated should be printed. Default is true.
- * @return bool success
- */
-function execute_sql($command, $feedback=true) {
-/// Completely general function - it just runs some SQL and reports success.
-
- global $db, $CFG, $DB;
-
- $olddebug = $db->debug;
-
- if (!$feedback) {
- if ( !defined('CLI_UPGRADE') || !CLI_UPGRADE ) {
- $db->debug = false;
- }
- }
-
- if ($CFG->version >= 2006101007) { //Look for trailing ; from Moodle 1.7.0
- $command = trim($command);
- /// If the trailing ; is there, fix and warn!
- if (substr($command, strlen($command)-1, 1) == ';') {
- /// One noticeable exception, Oracle PL/SQL blocks require ending in ";"
- if ($CFG->dbfamily == 'oracle' && substr($command, -4) == 'END;') {
- /// Nothing to fix/warn. The command is one PL/SQL block, so it's ok.
- } else {
- $command = trim($command, ';');
- debugging('Warning. Avoid to end your SQL commands with a trailing ";".', DEBUG_DEVELOPER);
- }
- }
- }
-
- if (defined('MDL_PERFDB')) { global $PERF ; $PERF->dbqueries++; };
-
- $rs = $db->Execute($command);
-
- $DB->reset_columns(); // Clear out the cache, just in case changes were made to table structures
-
- $db->debug = $olddebug;
-
- if ($rs) {
- if ($feedback) {
- notify(get_string('success'), 'notifysuccess');
- }
- return true;
- } else {
- if ($feedback) {
- if ( defined('CLI_UPGRADE') && CLI_UPGRADE ) {
- notify (get_string('error'));
- } else {
- notify('<strong>' . get_string('error') . '</strong>');
- }
- }
- // these two may go to difference places
- debugging($db->ErrorMsg() .'<br /><br />'. s($command));
- if (!empty($CFG->dblogerror)) {
- $debug=array_shift(debug_backtrace());
- error_log("SQL ".$db->ErrorMsg()." in {$debug['file']} on line {$debug['line']}. STATEMENT: $command");
- }
- return false;
- }
-}
-
-
-/**
- * Test whether any records exists in a table which match a particular WHERE clause.
- *
- * @uses $CFG
- * @param string $table The database table to be checked against.
- * @param string $select A fragment of SQL to be used in a WHERE clause in the SQL call.
- * @return bool true if a matching record exists, else false.
- */
-function record_exists_select($table, $select='') {
-
- global $CFG;
-
- if ($select) {
- $select = 'WHERE '.$select;
- }
-
- return record_exists_sql('SELECT * FROM '. $CFG->prefix . $table . ' ' . $select);
-}
-
-/**
- * Test whether a SQL SELECT statement returns any records.
- *
- * This function returns true if the SQL statement executes
- * without any errors and returns at least one record.
- *
- * @param string $sql The SQL statement to execute.
- * @return bool true if the SQL executes without errors and returns at least one record.
- */
-function record_exists_sql($sql) {
-
- $limitfrom = 0; /// Number of records to skip
- $limitnum = 1; /// Number of records to retrieve
-
- if (!$rs = get_recordset_sql($sql, $limitfrom, $limitnum)) {
- return false;
- }
-
- if (rs_EOF($rs)) {
- $result = false;
- } else {
- $result = true;
- }
-
- rs_close($rs);
- return $result;
-}
-
-/**
- * Count the records in a table which match a particular WHERE clause.
- *
- * @uses $CFG
- * @param string $table The database table to be checked against.
- * @param string $select A fragment of SQL to be used in a WHERE clause in the SQL call.
- * @param string $countitem The count string to be used in the SQL call. Default is COUNT(*).
- * @return int The count of records returned from the specified criteria.
- */
-function count_records_select($table, $select='', $countitem='COUNT(*)') {
-
- global $CFG;
-
- if ($select) {
- $select = 'WHERE '.$select;
- }
-
- return count_records_sql('SELECT '. $countitem .' FROM '. $CFG->prefix . $table .' '. $select);
-}
-
-/**
- * Get the result of a SQL SELECT COUNT(...) query.
- *
- * Given a query that counts rows, return that count. (In fact,
- * given any query, return the first field of the first record
- * returned. However, this method should only be used for the
- * intended purpose.) If an error occurrs, 0 is returned.
- *
- * @uses $CFG
- * @uses $db
- * @param string $sql The SQL string you wish to be executed.
- * @return int the count. If an error occurrs, 0 is returned.
- */
-function count_records_sql($sql) {
- $rs = get_recordset_sql($sql);
-
- if (is_object($rs) and is_array($rs->fields)) {
- return reset($rs->fields);
- } else {
- return 0;
- }
-}
-
-/// GENERIC FUNCTIONS TO GET, INSERT, OR UPDATE DATA ///////////////////////////////////
-
-
-/**
- * Get a single record as an object using an SQL statement
- *
- * The SQL statement should normally only return one record. In debug mode
- * you will get a warning if more record is returned (unless you
- * set $expectmultiple to true). In non-debug mode, it just returns
- * the first record.
- *
- * @uses $CFG
- * @uses $db
- * @param string $sql The SQL string you wish to be executed, should normally only return one record.
- * @param bool $expectmultiple If the SQL cannot be written to conveniently return just one record,
- * set this to true to hide the debug message.
- * @param bool $nolimit sometimes appending ' LIMIT 1' to the SQL causes an error. Set this to true
- * to stop your SQL being modified. This argument should probably be deprecated.
- * @return Found record as object. False if not found or error
- */
-function get_record_sql($sql, $expectmultiple=false, $nolimit=false) {
-
- global $CFG;
-
-/// Default situation
- $limitfrom = 0; /// Number of records to skip
- $limitnum = 1; /// Number of records to retrieve
-
-/// Only a few uses of the 2nd and 3rd parameter have been found
-/// I think that we should avoid to use them completely, one
-/// record is one record, and everything else should return error.
-/// So the proposal is to change all the uses, (4-5 inside Moodle
-/// Core), drop them from the definition and delete the next two
-/// "if" sentences. (eloy, 2006-08-19)
-
- if ($nolimit) {
- $limitfrom = 0;
- $limitnum = 0;
- } else if ($expectmultiple) {
- $limitfrom = 0;
- $limitnum = 1;
- } else if (debugging('', DEBUG_DEVELOPER)) {
- // Debugging mode - don't use a limit of 1, but do change the SQL, because sometimes that
- // causes errors, and in non-debug mode you don't see the error message and it is
- // impossible to know what's wrong.
- $limitfrom = 0;
- $limitnum = 100;
- }
-
- if (!$rs = get_recordset_sql($sql, $limitfrom, $limitnum)) {
- return false;
- }
-
- $recordcount = $rs->RecordCount();
-
- if ($recordcount == 0) { // Found no records
- return false;
-
- } else if ($recordcount == 1) { // Found one record
- /// DIRTY HACK to retrieve all the ' ' (1 space) fields converted back
- /// to '' (empty string) for Oracle. It's the only way to work with
- /// all those NOT NULL DEFAULT '' fields until we definitively delete them
- if ($CFG->dbfamily == 'oracle') {
- array_walk($rs->fields, 'onespace2empty');
- }
- /// End of DIRTY HACK
- return (object)$rs->fields;
-
- } else { // Error: found more than one record
- notify('Error: Turn off debugging to hide this error.');
- notify($sql . '(with limits ' . $limitfrom . ', ' . $limitnum . ')');
- if ($records = $rs->GetAssoc(true)) {
- notify('Found more than one record in get_record_sql !');
- print_object($records);
- } else {
- notify('Very strange error in get_record_sql !');
- print_object($rs);
- }
- print_continue("$CFG->wwwroot/$CFG->admin/config.php");
- }
-}
-
-/**
- * Gets one record from a table, as an object
- *
- * @uses $CFG
- * @param string $table The database table to be checked against.
- * @param string $select A fragment of SQL to be used in a where clause in the SQL call.
- * @param string $fields A comma separated list of fields to be returned from the chosen table.
- * @return object|false Returns an array of found records (as objects) or false if no records or error occured.
- */
-function get_record_select($table, $select='', $fields='*') {
-
- global $CFG;
-
- if ($select) {
- $select = 'WHERE '. $select;
- }
-
- return get_record_sql('SELECT '. $fields .' FROM '. $CFG->prefix . $table .' '. $select);
-}
-
-/**
- * Get a number of records as an ADODB RecordSet.
- *
- * Selects records from the table $table.
- *
- * If specified, only records where the field $field has value $value are retured.
- *
- * If specified, the results will be sorted as specified by $sort. This
- * is added to the SQL as "ORDER BY $sort". Example values of $sort
- * mightbe "time ASC" or "time DESC".
- *
- * If $fields is specified, only those fields are returned.
- *
- * Since this method is a little less readable, use of it should be restricted to
- * code where it's possible there might be large datasets being returned. For known
- * small datasets use get_records - it leads to simpler code.
- *
- * If you only want some of the records, specify $limitfrom and $limitnum.
- * The query will skip the first $limitfrom records (according to the sort
- * order) and then return the next $limitnum records. If either of $limitfrom
- * or $limitnum is specified, both must be present.
- *
- * The return value is an ADODB RecordSet object
- * @link http://phplens.com/adodb/reference.functions.adorecordset.html
- * if the query succeeds. If an error occurrs, false is returned.
- *
- * @param string $table the table to query.
- * @param string $field a field to check (optional).
- * @param string $value the value the field must have (requred if field1 is given, else optional).
- * @param string $sort an order to sort the results in (optional, a valid SQL ORDER BY parameter).
- * @param string $fields a comma separated list of fields to return (optional, by default all fields are returned).
- * @param int $limitfrom return a subset of records, starting at this point (optional, required if $limitnum is set).
- * @param int $limitnum return a subset comprising this many records (optional, required if $limitfrom is set).
- * @return mixed an ADODB RecordSet object, or false if an error occured.
- */
-function get_recordset($table, $field='', $value='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
-
- if ($field) {
- $select = "$field = '$value'";
- } else {
- $select = '';
- }
-
- return get_recordset_select($table, $select, $sort, $fields, $limitfrom, $limitnum);
-}
-
-/**
- * Get a number of records as an ADODB RecordSet.
- *
- * If given, $select is used as the SELECT parameter in the SQL query,
- * otherwise all records from the table are returned.
- *
- * Other arguments and the return type as for @see function get_recordset.
- *
- * @uses $CFG
- * @param string $table the table to query.
- * @param string $select A fragment of SQL to be used in a where clause in the SQL call.
- * @param string $sort an order to sort the results in (optional, a valid SQL ORDER BY parameter).
- * @param string $fields a comma separated list of fields to return (optional, by default all fields are returned).
- * @param int $limitfrom return a subset of records, starting at this point (optional, required if $limitnum is set).
- * @param int $limitnum return a subset comprising this many records (optional, required if $limitfrom is set).
- * @return mixed an ADODB RecordSet object, or false if an error occured.
- */
-function get_recordset_select($table, $select='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
-
- global $CFG;
-
- if ($select) {
- $select = ' WHERE '. $select;
- }
-
- if ($sort) {
- $sort = ' ORDER BY '. $sort;
- }
-
- return get_recordset_sql('SELECT '. $fields .' FROM '. $CFG->prefix . $table . $select . $sort, $limitfrom, $limitnum);
-}
-
-/**
- * Get a number of records as an ADODB RecordSet. $sql must be a complete SQL query.
- * Since this method is a little less readable, use of it should be restricted to
- * code where it's possible there might be large datasets being returned. For known
- * small datasets use get_records_sql - it leads to simpler code.
- *
- * The return type is as for @see function get_recordset.
- *
- * @uses $CFG
- * @uses $db
- * @param string $sql the SQL select query to execute.
- * @param int $limitfrom return a subset of records, starting at this point (optional, required if $limitnum is set).
- * @param int $limitnum return a subset comprising this many records (optional, required if $limitfrom is set).
- * @return mixed an ADODB RecordSet object, or false if an error occured.
- */
-function get_recordset_sql($sql, $limitfrom=null, $limitnum=null) {
- global $CFG, $db;
-
- if (empty($db)) {
- return false;
- }
-
-/// Temporary hack as part of phasing out all access to obsolete user tables XXX
- if (!empty($CFG->rolesactive)) {
- if (strpos($sql, ' '.$CFG->prefix.'user_students ') ||
- strpos($sql, ' '.$CFG->prefix.'user_teachers ') ||
- strpos($sql, ' '.$CFG->prefix.'user_coursecreators ') ||
- strpos($sql, ' '.$CFG->prefix.'user_admins ')) {
- if (debugging()) { var_dump(debug_backtrace()); }
- print_error('sqlrelyonobsoletetable', 'debug', '',
- 'user_student, user_teachers, user_coursecreators, user_admins');
- }
- }
-
-
- if (defined('MDL_PERFDB')) { global $PERF ; $PERF->dbqueries++; };
-
- if ($limitfrom || $limitnum) {
- ///Special case, 0 must be -1 for ADOdb
- $limitfrom = empty($limitfrom) ? -1 : $limitfrom;
- $limitnum = empty($limitnum) ? -1 : $limitnum;
- $rs = $db->SelectLimit($sql, $limitnum, $limitfrom);
- } else {
- $rs = $db->Execute($sql);
- }
- if (!$rs) {
- debugging($db->ErrorMsg() .'<br /><br />'. s($sql));
- if (!empty($CFG->dblogerror)) {
- $debug=array_shift(debug_backtrace());
- error_log("SQL ".$db->ErrorMsg()." in {$debug['file']} on line {$debug['line']}. STATEMENT: $sql with limits ($limitfrom, $limitnum)");
- }
- return false;
- }
-
- return $rs;
-}
-
-/**
- * Utility function used by the following 4 methods. Note that for this to work, the first column
- * in the recordset must contain unique values, as it is used as the key to the associative array.
- *
- * @param object an ADODB RecordSet object.
- * @return mixed mixed an array of objects, or false if an error occured or the RecordSet was empty.
- */
-function recordset_to_array($rs) {
- global $CFG;
-
- $debugging = debugging('', DEBUG_DEVELOPER);
-
- if ($rs && !rs_EOF($rs)) {
- $objects = array();
- /// First of all, we are going to get the name of the first column
- /// to introduce it back after transforming the recordset to assoc array
- /// See http://docs.moodle.org/en/XMLDB_Problems, fetch mode problem.
- $firstcolumn = $rs->FetchField(0);
- /// Get the whole associative array
- if ($records = $rs->GetAssoc(true)) {
- foreach ($records as $key => $record) {
- /// Really DIRTY HACK for Oracle, but it's the only way to make it work
- /// until we got all those NOT NULL DEFAULT '' out from Moodle
- if ($CFG->dbfamily == 'oracle') {
- array_walk($record, 'onespace2empty');
- }
- /// End of DIRTY HACK
- $record[$firstcolumn->name] = $key;/// Re-add the assoc field
- if ($debugging && array_key_exists($key, $objects)) {
- debugging("Did you remember to make the first column something unique in your call to get_records? Duplicate value '$key' found in column '".$firstcolumn->name."'.", DEBUG_DEVELOPER);
- }
- $objects[$key] = (object) $record; /// To object
- }
- return $objects;
- /// Fallback in case we only have 1 field in the recordset. MDL-5877
- } else if ($rs->_numOfFields == 1 && $records = $rs->GetRows()) {
- foreach ($records as $key => $record) {
- /// Really DIRTY HACK for Oracle, but it's the only way to make it work
- /// until we got all those NOT NULL DEFAULT '' out from Moodle
- if ($CFG->dbfamily == 'oracle') {
- array_walk($record, 'onespace2empty');
- }
- /// End of DIRTY HACK
- if ($debugging && array_key_exists($record[$firstcolumn->name], $objects)) {
- debugging("Did you remember to make the first column something unique in your call to get_records? Duplicate value '".$record[$firstcolumn->name]."' found in column '".$firstcolumn->name."'.", DEBUG_DEVELOPER);
- }
- $objects[$record[$firstcolumn->name]] = (object) $record; /// The key is the first column value (like Assoc)
- }
- return $objects;
- } else {
- return false;
- }
- } else {
- return false;
- }
-}
-
-/**
- * This function is used to get the current record from the recordset. It
- * doesn't advance the recordset position. You'll need to do that by
- * using the rs_next_record($recordset) function.
- * @param ADORecordSet the recordset to fetch current record from
- * @return ADOFetchObj the object containing the fetched information
- */
-function rs_fetch_record(&$rs) {
- global $CFG;
-
- if (!$rs) {
- debugging('Incorrect $rs used!', DEBUG_DEVELOPER);
- return false;
- }
-
- $rec = $rs->FetchObj(); //Retrieve record as object without advance the pointer
-
- if ($rs->EOF) { //FetchObj requires manual checking of EOF to detect if it's the last record
- $rec = false;
- } else {
- /// DIRTY HACK to retrieve all the ' ' (1 space) fields converted back
- /// to '' (empty string) for Oracle. It's the only way to work with
- /// all those NOT NULL DEFAULT '' fields until we definetively delete them
- if ($CFG->dbfamily == 'oracle') {
- $recarr = (array)$rec; /// Cast to array
- array_walk($recarr, 'onespace2empty');
- $rec = (object)$recarr;/// Cast back to object
- }
- /// End DIRTY HACK
- }
-
- return $rec;
-}
-
-/**
- * This function is used to advance the pointer of the recordset
- * to its next position/record.
- * @param ADORecordSet the recordset to be moved to the next record
- * @return boolean true if the movement was successful and false if not (end of recordset)
- */
-function rs_next_record(&$rs) {
- if (!$rs) {
- debugging('Incorrect $rs used!', DEBUG_DEVELOPER);
- return false;
- }
-
- return $rs->MoveNext(); //Move the pointer to the next record
-}
-
-/**
- * This function is used to get the current record from the recordset. It
- * does advance the recordset position.
- * This is the prefered way to iterate over recordsets with code blocks like this:
- *
- * $rs = get_recordset('SELECT .....');
- * while ($rec = rs_fetch_next_record($rs)) {
- * /// Perform actions with the $rec record here
- * }
- * rs_close($rs); /// Close the recordset if not used anymore. Saves memory (optional but recommended).
- *
- * @param ADORecordSet the recordset to fetch current record from
- * @return mixed ADOFetchObj the object containing the fetched information or boolean false if no record (end of recordset)
- */
-function rs_fetch_next_record(&$rs) {
-
- global $CFG;
-
- if (!$rs) {
- debugging('Incorrect $rs used!', DEBUG_DEVELOPER);
- return false;
- }
-
- $rec = false;
- $recarr = $rs->FetchRow(); //Retrieve record as object without advance the pointer. It's quicker that FetchNextObj()
-
- if ($recarr) {
- /// DIRTY HACK to retrieve all the ' ' (1 space) fields converted back
- /// to '' (empty string) for Oracle. It's the only way to work with
- /// all those NOT NULL DEFAULT '' fields until we definetively delete them
- if ($CFG->dbfamily == 'oracle') {
- array_walk($recarr, 'onespace2empty');
- }
- /// End DIRTY HACK
- /// Cast array to object
- $rec = (object)$recarr;
- }
-
- return $rec;
-}
-
-/**
- * Returns true if no more records found
- * @param ADORecordSet the recordset
- * @return bool
- */
-function rs_EOF($rs) {
- if (!$rs) {
- debugging('Incorrect $rs used!', DEBUG_DEVELOPER);
- return true;
- }
- return $rs->EOF;
-}
-
-/**
- * This function closes the recordset, freeing all the memory and associated resources.
- * Note that, once closed, the recordset must not be used anymore along the request.
- * Saves memory (optional but recommended).
- * @param ADORecordSet the recordset to be closed
- * @return void
- */
-function rs_close(&$rs) {
- if (!$rs) {
- debugging('Incorrect $rs used!', DEBUG_DEVELOPER);
- return;
- }
-
- $rs->Close();
-}
-
-/**
- * Get a number of records as an array of objects.
- *
- * Return value as for @see function get_records.
- *
- * @param string $table the table to query.
- * @param string $select A fragment of SQL to be used in a where clause in the SQL call.
- * @param string $sort an order to sort the results in (optional, a valid SQL ORDER BY parameter).
- * @param string $fields a comma separated list of fields to return
- * (optional, by default all fields are returned). The first field will be used as key for the
- * array so must be a unique field such as 'id'.
- * @param int $limitfrom return a subset of records, starting at this point (optional, required if $limitnum is set).
- * @param int $limitnum return a subset comprising this many records (optional, required if $limitfrom is set).
- * @return mixed an array of objects, or false if no records were found or an error occured.
- */
-function get_records_select($table, $select='', $sort='', $fields='*', $limitfrom='', $limitnum='') {
- $rs = get_recordset_select($table, $select, $sort, $fields, $limitfrom, $limitnum);
- return recordset_to_array($rs);
-}
-
-/**
- * Get a number of records as an array of objects.
- *
- * Return value as for @see function get_records.
- *
- * @param string $sql the SQL select query to execute. The first column of this SELECT statement
- * must be a unique value (usually the 'id' field), as it will be used as the key of the
- * returned array.
- * @param int $limitfrom return a subset of records, starting at this point (optional, required if $limitnum is set).
- * @param int $limitnum return a subset comprising this many records (optional, required if $limitfrom is set).
- * @return mixed an array of objects, or false if no records were found or an error occured.
- */
-function get_records_sql($sql, $limitfrom='', $limitnum='') {
- $rs = get_recordset_sql($sql, $limitfrom, $limitnum);
- return recordset_to_array($rs);
-}
-
-/**
- * Get a single value from a table row where a particular select clause is true.
- *
- * @uses $CFG
- * @param string $table the table to query.
- * @param string $return the field to return the value of.
- * @param string $select A fragment of SQL to be used in a where clause in the SQL call.
- * @return mixed the specified value, or false if an error occured.
- */
-function get_field_select($table, $return, $select) {
- global $CFG;
- if ($select) {
- $select = 'WHERE '. $select;
- }
- return get_field_sql('SELECT ' . $return . ' FROM ' . $CFG->prefix . $table . ' ' . $select);
-}
-
-/**
- * Get a single value from a table.
- *
- * @param string $sql an SQL statement expected to return a single value.
- * @return mixed the specified value, or false if an error occured.
- */
-function get_field_sql($sql) {
- global $CFG;
-
-/// Strip potential LIMIT uses arriving here, debugging them (MDL-7173)
- $newsql = preg_replace('/ LIMIT [0-9, ]+$/is', '', $sql);
- if ($newsql != $sql) {
- debugging('Incorrect use of LIMIT clause (not cross-db) in call to get_field_sql(): ' . s($sql), DEBUG_DEVELOPER);
- $sql = $newsql;
- }
-
- $rs = get_recordset_sql($sql, 0, 1);
-
- if ($rs && $rs->RecordCount() == 1) {
- /// DIRTY HACK to retrieve all the ' ' (1 space) fields converted back
- /// to '' (empty string) for Oracle. It's the only way to work with
- /// all those NOT NULL DEFAULT '' fields until we definetively delete them
- if ($CFG->dbfamily == 'oracle') {
- $value = reset($rs->fields);
- onespace2empty($value);
- return $value;
- }
- /// End of DIRTY HACK
- return reset($rs->fields);
- } else {
- return false;
- }
-}
-
-/**
- * Delete one or more records from a table
- *
- * @uses $CFG
- * @uses $db
- * @param string $table The database table to be checked against.
- * @param string $select A fragment of SQL to be used in a where clause in the SQL call (used to define the selection criteria).
- * @return object A PHP standard object with the results from the SQL call.
- * @todo Verify return type.
- */
-function delete_records_select($table, $select='') {
-
- global $CFG, $db;
-
- if (defined('MDL_PERFDB')) { global $PERF ; $PERF->dbqueries++; };
-
- if ($select) {
- $select = 'WHERE '.$select;
- }
-
- $sql = 'DELETE FROM '. $CFG->prefix . $table .' '. $select;
- $rs = $db->Execute($sql);
- if (!$rs) {
- debugging($db->ErrorMsg() .'<br /><br />'. s($sql));
- if (!empty($CFG->dblogerror)) {
- $debug=array_shift(debug_backtrace());
- error_log("SQL ".$db->ErrorMsg()." in {$debug['file']} on line {$debug['line']}. STATEMENT: $sql");
- }
- return false;
- }
- return $rs;
-}
-
-/**
- * This function is used to convert all the Oracle 1-space defaults to the empty string
- * like a really DIRTY HACK to allow it to work better until all those NOT NULL DEFAULT ''
- * fields will be out from Moodle.
- * @param string the string to be converted to '' (empty string) if it's ' ' (one space)
- * @param mixed the key of the array in case we are using this function from array_walk,
- * defaults to null for other (direct) uses
- * @return boolean always true (the converted variable is returned by reference)
- */
- function onespace2empty(&$item, $key=null) {
- $item = $item == ' ' ? '' : $item;
- return true;
- }
-
-?>
if ($grade_category->id = $DB->insert_record('grade_categories', $grade_category)) {
$grade_category->path = '/'.$course_category->id.'/'.$grade_category->id.'/';
- update_record('grade_categories', $grade_category);
+ $DB->update_record('grade_categories', $grade_category);
$this->grade_categories[0] = $grade_category;
}
if ($grade_category->id = $DB->insert_record('grade_categories', $grade_category)) {
$grade_category->path = $this->grade_categories[0]->path.$grade_category->id.'/';
- update_record('grade_categories', $grade_category);
+ $DB->update_record('grade_categories', $grade_category);
$this->grade_categories[1] = $grade_category;
}
if ($grade_category->id = $DB->insert_record('grade_categories', $grade_category)) {
$grade_category->path = $this->grade_categories[0]->path.$grade_category->id.'/';
- update_record('grade_categories', $grade_category);
+ $DB->update_record('grade_categories', $grade_category);
$this->grade_categories[2] = $grade_category;
}
if ($grade_category->id = $DB->insert_record('grade_categories', $grade_category)) {
$grade_category->path = '/'.$course_category->id.'/'.$grade_category->id.'/';
- update_record('grade_categories', $grade_category);
+ $DB->update_record('grade_categories', $grade_category);
$this->grade_categories[3] = $grade_category;
}
}
global $DB;
events_uninstall('unittest');
- $this->assertEqual(0, count_records('events_handlers', array('handlermodule'=>'unittest')), 'All handlers should be uninstalled: %s');
+ $this->assertEqual(0, $DB->count_records('events_handlers', array('handlermodule'=>'unittest')), 'All handlers should be uninstalled: %s');
}
/**
}
}
-/**
- * Given a table name, a two-dimensional array of data, and a database connection,
- * creates a table in the database. The array of data should look something like this.
- *
- * $testdata = array(
- * array('id', 'username', 'firstname', 'lastname', 'email'),
- * array(1, 'u1', 'user', 'one', 'u1@example.com'),
- * array(2, 'u2', 'user', 'two', 'u2@example.com'),
- * array(3, 'u3', 'user', 'three', 'u3@example.com'),
- * array(4, 'u4', 'user', 'four', 'u4@example.com'),
- * array(5, 'u5', 'user', 'five', 'u5@example.com'),
- * );
- *
- * The first 'row' of the test data gives the column names. The type of each column
- * is set to either INT or VARCHAR($strlen), guessed by inspecting the first row of
- * data. Unless the col name is 'id' in which case the col type will be SERIAL.
- * The remaining 'rows' of the data array are values loaded into the table. All columns
- * are created with a default of 0xdefa or 'Default' as appropriate.
- *
- * This function should not be used in real code. Only for testing and debugging.
- *
- * @param string $tablename the name of the table to create. E.g. 'mdl_unittest_user'.
- * @param array $data a two-dimensional array of data, in the format described above.
- * @param object $db an AdoDB database connection.
- * @param int $strlen the width to use for string fields.
- */
-function load_test_table($tablename, $data, $db = null, $strlen = 255) {
- $colnames = array_shift($data);
- $coldefs = array();
- foreach (array_combine($colnames, $data[0]) as $colname => $value) {
- if ($colname == 'id') {
- $type = 'SERIAL';
- } else if (is_int($value)) {
- $type = 'INTEGER DEFAULT 57082'; // 0xdefa
- } else {
- $type = "VARCHAR($strlen) DEFAULT 'Default'";
- }
- $coldefs[] = "$colname $type";
- }
- _private_execute_sql("CREATE TABLE $tablename (" . join(',', $coldefs) . ');', $db);
-
- array_unshift($data, $colnames);
- load_test_data($tablename, $data, $db);
-}
-
-/**
- * Given a table name, a two-dimensional array of data, and a database connection,
- * adds data to the database table. The array should have the same format as for
- * load_test_table(), with the first 'row' giving column names.
- *
- * This function should not be used in real code. Only for testing and debugging.
- *
- * @param string $tablename the name of the table to populate. E.g. 'mdl_unittest_user'.
- * @param array $data a two-dimensional array of data, in the format described.
- * @param object $localdb an AdoDB database connection.
- */
-function load_test_data($tablename, $data, $localdb = null) {
- global $CFG;
-
- if (null == $localdb) {
- global $db;
- $localdb = $db;
- }
- $colnames = array_shift($data);
- $idcol = array_search('id', $colnames);
- $maxid = -1;
- foreach ($data as $row) {
- _private_execute_sql($localdb->GetInsertSQL($tablename, array_combine($colnames, $row)), $localdb);
- if ($idcol !== false && $row[$idcol] > $maxid) {
- $maxid = $row[$idcol];
- }
- }
- if ($CFG->dbfamily == 'postgres' && $idcol !== false) {
- $maxid += 1;
- _private_execute_sql("ALTER SEQUENCE {$tablename}_id_seq RESTART WITH $maxid;", $localdb);
- }
-}
-
-/**
- * Make multiple tables that are the same as a real table but empty.
- *
- * This function should not be used in real code. Only for testing and debugging.
- *
- * @param mixed $tablename Array of strings containing the names of the table to populate (without prefix).
- * @param string $realprefix the prefix used for real tables. E.g. 'mdl_'.
- * @param string $testprefix the prefix used for test tables. E.g. 'mdl_unittest_'.
- * @param object $db an AdoDB database connection.
- */
-function make_test_tables_like_real_one($tablenames, $realprefix, $testprefix, $db,$dropconstraints=false) {
- foreach($tablenames as $individual) {
- make_test_table_like_real_one($individual,$realprefix,$testprefix,$db,$dropconstraints);
- }
-}
-
-/**
- * Make a test table that has all the same columns as a real moodle table,
- * but which is empty.
- *
- * This function should not be used in real code. Only for testing and debugging.
- *
- * @param string $tablename Name of the table to populate. E.g. 'user'.
- * @param string $realprefix the prefix used for real tables. E.g. 'mdl_'.
- * @param string $testprefix the prefix used for test tables. E.g. 'mdl_unittest_'.
- * @param object $db an AdoDB database connection.
- */
-function make_test_table_like_real_one($tablename, $realprefix, $testprefix, $db, $dropconstraints=false) {
- _private_execute_sql("CREATE TABLE $testprefix$tablename (LIKE $realprefix$tablename INCLUDING DEFAULTS);", $db);
- if (_private_has_id_column($testprefix . $tablename, $db)) {
- _private_execute_sql("CREATE SEQUENCE $testprefix{$tablename}_id_seq;", $db);
- _private_execute_sql("ALTER TABLE $testprefix$tablename ALTER COLUMN id SET DEFAULT nextval('{$testprefix}{$tablename}_id_seq'::regclass);", $db);
- _private_execute_sql("ALTER TABLE $testprefix$tablename ADD PRIMARY KEY (id);", $db);
- }
- if($dropconstraints) {
- $cols=$db->MetaColumnNames($testprefix.$tablename);
- foreach($cols as $col) {
- $rs=_private_execute_sql(
- "SELECT constraint_name FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE table_name='$testprefix$tablename'",$db);
- while(!$rs->EOF) {
- $constraintname=$rs->fields['constraint_name'];
- _private_execute_sql("ALTER TABLE $testprefix$tablename DROP CONSTRAINT $constraintname",$db);
- $rs->MoveNext();
- }
-
- _private_execute_sql("ALTER TABLE $testprefix$tablename ALTER COLUMN $col DROP NOT NULL",$db);
- }
- }
-}
-
-/**
- * Drops a table from the database pointed to by the database connection.
- * This undoes the create performed by load_test_table().
- *
- * This function should not be used in real code. Only for testing and debugging.
- *
- * @param string $tablename the name of the table to populate. E.g. 'mdl_unittest_user'.
- * @param object $db an AdoDB database connection.
- * @param bool $cascade If true, also drop tables that depend on this one, e.g. through
- * foreign key constraints.
- */
-function remove_test_table($tablename, $db, $cascade = false) {
- global $CFG;
- _private_execute_sql('DROP TABLE ' . $tablename . ($cascade ? ' CASCADE' : '') . ';', $db);
-
- if ($CFG->dbfamily == 'postgres') {
- $rs = $db->Execute("SELECT relname FROM pg_class WHERE relname = '{$tablename}_id_seq' AND relkind = 'S';");
- if ($rs && !rs_EOF($rs)) {
- _private_execute_sql("DROP SEQUENCE {$tablename}_id_seq;", $db);
- }
- }
-}
-
-/**
- * Drops all the tables with a particular prefix from the database pointed to by the database connection.
- * Useful for cleaning up after a unit test run has crashed leaving the DB full of junk.
- *
- * This function should not be used in real code. Only for testing and debugging.
- *
- * @param string $prefix the prfix of tables to drop 'mdl_unittest_'.
- * @param object $db an AdoDB database connection.
- */
-function wipe_tables($prefix, $db) {
- if (strpos($prefix, 'test') === false) {
- notice('The wipe_tables function should only be used to wipe test tables.');
- return;
- }
- $tables = $db->Metatables('TABLES', false, "$prefix%");
- foreach ($tables as $table) {
- _private_execute_sql("DROP TABLE $table CASCADE", $db);
- }
-}
-
-/**
- * Drops all the sequences with a particular prefix from the database pointed to by the database connection.
- * Useful for cleaning up after a unit test run has crashed leaving the DB full of junk.
- *
- * This function should not be used in real code. Only for testing and debugging.
- *
- * @param string $prefix the prfix of sequences to drop 'mdl_unittest_'.
- * @param object $db an AdoDB database connection.
- */
-function wipe_sequences($prefix, $db) {
- global $CFG;
-
- if ($CFG->dbfamily == 'postgres') {
- $sequences = $db->GetCol("SELECT relname FROM pg_class WHERE relname LIKE '$prefix%_id_seq' AND relkind = 'S';");
- if ($sequences) {
- foreach ($sequences as $sequence) {
- _private_execute_sql("DROP SEQUENCE $sequence CASCADE", $db);
- }
- }
- }
-}
-
-function _private_has_id_column($table, $db) {
- return in_array('id', $db->MetaColumnNames($table));
-}
-
-function _private_execute_sql($sql, $localdb = null) {
-
- if (null == $localdb) {
- global $db;
- $localdb = $db;
- }
- if (!$rs = $localdb->Execute($sql)) {
- echo '<p>SQL ERROR: ', $localdb->ErrorMsg(), ". STATEMENT: $sql</p>";
- }
- return $rs;
-}
-
-/**
- * Base class for testcases that want a different DB prefix.
- *
- * That is, when you need to load test data into the database for
- * unit testing, instead of messing with the real mdl_course table,
- * we will temporarily change $CFG->prefix from (say) mdl_ to mdl_unittest_
- * and create a table called mdl_unittest_course to hold the test data.
- */
-class prefix_changing_test_case extends UnitTestCase {
- var $old_prefix;
-
- function change_prefix() {
- global $CFG;
- $this->old_prefix = $CFG->prefix;
- $CFG->prefix = $CFG->prefix . 'unittest_';
- }
-
- function change_prefix_back() {
- global $CFG;
- $CFG->prefix = $this->old_prefix;
- }
-
- function setUp() {
- $this->change_prefix();
- }
-
- function tearDown() {
- $this->change_prefix_back();
- }
-}
?>
function message_search_users($courseid, $searchtext, $sort='', $exceptions='') {
global $CFG, $USER, $DB;
- $fullname = sql_fullname();
- $LIKE = sql_ilike();
+ $fullname = $DB->sql_fullname();
+ $LIKE = $DB->sql_ilike();
if (!empty($exceptions)) {
$except = ' AND u.id NOT IN ('. $exceptions .') ';
}
function get_sort_sql($fieldname) {
-
- return sql_cast_char2int($fieldname, true);
+ global $DB;
+ return $DB->sql_cast_char2int($fieldname, true);
}
$groupselect = ' ';
}
- $ilike = sql_ilike(); //Be case-insensitive
+ $ilike = $DB->sql_ilike(); //Be case-insensitive
/// Find the field we are sorting on
if ($sort <= 0 or !$sortfield = data_get_field_from_id($sort, $data)) {
*/
function forum_print_overview($courses,&$htmlarray) {
global $USER, $CFG;
- $LIKE = sql_ilike();
+ $LIKE = $DB->sql_ilike();
if (empty($courses) || !is_array($courses) || count($courses) == 0) {
return array();
$selectdiscussion = "(".implode(" OR ", $where).")";
// Some differences SQL
- $LIKE = sql_ilike();
+ $LIKE = $DB->sql_ilike();
$NOTLIKE = 'NOT ' . $LIKE;
if ($CFG->dbfamily == 'postgres') {
$REGEXP = '~*';
} elseif ( $action == "add" ) {
if ( $confirm ) {
- $ILIKE = sql_ilike();
+ $ILIKE = $DB->sql_ilike();
$dupcategory = $DB->get_records_sql("SELECT * FROM {glossary_categories} WHERE name $ILIKE ? AND glossaryid=?", array($name, $glossary->id));
if ( $dupcategory ) {
echo "<p style=\"text-align:center\">" . get_string("add"). " " . get_string("category","glossary");
// - other unidentified situations ?!
$regrade_hotpots = array();
- $concat_field = sql_concat('hotpot', "'_'", 'name');
+ $concat_field = $DB->sql_concat('hotpot', "'_'", 'name');
if ($concat_field) {
$records = $DB->get_records_sql("
SELECT $concat_field, COUNT(*), hotpot, name
// and their parents will already have been included.)
$categorieswithrandom = $DB->get_records_sql("
SELECT question.category AS id, SUM(" .
- sql_cast_char2int('questiontext', true) . ") AS numqsusingsubcategories
+ $DB->sql_cast_char2int('questiontext', true) . ") AS numqsusingsubcategories
FROM {quiz_question_instances} qqi,
$from
{question} question
"SELECT * FROM {question} q
WHERE qtype = '" . RANDOM . "'
AND category = ?
- AND " . sql_compare_text('questiontext') . " = ?
+ AND " . $DB->sql_compare_text('questiontext') . " = ?
AND NOT EXISTS (SELECT * FROM {quiz_question_instances} WHERE question = q.id)
ORDER BY id", array($category->id, $recurse))) {
// Take as many of these as needed.
static $cache = array();
if (!array_key_exists($quizid, $cache)) {
$cache[$quizid] = $DB->record_exists_select('quiz_feedback',
- "quizid = ? AND " . sql_isnotempty('quiz_feedback', 'feedbacktext', false, true), array($quizid));
+ "quizid = ? AND " . $DB->sql_isnotempty('quiz_feedback', 'feedbacktext', false, true), array($quizid));
}
return $cache[$quizid];
}