Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.

Differences Between: [Versions 310 and 401] [Versions 311 and 401] [Versions 39 and 401] [Versions 400 and 401] [Versions 401 and 402] [Versions 401 and 403]

Native sqlsrv class representing moodle database interface.

Copyright: 2009 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
License: http://www.gnu.org/copyleft/gpl.html GNU GPL v2 or later
File Size: 1666 lines (64 kb)
Included or required:0 times
Referenced: 0 times
Includes or requires: 3 files
 lib/dml/moodle_database.php
 lib/dml/sqlsrv_native_moodle_recordset.php
 lib/dml/sqlsrv_native_moodle_temptables.php

Defines 1 class

sqlsrv_native_moodle_database:: (67 methods):
  __construct()
  driver_installed()
  get_dbfamily()
  get_dbtype()
  get_dblibrary()
  get_name()
  get_configuration_help()
  diagnose()
  connect()
  dispose()
  query_start()
  query_end()
  get_server_info()
  fix_table_names()
  allowed_param_types()
  get_last_error()
  do_query()
  get_tables()
  get_indexes()
  fetch_columns()
  normalise_value()
  free_result()
  sqlsrvtype2moodletype()
  change_database_structure()
  build_native_bound_params()
  emulate_bound_params()
  execute()
  has_query_order_by()
  get_recordset_sql()
  add_no_lock_to_temp_tables()
  create_recordset()
  recordset_closed()
  get_records_sql()
  get_fieldset_sql()
  insert_record_raw()
  sqlsrv_fetch_id()
  sqlsrv_fetchrow()
  insert_record()
  import_record()
  update_record_raw()
  update_record()
  set_field_select()
  delete_records_select()
  sql_cast_to_char()
  sql_cast_char2int()
  sql_cast_char2real()
  sql_ceil()
  get_collation()
  sql_equal()
  sql_like()
  sql_like_escape()
  sql_concat()
  sql_concat_join()
  sql_group_concat()
  sql_isempty()
  sql_length()
  sql_order_by_text()
  sql_position()
  sql_substr()
  replace_all_text_supported()
  session_lock_supported()
  get_session_lock()
  release_session_lock()
  begin_transaction()
  commit_transaction()
  rollback_transaction()
  is_fulltext_search_supported()


Class: sqlsrv_native_moodle_database  - X-Ref

Native sqlsrv class representing moodle database interface.

__construct($external=false)   X-Ref
Constructor - instantiates the database, specifying if it's external (connect to other systems) or no (Moodle DB)
note this has effect to decide if prefix checks must be performed or no

param: bool true means external database used

driver_installed()   X-Ref
Detects if all needed PHP stuff installed.
Note: can be used before connect()

return: mixed true if ok, string if something

get_dbfamily()   X-Ref
Returns database family type - describes SQL dialect
Note: can be used before connect()

return: string db family name (mysql, postgres, mssql, sqlsrv, oracle, etc.)

get_dbtype()   X-Ref
Returns more specific database driver type
Note: can be used before connect()

return: string db type mysqli, pgsql, oci, mssql, sqlsrv

get_dblibrary()   X-Ref
Returns general database library name
Note: can be used before connect()

return: string db type pdo, native

get_name()   X-Ref
Returns localised database type name
Note: can be used before connect()

return: string

get_configuration_help()   X-Ref
Returns localised database configuration help.
Note: can be used before connect()

return: string

diagnose()   X-Ref
Diagnose database and tables, this function is used
to verify database and driver settings, db engine types, etc.

return: string null means everything ok, string means problem found.

connect($dbhost, $dbuser, $dbpass, $dbname, $prefix, array $dboptions=null)   X-Ref
Connect to db
Must be called before most other methods. (you can call methods that return connection configuration parameters)

param: string $dbhost The database host.
param: string $dbuser The database username.
param: string $dbpass The database username's password.
param: string $dbname The name of the database being connected to.
param: mixed $prefix string|bool The moodle db table name's prefix. false is used for external databases where prefix not used
param: array $dboptions driver specific options
return: bool true

dispose()   X-Ref
Close database connection and release all resources
and memory (especially circular memory references).
Do NOT use connect() again, create a new instance if needed.


query_start($sql, ?array $params, $type, $extrainfo = null)   X-Ref
Called before each db query.

param: string $sql
param: array|null $params An array of parameters.
param: int $type type of query
param: mixed $extrainfo driver specific extra information
return: void

query_end($result)   X-Ref
Called immediately after each db query.

param: mixed db specific result
return: void

get_server_info()   X-Ref
Returns database server info array

return: array Array containing 'description', 'version' and 'database' (current db) info

