Skip to content

Commit 34b1c74

Browse files
estahnjwage
authored andcommitted
#DC-840 fix and Test Case
1 parent dab01cc commit 34b1c74

File tree

2 files changed

+85
-1
lines changed

2 files changed

+85
-1
lines changed

lib/Doctrine/Connection/Mssql.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ protected function replaceBoundParamsWithInlineValuesInQuery($query, array $para
354354
$value = $this->quote($value);
355355
}
356356

357-
$re = '/([=,\(][^\\\']*)(\?)/iU';
357+
$re = '/([=><,\(][^\\\']*)(\?)/iU';
358358

359359
$query = preg_replace($re, "\\1 {$value}", $query, 1);
360360

tests/Ticket/DC840TestCase.php

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<?php
2+
/*
3+
* $Id$
4+
*
5+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16+
*
17+
* This software consists of voluntary contributions made by many individuals
18+
* and is licensed under the LGPL. For more information, see
19+
* <http://www.doctrine-project.org>.
20+
*/
21+
22+
/**
23+
* Doctrine_Ticket_DC840_TestCase
24+
*
25+
* @package Doctrine
26+
* @author Enrico Stahn <[email protected]>
27+
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
28+
* @category Object Relational Mapping
29+
* @link www.doctrine-project.org
30+
* @since 1.0
31+
* @version $Revision$
32+
*/
33+
class Doctrine_Ticket_DC840_TestCase extends Doctrine_UnitTestCase
34+
{
35+
private $sqlStackCounter = 0;
36+
37+
public function prepareTables()
38+
{
39+
$this->tables[] = 'Ticket_DC840_Model';
40+
parent::prepareTables();
41+
}
42+
43+
public function testInit()
44+
{
45+
$this->dbh = new Doctrine_Adapter_Mock('mssql');
46+
$this->conn = Doctrine_Manager::getInstance()->openConnection($this->dbh, 'DC840');
47+
}
48+
49+
public function testTest()
50+
{
51+
$q = Doctrine_Query::create()
52+
->select('id')
53+
->from('Ticket_DC840_Model')
54+
->andWhere('password = ?', 'abc')
55+
->andWhere('modified_at > ?', '2010-01-01')
56+
->andWhere('modified_at < ?', '2010-01-01')
57+
->andWhere('modified_at <> ?', '2010-01-01')
58+
->andWhere('modified_at <= ?', '2010-01-01')
59+
->andWhere('modified_at >= ?', '2010-01-01')
60+
;
61+
$q->execute();
62+
63+
$expected = "SELECT [t].[id] AS [t__id] FROM [ticket__d_c840__model] [t] WHERE ([t].[password] = 'abc' AND [t].[modified_at] > '2010-01-01' AND [t].[modified_at] < '2010-01-01' AND [t].[modified_at] <> '2010-01-01' AND [t].[modified_at] <= '2010-01-01' AND [t].[modified_at] >= '2010-01-01')";
64+
$sql = current(array_slice($this->dbh->getAll(), $this->sqlStackCounter++, 1));
65+
66+
$this->assertEqual($expected, $sql);
67+
}
68+
}
69+
70+
class Ticket_DC840_Model extends Doctrine_Record
71+
{
72+
public function setTableDefinition()
73+
{
74+
$this->hasColumn('id', 'integer', null, array(
75+
'type' => 'integer',
76+
'unsigned' => false,
77+
'primary' => true,
78+
'autoincrement' => true,
79+
));
80+
$this->hasColumn('modified_at', 'timestamp');
81+
$this->hasColumn('username', 'string', 255);
82+
$this->hasColumn('password', 'string', 255);
83+
}
84+
}

0 commit comments

Comments
 (0)