Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
<?php
< /* < @version v5.21.0 2021-02-27 < @copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights reserved. < @copyright (c) 2014 Damien Regad, Mark Newnham and the ADOdb community < Released under both BSD license and Lesser GPL library license. < Whenever there is any discrepancy between the two licenses, < the BSD license will take precedence. < Set tabs to 4 for best viewing. < < Latest version is available at https://adodb.org/ < < Microsoft SQL Server ADO data driver. Requires ADO and MSSQL client. < Works only on MS Windows. < < Warning: Some versions of PHP (esp PHP4) leak memory when ADO/COM is used. < Please check http://bugs.php.net/ for more info.
> /** > * Microsoft SQL Server ADO driver. > * > * Requires ADO and MSSQL client. Works only on MS Windows. > * > * This file is part of ADOdb, a Database Abstraction Layer library for PHP. > * > * @package ADOdb > * @link https://adodb.org Project's web site and documentation > * @link https://github.com/ADOdb/ADOdb Source code and issue tracker > * > * The ADOdb Library is dual-licensed, released under both the BSD 3-Clause > * and the GNU Lesser General Public Licence (LGPL) v2.1 or, at your option, > * any later version. This means you can use it in proprietary products. > * See the LICENSE.md file distributed with this source code for details. > * @license BSD-3-Clause > * @license LGPL-2.1-or-later > * > * @copyright 2000-2013 John Lim > * @copyright 2014 Damien Regad, Mark Newnham and the ADOdb community
*/ // security - hide paths if (!defined('ADODB_DIR')) die(); if (!defined('_ADODB_ADO_LAYER')) { include_once(ADODB_DIR . "/drivers/adodb-ado5.inc.php"); } class ADODB_ado_mssql extends ADODB_ado { var $databaseType = 'ado_mssql'; var $hasTop = 'top'; var $hasInsertID = true; var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)'; var $sysTimeStamp = 'GetDate()'; var $leftOuter = '*='; var $rightOuter = '=*'; var $ansiOuter = true; // for mssql7 or later var $substr = "substring"; var $length = 'len'; var $_dropSeqSQL = "drop table %s"; //var $_inTransaction = 1; // always open recordsets, so no transaction problems.
< function _insertid()
> protected function _insertID($table = '', $column = '')
{ return $this->GetOne('select SCOPE_IDENTITY()'); } function _affectedrows() { return $this->GetOne('select @@rowcount'); } function SetTransactionMode( $transaction_mode ) { $this->_transmode = $transaction_mode; if (empty($transaction_mode)) { $this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED'); return; } if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode; $this->Execute("SET TRANSACTION ".$transaction_mode); } function qStr($s, $magic_quotes=false) { $s = ADOConnection::qStr($s); return str_replace("\0", "\\\\000", $s); } function MetaColumns($table, $normalize=true) { $table = strtoupper($table); $arr= array(); $dbc = $this->_connectionID; $osoptions = array(); $osoptions[0] = null; $osoptions[1] = null; $osoptions[2] = $table; $osoptions[3] = null; $adors=@$dbc->OpenSchema(4, $osoptions);//tables if ($adors){ while (!$adors->EOF){ $fld = new ADOFieldObject(); $c = $adors->Fields(3); $fld->name = $c->Value; $fld->type = 'CHAR'; // cannot discover type in ADO! $fld->max_length = -1; $arr[strtoupper($fld->name)]=$fld; $adors->MoveNext(); } $adors->Close(); } $false = false; return empty($arr) ? $false : $arr; } function CreateSequence($seq='adodbseq',$start=1) { $this->Execute('BEGIN TRANSACTION adodbseq'); $start -= 1; $this->Execute("create table $seq (id float(53))"); $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)"); if (!$ok) { $this->Execute('ROLLBACK TRANSACTION adodbseq'); return false; } $this->Execute('COMMIT TRANSACTION adodbseq'); return true; } function GenID($seq='adodbseq',$start=1) { //$this->debug=1; $this->Execute('BEGIN TRANSACTION adodbseq'); $ok = $this->Execute("update $seq with (tablock,holdlock) set id = id + 1"); if (!$ok) { $this->Execute("create table $seq (id float(53))"); $ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)"); if (!$ok) { $this->Execute('ROLLBACK TRANSACTION adodbseq'); return false; } $this->Execute('COMMIT TRANSACTION adodbseq'); return $start; } $num = $this->GetOne("select id from $seq"); $this->Execute('COMMIT TRANSACTION adodbseq'); return $num; // in old implementation, pre 1.90, we returned GUID... //return $this->GetOne("SELECT CONVERT(varchar(255), NEWID()) AS 'Char'"); } } // end class class ADORecordSet_ado_mssql extends ADORecordSet_ado { var $databaseType = 'ado_mssql'; }