fix_table_names($sql)   X-Ref
Override: Converts short table name {tablename} to real table name
supporting temp tables (#) if detected

param: string sql
return: string sql

allowed_param_types()   X-Ref
Returns supported query parameter types

return: int bitmask

get_last_error()   X-Ref
Returns last error reported by database engine.

return: string error message

do_query($sql, $params, $sql_query_type, $free_result = true, $scrollable = false)   X-Ref
Prepare the query binding and do the actual query.

param: string $sql The sql statement
param: array $params array of params for binding. If NULL, they are ignored.
param: int $sql_query_type - Type of operation
param: bool $free_result - Default true, transaction query will be freed.
param: bool $scrollable - Default false, to use for quickly seeking to target records
return: resource|bool result

get_tables($usecache = true)   X-Ref
Return tables in database WITHOUT current prefix.

param: bool $usecache if true, returns list of cached tables.
return: array of table names in lowercase and without prefix

get_indexes($table)   X-Ref
Return table indexes - everything lowercased.

param: string $table The table we want to get indexes from.
return: array of arrays

fetch_columns(string $table)   X-Ref
Returns detailed information about columns in table.

param: string $table name
return: array array of database_column_info objects indexed with column names

normalise_value($column, $value)   X-Ref
Normalise values based in RDBMS dependencies (booleans, LOBs...)

param: database_column_info $column column metadata corresponding with the value we are going to normalise
param: mixed $value value we are going to normalise
return: mixed the normalised value

free_result($resource)   X-Ref
Selectively call sqlsrv_free_stmt(), avoiding some warnings without using the horrible @

param: sqlsrv_resource $resource resource to be freed if possible
return: bool

sqlsrvtype2moodletype($sqlsrv_type)   X-Ref
Provides mapping between sqlsrv native data types and moodle_database - database_column_info - ones)

param: string $sqlsrv_type native sqlsrv data type
return: string 1-char database_column_info data type

change_database_structure($sql, $tablenames = null)   X-Ref
Do NOT use in code, to be used by database_manager only!

param: string|array $sql query
param: array|null $tablenames an array of xmldb table names affected by this request.
return: bool true

build_native_bound_params(array $params = null)   X-Ref
Prepare the array of params for native binding


emulate_bound_params($sql, array $params = null)   X-Ref
Workaround for SQL*Server Native driver similar to MSSQL driver for
consistent behavior.


execute($sql, array $params = null)   X-Ref
Execute general sql query. Should be used only when no other method suitable.
Do NOT use this to make changes in db structure, use database_manager methods instead!

param: string $sql query
param: array $params query parameters
return: bool true

has_query_order_by(string $sql)   X-Ref
Whether the given SQL statement has the ORDER BY clause in the main query.

param: string $sql the SQL statement
return: bool true if the main query has the ORDER BY clause; otherwise, false.

get_recordset_sql($sql, array $params = null, $limitfrom = 0, $limitnum = 0)   X-Ref
Get a number of records as a moodle_recordset using a SQL statement.

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 like:
param: string $sql the SQL select query to execute.
param: array $params array of sql parameters
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: moodle_recordset instance

add_no_lock_to_temp_tables($sql)   X-Ref
Use NOLOCK on any temp tables. Since it's a temp table and uncommitted reads are low risk anyway.

param: string $sql the SQL select query to execute.
return: string The SQL, with WITH (NOLOCK) added to all temp tables

create_recordset($result)   X-Ref
Create a record set and initialize with first row

param: mixed $result
return: sqlsrv_native_moodle_recordset

recordset_closed(sqlsrv_native_moodle_recordset $rs)   X-Ref
Do not use outside of recordset class.

param: sqlsrv_native_moodle_recordset $rs

get_records_sql($sql, array $params = null, $limitfrom = 0, $limitnum = 0)   X-Ref
Get a number of records as an array of objects using a SQL statement.

Return value is like:
param: string $sql the SQL select query to execute. The first column of this SELECT statement
param: array $params array of sql parameters
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: array of objects, or empty array if no records were found

get_fieldset_sql($sql, array $params = null)   X-Ref
Selects records and return values (first field) as an array using a SQL statement.

param: string $sql The SQL query
param: array $params array of sql parameters
return: array of values

insert_record_raw($table, $params, $returnid=true, $bulk=false, $customsequence=false)   X-Ref
Insert new record into database, as fast as possible, no safety checks, lobs not supported.

param: string $table name
param: mixed $params data record as object or array
param: bool $returnit return it of inserted record
param: bool $bulk true means repeated inserts expected
param: bool $customsequence true if 'id' included in $params, disables $returnid
return: bool|int true or new id

sqlsrv_fetch_id()   X-Ref
Get the ID of the current action

return: mixed ID

sqlsrv_fetchrow($query_id)   X-Ref
Fetch a single row into an numbered array

param: mixed $query_id

insert_record($table, $dataobject, $returnid = true, $bulk = false)   X-Ref
Insert a record into a table and return the "id" field if required.

Some conversions and safety checks are carried out. Lobs are supported.
If the return ID isn't required, then this just reports success as true/false.
$data is an object containing needed data
param: string $table The database table to be inserted into
param: object|array $dataobject A data object with values for one or more fields in the record
param: bool $returnid Should the id of the newly created record entry be returned? If this option is not requested then true/false is returned.
return: bool|int true or new id

