source: subversion/trunk/roundcubemail/program/lib/MDB2/Driver/Function/sqlsrv.php @ 3227

Last change on this file since 3227 was 3227, checked in by alec, 3 years ago
  • Add support for MDB2's 'sqlsrv' driver (#1486395)
File size: 6.9 KB
Line 
1<?php
2// +----------------------------------------------------------------------+
3// | PHP versions 4 and 5                                                 |
4// +----------------------------------------------------------------------+
5// | Copyright (c) 1998-2008 Manuel Lemos, Tomas V.V.Cox,                 |
6// | Stig. S. Bakken, Lukas Smith                                         |
7// | All rights reserved.                                                 |
8// +----------------------------------------------------------------------+
9// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB  |
10// | API as well as database abstraction for PHP applications.            |
11// | This LICENSE is in the BSD license style.                            |
12// |                                                                      |
13// | Redistribution and use in source and binary forms, with or without   |
14// | modification, are permitted provided that the following conditions   |
15// | are met:                                                             |
16// |                                                                      |
17// | Redistributions of source code must retain the above copyright       |
18// | notice, this list of conditions and the following disclaimer.        |
19// |                                                                      |
20// | Redistributions in binary form must reproduce the above copyright    |
21// | notice, this list of conditions and the following disclaimer in the  |
22// | documentation and/or other materials provided with the distribution. |
23// |                                                                      |
24// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken,    |
25// | Lukas Smith nor the names of his contributors may be used to endorse |
26// | or promote products derived from this software without specific prior|
27// | written permission.                                                  |
28// |                                                                      |
29// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  |
30// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT    |
31// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS    |
32// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE      |
33// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,          |
34// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
35// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
36// |  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  |
37// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT          |
38// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
39// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE          |
40// | POSSIBILITY OF SUCH DAMAGE.                                          |
41// +----------------------------------------------------------------------+
42// | Author: Frank M. Kromann <frank@kromann.info>                        |
43// +----------------------------------------------------------------------+
44
45require_once 'MDB2/Driver/Function/Common.php';
46
47// {{{ class MDB2_Driver_Function_sqlsrv
48/**
49 * MDB2 MSSQL driver for the function modules
50 *
51 * @package MDB2
52 * @category Database
53 */
54class MDB2_Driver_Function_sqlsrv extends MDB2_Driver_Function_Common
55{
56    // {{{ executeStoredProc()
57
58    /**
59     * Execute a stored procedure and return any results
60     *
61     * @param string $name string that identifies the function to execute
62     * @param mixed  $params  array that contains the paramaters to pass the stored proc
63     * @param mixed   $types  array that contains the types of the columns in
64     *                        the result set
65     * @param mixed $result_class string which specifies which result class to use
66     * @param mixed $result_wrap_class string which specifies which class to wrap results in
67     * @return mixed a result handle or MDB2_OK on success, a MDB2 error on failure
68     * @access public
69     */
70    function &executeStoredProc($name, $params = null, $types = null, $result_class = true, $result_wrap_class = false)
71    {
72        $db =& $this->getDBInstance();
73        if (PEAR::isError($db)) {
74            return $db;
75        }
76
77        $query = 'EXECUTE '.$name;
78        $query .= $params ? ' '.implode(', ', $params) : '';
79        return $db->query($query, $types, $result_class, $result_wrap_class);
80    }
81
82    // }}}
83    // {{{ now()
84
85    /**
86     * Return string to call a variable with the current timestamp inside an SQL statement
87     * There are three special variables for current date and time:
88     * - CURRENT_TIMESTAMP (date and time, TIMESTAMP type)
89     * - CURRENT_DATE (date, DATE type)
90     * - CURRENT_TIME (time, TIME type)
91     *
92     * @return string to call a variable with the current timestamp
93     * @access public
94     */
95    function now($type = 'timestamp')
96    {
97        switch ($type) {
98        case 'time':
99        case 'date':
100        case 'timestamp':
101        default:
102            return 'GETDATE()';
103        }
104    }
105
106    // }}}
107    // {{{ unixtimestamp()
108
109    /**
110     * return string to call a function to get the unix timestamp from a iso timestamp
111     *
112     * @param string $expression
113     *
114     * @return string to call a variable with the timestamp
115     * @access public
116     */
117    function unixtimestamp($expression)
118    {
119        return 'DATEDIFF(second, \'19700101\', '. $expression.') + DATEDIFF(second, GETDATE(), GETUTCDATE())';
120    }
121
122    // }}}
123    // {{{ substring()
124
125    /**
126     * return string to call a function to get a substring inside an SQL statement
127     *
128     * @return string to call a function to get a substring
129     * @access public
130     */
131    function substring($value, $position = 1, $length = null)
132    {
133        if (null !== $length) {
134            return "SUBSTRING($value, $position, $length)";
135        }
136        return "SUBSTRING($value, $position, LEN($value) - $position + 1)";
137    }
138
139    // }}}
140    // {{{ concat()
141
142    /**
143     * Returns string to concatenate two or more string parameters
144     *
145     * @param string $value1
146     * @param string $value2
147     * @param string $values...
148     * @return string to concatenate two strings
149     * @access public
150     **/
151    function concat($value1, $value2)
152    {
153        $args = func_get_args();
154        return "(".implode(' + ', $args).")";
155    }
156
157    // }}}
158    // {{{ length()
159
160    /**
161     * return string to call a function to get the length of a string expression
162     *
163     * @param string $expression
164     * @return return string to get the string expression length
165     * @access public
166     */
167    function length($expression)
168    {
169        return "LEN($expression)";
170    }
171
172    // }}}
173    // {{{ guid()
174
175    /**
176     * Returns global unique identifier
177     *
178     * @return string to get global unique identifier
179     * @access public
180     */
181    function guid()
182    {
183        return 'NEWID()';
184    }
185
186    // }}}
187}
188// }}}
189?>
Note: See TracBrowser for help on using the repository browser.