summaryrefslogtreecommitdiff
path: root/drivers/adodb-pdo_sqlsrv.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/adodb-pdo_sqlsrv.inc.php')
-rw-r--r--drivers/adodb-pdo_sqlsrv.inc.php117
1 files changed, 116 insertions, 1 deletions
diff --git a/drivers/adodb-pdo_sqlsrv.inc.php b/drivers/adodb-pdo_sqlsrv.inc.php
index 869e8e18..ba5180ec 100644
--- a/drivers/adodb-pdo_sqlsrv.inc.php
+++ b/drivers/adodb-pdo_sqlsrv.inc.php
@@ -5,10 +5,10 @@
*/
class ADODB_pdo_sqlsrv extends ADODB_pdo
{
-
var $hasTop = 'top';
var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)';
var $sysTimeStamp = 'GetDate()';
+ var $arrayClass = 'ADORecordSet_array_pdo_sqlsrv';
function _init(ADODB_pdo $parentDriver)
{
@@ -45,5 +45,120 @@ class ADODB_pdo_sqlsrv extends ADODB_pdo
{
return ADOConnection::ServerInfo();
}
+}
+
+class ADORecordSet_pdo_sqlsrv extends ADORecordSet_pdo
+{
+
+ public $databaseType = "pdo_sqlsrv";
+
+ /**
+ * returns the field object
+ *
+ * @param int $fieldOffset Optional field offset
+ *
+ * @return object The ADOFieldObject describing the field
+ */
+ public function fetchField($fieldOffset = 0)
+ {
+
+ // Default behavior allows passing in of -1 offset, which crashes the method
+ if ($fieldOffset == -1) {
+ $fieldOffset++;
+ }
+
+ $o = new ADOFieldObject();
+ $arr = @$this->_queryID->getColumnMeta($fieldOffset);
+
+ if (!$arr) {
+ $o->name = 'bad getColumnMeta()';
+ $o->max_length = -1;
+ $o->type = 'VARCHAR';
+ $o->precision = 0;
+ return $o;
+ }
+ $o->name = $arr['name'];
+ if (isset($arr['sqlsrv:decl_type']) && $arr['sqlsrv:decl_type'] <> "null") {
+ // Use the SQL Server driver specific value
+ $o->type = $arr['sqlsrv:decl_type'];
+ } else {
+ $o->type = adodb_pdo_type($arr['pdo_type']);
+ }
+ $o->max_length = $arr['len'];
+ $o->precision = $arr['precision'];
+
+ switch (ADODB_ASSOC_CASE) {
+ case ADODB_ASSOC_CASE_LOWER:
+ $o->name = strtolower($o->name);
+ break;
+ case ADODB_ASSOC_CASE_UPPER:
+ $o->name = strtoupper($o->name);
+ break;
+ }
+
+ return $o;
+ }
+}
+
+class ADORecordSet_array_pdo_sqlsrv extends ADORecordSet_array_pdo
+{
+
+ /**
+ * returns the field object
+ *
+ * Note that this is a direct copy of the ADORecordSet_pdo_sqlsrv method
+ *
+ * @param int $fieldOffset Optional field offset
+ *
+ * @return object The ADOfieldobject describing the field
+ */
+ public function fetchField($fieldOffset = 0)
+ {
+ // Default behavior allows passing in of -1 offset, which crashes the method
+ if ($fieldOffset == -1) {
+ $fieldOffset++;
+ }
+ $o = new ADOFieldObject();
+ $arr = @$this->_queryID->getColumnMeta($fieldOffset);
+
+ if (!$arr) {
+ $o->name = 'bad getColumnMeta()';
+ $o->max_length = -1;
+ $o->type = 'VARCHAR';
+ $o->precision = 0;
+ return $o;
+ }
+ $o->name = $arr['name'];
+ if (isset($arr['sqlsrv:decl_type']) && $arr['sqlsrv:decl_type'] <> "null") {
+ // Use the SQL Server driver specific value
+ $o->type = $arr['sqlsrv:decl_type'];
+ } else {
+ $o->type = adodb_pdo_type($arr['pdo_type']);
+ }
+ $o->max_length = $arr['len'];
+ $o->precision = $arr['precision'];
+
+ switch (ADODB_ASSOC_CASE) {
+ case ADODB_ASSOC_CASE_LOWER:
+ $o->name = strtolower($o->name);
+ break;
+ case ADODB_ASSOC_CASE_UPPER:
+ $o->name = strtoupper($o->name);
+ break;
+ }
+
+ return $o;
+ }
+
+ function SetTransactionMode( $transaction_mode )
+ {
+ $this->_transmode = $transaction_mode;
+ if (empty($transaction_mode)) {
+ $this->_connectionID->query('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
+ return;
+ }
+ if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;
+ $this->_connectionID->query("SET TRANSACTION ".$transaction_mode);
+ }
}