import_record($table, $dataobject)   X-Ref
Import a record into a table, id field is required.
Safety checks are NOT carried out. Lobs are supported.

param: string $table name of database table to be inserted into
param: object $dataobject A data object with values for one or more fields in the record
return: bool true

update_record_raw($table, $params, $bulk = false)   X-Ref
Update record in database, as fast as possible, no safety checks, lobs not supported.

param: string $table name
param: mixed $params data record as object or array
param: bool true means repeated updates expected
return: bool true

update_record($table, $dataobject, $bulk = false)   X-Ref
Update a record in a table

$dataobject is an object containing needed data
Relies on $dataobject having a variable "id" to
specify the record to update

param: string $table The database table to be checked against.
param: object $dataobject An object with contents equal to fieldname=>fieldvalue. Must have an entry for 'id' to map to the table specified.
param: bool true means repeated updates expected
return: bool true

set_field_select($table, $newfield, $newvalue, $select, array $params = null)   X-Ref
Set a single field in every table record which match a particular WHERE clause.

param: string $table The database table to be checked against.
param: string $newfield the field to set.
param: string $newvalue the value to set the field to.
param: string $select A fragment of SQL to be used in a where clause in the SQL call.
param: array $params array of sql parameters
return: bool true

delete_records_select($table, $select, array $params = null)   X-Ref
Delete one or more records from a table which match a particular WHERE clause.

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).
param: array $params array of sql parameters
return: bool true

sql_cast_to_char(string $field)   X-Ref
Return SQL for casting to char of given field/expression

param: string $field Table field or SQL expression to be cast
return: string

sql_cast_char2int($fieldname, $text = false)   X-Ref
No description

sql_cast_char2real($fieldname, $text=false)   X-Ref
No description

sql_ceil($fieldname)   X-Ref
No description

get_collation()   X-Ref
No description

sql_equal($fieldname, $param, $casesensitive = true, $accentsensitive = true, $notequal = false)   X-Ref
No description

sql_like($fieldname, $param, $casesensitive = true, $accentsensitive = true, $notlike = false, $escapechar = '\\')   X-Ref
Returns 'LIKE' part of a query.

param: string $fieldname usually name of the table column
param: string $param usually bound query parameter (?, :named)
param: bool $casesensitive use case sensitive search
param: bool $accensensitive use accent sensitive search (not all databases support accent insensitive)
param: bool $notlike true means "NOT LIKE"
param: string $escapechar escape char for '%' and '_'
return: string SQL code fragment

sql_like_escape($text, $escapechar = '\\')   X-Ref
Escape common SQL LIKE special characters like '_' or '%', plus '[' & ']' which are also supported in SQL Server

Note that '^' and '-' also have meaning within a LIKE, but only when enclosed within square brackets. As this syntax
is not supported on all databases and the brackets are always escaped, we don't need special handling of them

param: string $text
param: string $escapechar
return: string

sql_concat()   X-Ref
No description

sql_concat_join($separator = "' '", $elements = array ()   X-Ref
No description

sql_group_concat(string $field, string $separator = ', ', string $sort = '')   X-Ref
Return SQL for performing group concatenation on given field/expression

param: string $field
param: string $separator
param: string $sort
return: string

sql_isempty($tablename, $fieldname, $nullablefield, $textfield)   X-Ref
No description

sql_length($fieldname)   X-Ref
Returns the SQL text to be used to calculate the length in characters of one expression.

param: string fieldname or expression to calculate its length in characters.
return: string the piece of SQL code to be used in the statement.

sql_order_by_text($fieldname, $numchars = 32)   X-Ref
No description

sql_position($needle, $haystack)   X-Ref
Returns the SQL for returning searching one string for the location of another.


sql_substr($expr, $start, $length = false)   X-Ref
Returns the proper substr() SQL text used to extract substrings from DB
NOTE: this was originally returning only function name

param: string $expr some string field, no aggregates
param: mixed $start integer or expression evaluating to int
param: mixed $length optional integer or expression evaluating to int
return: string sql fragment

replace_all_text_supported()   X-Ref
Does this driver support tool_replace?

return: bool

session_lock_supported()   X-Ref
No description

get_session_lock($rowid, $timeout)   X-Ref
Obtain session lock

param: int $rowid id of the row with session record
param: int $timeout max allowed time to wait for the lock in seconds
return: void

release_session_lock($rowid)   X-Ref
No description

begin_transaction()   X-Ref
Driver specific start of real database transaction,
this can not be used directly in code.

return: void

commit_transaction()   X-Ref
Driver specific commit of real database transaction,
this can not be used directly in code.

return: void

rollback_transaction()   X-Ref
Driver specific abort of real database transaction,
this can not be used directly in code.

return: void

is_fulltext_search_supported()   X-Ref
Is fulltext search enabled?.

return: bool