Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
doctrine-dbal
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tomáš Trávníček
doctrine-dbal
Commits
0040261f
Commit
0040261f
authored
Mar 18, 2007
by
zYne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixes #290
parent
24abb16c
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
35 deletions
+26
-35
Mssql.php
lib/Doctrine/Connection/Mssql.php
+26
-35
No files found.
lib/Doctrine/Connection/Mssql.php
View file @
0040261f
...
...
@@ -97,42 +97,33 @@ class Doctrine_Connection_Mssql extends Doctrine_Connection
public
function
modifyLimitQuery
(
$query
,
$limit
,
$offset
,
$isManip
=
false
)
{
if
(
$limit
>
0
)
{
// we need the starting SELECT clause for later
$select
=
'SELECT '
;
if
(
preg_match
(
'/^[[:space:]*SELECT[[:space:]]*DISTINCT/i'
,
$query
,
$matches
)
==
1
)
{
$select
.=
'DISTINCT '
;
}
$length
=
strlen
(
$select
);
$count
=
intval
(
$limit
);
// is there an offset?
if
(
!
$offset
)
{
// no offset, it's a simple TOP count
return
$select
.
' TOP '
.
$limit
.
substr
(
$query
,
$length
);
$offset
=
intval
(
$offset
);
if
(
$offset
<
0
)
{
throw
new
Zend_Db_Adapter_Exception
(
"LIMIT argument offset=
$offset
is not valid"
);
}
// the total of the count **and** the offset, combined.
// this will be used in the "internal" portion of the
// hacked-up statement.
$total
=
$limit
+
$offset
;
// build the "real" order for the external portion.
$order
=
implode
(
','
,
$parts
[
'order'
]);
// build a "reverse" order for the internal portion.
$reverse
=
$order
;
$reverse
=
str_ireplace
(
" ASC"
,
"
\xFF
"
,
$reverse
);
$reverse
=
str_ireplace
(
" DESC"
,
" ASC"
,
$reverse
);
$reverse
=
str_ireplace
(
"
\xFF
"
,
" DESC"
,
$reverse
);
// create a main statement that replaces the SELECT
// with a SELECT TOP
$main
=
$select
.
' TOP '
.
$total
.
substr
(
$query
,
$length
);
// build the hacked-up statement.
// do we really need the "as" aliases here?
$query
=
'SELECT * FROM ('
.
'SELECT TOP '
.
$count
.
' * FROM ('
.
$main
.
') AS select_limit_rev ORDER BY '
.
$reverse
.
') AS select_limit ORDER BY '
.
$order
;
$orderby
=
stristr
(
$sql
,
'ORDER BY'
);
if
(
$orderby
!==
false
)
{
$sort
=
(
stripos
(
$orderby
,
'desc'
)
!==
false
)
?
'desc'
:
'asc'
;
$order
=
str_ireplace
(
'ORDER BY'
,
''
,
$orderby
);
$order
=
trim
(
preg_replace
(
'/ASC|DESC/i'
,
''
,
$order
));
}
$sql
=
preg_replace
(
'/^SELECT\s/i'
,
'SELECT TOP '
.
(
$count
+
$offset
)
.
' '
,
$sql
);
$sql
=
'SELECT * FROM (SELECT TOP '
.
$count
.
' * FROM ('
.
$sql
.
') AS inner_tbl'
;
if
(
$orderby
!==
false
)
{
$sql
.=
' ORDER BY '
.
$order
.
' '
;
$sql
.=
(
stripos
(
$sort
,
'asc'
)
!==
false
)
?
'DESC'
:
'ASC'
;
}
$sql
.=
') AS outer_tbl'
;
if
(
$orderby
!==
false
)
{
$sql
.=
' ORDER BY '
.
$order
.
' '
.
$sort
;
}
return
$sql
;
}
...
...
@@ -145,7 +136,7 @@ class Doctrine_Connection_Mssql extends Doctrine_Connection
* @return mixed array/string with version information or MDB2 error object
*/
public
function
getServerVersion
(
$native
=
false
)
{
{
if
(
$this
->
serverInfo
)
{
$serverInfo
=
$this
->
serverInfo
;
}
else
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment