]> git.mjollnir.org Git - moodle.git/commitdiff
Reverting last commit. This is an EXTERNAL library file and shouldn't
authorstronk7 <stronk7>
Mon, 15 Oct 2007 22:04:02 +0000 (22:04 +0000)
committerstronk7 <stronk7>
Mon, 15 Oct 2007 22:04:02 +0000 (22:04 +0000)
be modified. And it was broken (strange linefeeds). MDL-11779

Merged from MOODLE_19_STABLE

lib/adodb/drivers/adodb-mssql_n.inc.php

index 1ecaf5586883974ecacdf8ff8bbc75731b092440..e740aacffab2b3b1fd56bcca3a8275d7c9b30d71 100644 (file)
-<?php
-
-
-
-/// $Id $
-
-
-
-///////////////////////////////////////////////////////////////////////////
-
-//                                                                       //
-
-// NOTICE OF COPYRIGHT                                                   //
-
-//                                                                       //
-
-// ADOdb  - Database Abstraction Library for PHP                         //
-
-//          http://adodb.sourceforge.net/                                //
-
-//                                                                       //
-
-// Copyright (C) 2000-2007 John Lim (jlim\@natsoft.com.my)               //
-
-//          All rights reserved.                                         //
-
-//          Released under both BSD license and LGPL library license.    //
-
-//          Whenever there is any discrepancy between the two licenses,  //
-
-//          the BSD license will take precedence                         //
-
-//                                                                       //
-
-// Moodle - Modular Object-Oriented Dynamic Learning Environment         //
-
-//          http://moodle.com                                            //
-
-//                                                                       //
-
-// Copyright (C) 1999 onwards Martin Dougiamas        http://dougiamas.com  //
-
-//           (C) 2001-3001 Eloy Lafuente (stronk7) http://contiento.com  //
-
-//                                                                       //
-
-// This program is free software; you can redistribute it and/or modify  //
-
-// it under the terms of the GNU General Public License as published by  //
-
-// the Free Software Foundation; either version 2 of the License, or     //
-
-// (at your option) any later version.                                   //
-
-//                                                                       //
-
-// This program is distributed in the hope that it will be useful,       //
-
-// but WITHOUT ANY WARRANTY; without even the implied warranty of        //
-
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
-
-// GNU General Public License for more details:                          //
-
-//                                                                       //
-
-//          http://www.gnu.org/copyleft/gpl.html                         //
-
-//                                                                       //
-
-///////////////////////////////////////////////////////////////////////////
-
-
-
-/**
-
-*  MSSQL Driver with auto-prepended "N" for correct unicode storage
-
-*  of SQL literal strings. Intended to be used with MSSQL drivers that
-
-*  are sending UCS-2 data to MSSQL (FreeTDS and ODBTP) in order to get
-
-*  true cross-db compatibility from the application point of view.
-
-*/
-
-
-
-// security - hide paths
-
-if (!defined('ADODB_DIR')) die();
-
-
-
-// one useful constant
-
-if (!defined('SINGLEQUOTE')) define('SINGLEQUOTE', "'");
-
-
-
-include_once(ADODB_DIR.'/drivers/adodb-mssql.inc.php');
-
-
-
-class ADODB_mssql_n extends ADODB_mssql {
-
-       var $databaseType = "mssql_n";
-
-       
-
-       function ADODB_mssqlpo()
-
-       {
-
-               ADODB_mssql::ADODB_mssql();
-
-       }
-
-
-
-       function _query($sql,$inputarr)
-
-       {
-
-        $sql = $this->_appendN($sql);
-
-               return ADODB_mssql::_query($sql,$inputarr);
-
-       }
-
-
-
-    /**
-
-     * This function will intercept all the literals used in the SQL, prepending the "N" char to them
-
-     * in order to allow mssql to store properly data sent in the correct UCS-2 encoding (by freeTDS
-
-     * and ODBTP) keeping SQL compatibility at ADOdb level (instead of hacking every project to add
-
-     * the "N" notation when working against MSSQL.
-
-     *
-
-     * Note that this hack only must be used if ALL the char-based columns in your DB are of type nchar,
-
-     * nvarchar and ntext
-
-     */
-
-    function _appendN($sql) {
-
-
-
-        $result = $sql;
-
-
-
-    /// Check we have some single quote in the query. Exit ok.
-
-        if (strpos($sql, SINGLEQUOTE) === false) {
-
-            return $sql;
-
-        }
-
-
-
-    /// Check we haven't an odd number of single quotes (this can cause problems below
-
-    /// and should be considered one wrong SQL). Exit with debug info.
-
-        if ((substr_count($sql, SINGLEQUOTE) & 1)) {
-
-            if ($this->debug) {
-
-                ADOConnection::outp("{$this->databaseType} internal transformation: not converted. Wrong number of quotes (odd)");
-
-            }
-
-            return $sql;
-
-        }
-
-
-
-    /// Check we haven't any backslash + single quote combination. It should mean wrong
-
-    /// backslashes use (bad magic_quotes_sybase?). Exit with debug info.
-
-        $regexp = '/(\\\\' . SINGLEQUOTE . '[^' . SINGLEQUOTE . '])/';
-
-        if (preg_match($regexp, $sql)) {
-
-            if ($this->debug) {
-
-                ADOConnection::outp("{$this->databaseType} internal transformation: not converted. Found bad use of backslash + single quote");
-
-            }
-
-            return $sql;
-
-        }
-
-
-
-    /// Remove pairs of single-quotes
-
-        $pairs = array();
-
-        $regexp = '/(' . SINGLEQUOTE . SINGLEQUOTE . ')/';
-
-        preg_match_all($regexp, $result, $list_of_pairs);
-
-        if ($list_of_pairs) {
-
-            foreach (array_unique($list_of_pairs[0]) as $key=>$value) {
-
-                $pairs['<@#@#@PAIR-'.$key.'@#@#@>'] = $value;
-
-            }
-
-            if (!empty($pairs)) {
-
-                $result = str_replace($pairs, array_keys($pairs), $result);
-
-            }
-
-        }
-
-
-
-    /// Remove the rest of literals present in the query
-
-        $literals = array();
-
-        $regexp = '/(N?' . SINGLEQUOTE . '.*?' . SINGLEQUOTE . ')/is';
-
-        preg_match_all($regexp, $result, $list_of_literals);
-
-        if ($list_of_literals) {
-
-            foreach (array_unique($list_of_literals[0]) as $key=>$value) {
-
-                $literals['<#@#@#LITERAL-'.$key.'#@#@#>'] = $value;
-
-            }
-
-            if (!empty($literals)) {
-
-                $result = str_replace($literals, array_keys($literals), $result);
-
-            }
-
-        }
-
-
-
-
-
-    /// Analyse literals to prepend the N char to them if their contents aren't numeric
-
-        if (!empty($literals)) {
-
-            foreach ($literals as $key=>$value) {
-
-                if (!is_numeric(trim($value, SINGLEQUOTE))) {
-
-                /// Non numeric string, prepend our dear N
-
-                    $literals[$key] = 'N' . trim($value, 'N'); //Trimming potentially existing previous "N"
-
-                }
-
-            }
-
-        }
-
-
-
-    /// Re-apply literals to the text
-
-        if (!empty($literals)) {
-
-            $result = str_replace(array_keys($literals), $literals, $result);
-
-        }
-
-
-
-    /// Any pairs followed by N' must be switched to N' followed by those pairs
-
-    /// (or strings beginning with single quotes will fail)
-
-        $result = preg_replace("/((<@#@#@PAIR-(\d+)@#@#@>)+)N'/", "N'$1", $result);
-
-
-
-    /// Re-apply pairs of single-quotes to the text
-
-        if (!empty($pairs)) {
-
-            $result = str_replace(array_keys($pairs), $pairs, $result);
-
-        }
-
-
-
-    /// Print transformation if debug = on
-
-        if ($result != $sql && $this->debug) {
-
-            ADOConnection::outp("{$this->databaseType} internal transformation:<br>{$sql}<br>to<br>{$result}");
-
-        }
-
-
-
-        return $result;
-
-    }
-
-}
-
-
-
-class ADORecordset_mssql_n extends ADORecordset_mssql {
-
-       var $databaseType = "mssql_n";
-
-       function ADORecordset_mssql_n($id,$mode=false)
-
-       {
-
-               $this->ADORecordset_mssql($id,$mode);
-
-       }
-
-}
-
-?>
-
+<?php\r
+\r
+/// $Id $\r
+\r
+///////////////////////////////////////////////////////////////////////////\r
+//                                                                       //\r
+// NOTICE OF COPYRIGHT                                                   //\r
+//                                                                       //\r
+// ADOdb  - Database Abstraction Library for PHP                         //\r
+//          http://adodb.sourceforge.net/                                //\r
+//                                                                       //\r
+// Copyright (C) 2000-2007 John Lim (jlim\@natsoft.com.my)               //\r
+//          All rights reserved.                                         //\r
+//          Released under both BSD license and LGPL library license.    //\r
+//          Whenever there is any discrepancy between the two licenses,  //\r
+//          the BSD license will take precedence                         //\r
+//                                                                       //\r
+// Moodle - Modular Object-Oriented Dynamic Learning Environment         //\r
+//          http://moodle.com                                            //\r
+//                                                                       //\r
+// Copyright (C) 2001-3001 Martin Dougiamas        http://dougiamas.com  //\r
+//           (C) 2001-3001 Eloy Lafuente (stronk7) http://contiento.com  //\r
+//                                                                       //\r
+// This program is free software; you can redistribute it and/or modify  //\r
+// it under the terms of the GNU General Public License as published by  //\r
+// the Free Software Foundation; either version 2 of the License, or     //\r
+// (at your option) any later version.                                   //\r
+//                                                                       //\r
+// This program is distributed in the hope that it will be useful,       //\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of        //\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //\r
+// GNU General Public License for more details:                          //\r
+//                                                                       //\r
+//          http://www.gnu.org/copyleft/gpl.html                         //\r
+//                                                                       //\r
+///////////////////////////////////////////////////////////////////////////\r
+\r
+/**\r
+*  MSSQL Driver with auto-prepended "N" for correct unicode storage\r
+*  of SQL literal strings. Intended to be used with MSSQL drivers that\r
+*  are sending UCS-2 data to MSSQL (FreeTDS and ODBTP) in order to get\r
+*  true cross-db compatibility from the application point of view.\r
+*/\r
+\r
+// security - hide paths\r
+if (!defined('ADODB_DIR')) die();\r
+\r
+// one useful constant\r
+if (!defined('SINGLEQUOTE')) define('SINGLEQUOTE', "'");\r
+\r
+include_once(ADODB_DIR.'/drivers/adodb-mssql.inc.php');\r
+\r
+class ADODB_mssql_n extends ADODB_mssql {\r
+       var $databaseType = "mssql_n";\r
+       \r
+       function ADODB_mssqlpo()\r
+       {\r
+               ADODB_mssql::ADODB_mssql();\r
+       }\r
+\r
+       function _query($sql,$inputarr)\r
+       {\r
+        $sql = $this->_appendN($sql);\r
+               return ADODB_mssql::_query($sql,$inputarr);\r
+       }\r
+\r
+    /**\r
+     * This function will intercept all the literals used in the SQL, prepending the "N" char to them\r
+     * in order to allow mssql to store properly data sent in the correct UCS-2 encoding (by freeTDS\r
+     * and ODBTP) keeping SQL compatibility at ADOdb level (instead of hacking every project to add\r
+     * the "N" notation when working against MSSQL.\r
+     *\r
+     * Note that this hack only must be used if ALL the char-based columns in your DB are of type nchar,\r
+     * nvarchar and ntext\r
+     */\r
+    function _appendN($sql) {\r
+\r
+        $result = $sql;\r
+\r
+    /// Check we have some single quote in the query. Exit ok.\r
+        if (strpos($sql, SINGLEQUOTE) === false) {\r
+            return $sql;\r
+        }\r
+\r
+    /// Check we haven't an odd number of single quotes (this can cause problems below\r
+    /// and should be considered one wrong SQL). Exit with debug info.\r
+        if ((substr_count($sql, SINGLEQUOTE) & 1)) {\r
+            if ($this->debug) {\r
+                ADOConnection::outp("{$this->databaseType} internal transformation: not converted. Wrong number of quotes (odd)");\r
+            }\r
+            return $sql;\r
+        }\r
+\r
+    /// Check we haven't any backslash + single quote combination. It should mean wrong\r
+    /// backslashes use (bad magic_quotes_sybase?). Exit with debug info.\r
+        $regexp = '/(\\\\' . SINGLEQUOTE . '[^' . SINGLEQUOTE . '])/';\r
+        if (preg_match($regexp, $sql)) {\r
+            if ($this->debug) {\r
+                ADOConnection::outp("{$this->databaseType} internal transformation: not converted. Found bad use of backslash + single quote");\r
+            }\r
+            return $sql;\r
+        }\r
+\r
+    /// Remove pairs of single-quotes\r
+        $pairs = array();\r
+        $regexp = '/(' . SINGLEQUOTE . SINGLEQUOTE . ')/';\r
+        preg_match_all($regexp, $result, $list_of_pairs);\r
+        if ($list_of_pairs) {\r
+            foreach (array_unique($list_of_pairs[0]) as $key=>$value) {\r
+                $pairs['<@#@#@PAIR-'.$key.'@#@#@>'] = $value;\r
+            }\r
+            if (!empty($pairs)) {\r
+                $result = str_replace($pairs, array_keys($pairs), $result);\r
+            }\r
+        }\r
+\r
+    /// Remove the rest of literals present in the query\r
+        $literals = array();\r
+        $regexp = '/(N?' . SINGLEQUOTE . '.*?' . SINGLEQUOTE . ')/is';\r
+        preg_match_all($regexp, $result, $list_of_literals);\r
+        if ($list_of_literals) {\r
+            foreach (array_unique($list_of_literals[0]) as $key=>$value) {\r
+                $literals['<#@#@#LITERAL-'.$key.'#@#@#>'] = $value;\r
+            }\r
+            if (!empty($literals)) {\r
+                $result = str_replace($literals, array_keys($literals), $result);\r
+            }\r
+        }\r
+\r
+\r
+    /// Analyse literals to prepend the N char to them if their contents aren't numeric\r
+        if (!empty($literals)) {\r
+            foreach ($literals as $key=>$value) {\r
+                if (!is_numeric(trim($value, SINGLEQUOTE))) {\r
+                /// Non numeric string, prepend our dear N\r
+                    $literals[$key] = 'N' . trim($value, 'N'); //Trimming potentially existing previous "N"\r
+                }\r
+            }\r
+        }\r
+\r
+    /// Re-apply literals to the text\r
+        if (!empty($literals)) {\r
+            $result = str_replace(array_keys($literals), $literals, $result);\r
+        }\r
+\r
+    /// Any pairs followed by N' must be switched to N' followed by those pairs\r
+    /// (or strings beginning with single quotes will fail)\r
+        $result = preg_replace("/((<@#@#@PAIR-(\d+)@#@#@>)+)N'/", "N'$1", $result);\r
+\r
+    /// Re-apply pairs of single-quotes to the text\r
+        if (!empty($pairs)) {\r
+            $result = str_replace(array_keys($pairs), $pairs, $result);\r
+        }\r
+\r
+    /// Print transformation if debug = on\r
+        if ($result != $sql && $this->debug) {\r
+            ADOConnection::outp("{$this->databaseType} internal transformation:<br>{$sql}<br>to<br>{$result}");\r
+        }\r
+\r
+        return $result;\r
+    }\r
+}\r
+\r
+class ADORecordset_mssql_n extends ADORecordset_mssql {\r
+       var $databaseType = "mssql_n";\r
+       function ADORecordset_mssql_n($id,$mode=false)\r
+       {\r
+               $this->ADORecordset_mssql($id,$mode);\r
+       }\r
+}\r
+?>\r