Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
die_coolen_jungs
our_own_cloud_project
Commits
1de6fa19
Commit
1de6fa19
authored
Mar 20, 2015
by
Morris Jobke
Browse files
Merge pull request #15035 from owncloud/assocmapper
If the execute method on the mapper receives an assoc array, it binds by...
parents
e8680e66
df24a014
Changes
3
Hide whitespace changes
Inline
Side-by-side
lib/public/appframework/db/mapper.php
View file @
1de6fa19
...
...
@@ -184,6 +184,31 @@ abstract class Mapper {
return
$entity
;
}
/**
* Checks if an array is associative
* @param array $array
* @return bool true if associative
*/
private
function
isAssocArray
(
array
$array
)
{
return
array_values
(
$array
)
!==
$array
;
}
/**
* Returns the correct PDO constant based on the value type
* @param $value
* @return PDO constant
*/
private
function
getPDOType
(
$value
)
{
switch
(
gettype
(
$value
))
{
case
'integer'
:
return
\
PDO
::
PARAM_INT
;
case
'boolean'
:
return
\
PDO
::
PARAM_BOOL
;
default
:
return
\
PDO
::
PARAM_STR
;
}
}
/**
* Runs an sql query
...
...
@@ -200,26 +225,18 @@ abstract class Mapper {
$query
=
$this
->
db
->
prepare
(
$sql
,
$limit
,
$offset
);
}
$index
=
1
;
// bindParam is 1 indexed
foreach
(
$params
as
$param
)
{
switch
(
gettype
(
$param
))
{
case
'integer'
:
$pdoConstant
=
\
PDO
::
PARAM_INT
;
break
;
case
'boolean'
:
$pdoConstant
=
\
PDO
::
PARAM_BOOL
;
break
;
default
:
$pdoConstant
=
\
PDO
::
PARAM_STR
;
break
;
if
(
$this
->
isAssocArray
(
$params
))
{
foreach
(
$params
as
$key
=>
$param
)
{
$pdoConstant
=
$this
->
getPDOType
(
$param
);
$query
->
bindValue
(
$key
,
$param
,
$pdoConstant
);
}
}
else
{
$index
=
1
;
// bindParam is 1 indexed
foreach
(
$params
as
$param
)
{
$pdoConstant
=
$this
->
getPDOType
(
$param
);
$query
->
bindValue
(
$index
,
$param
,
$pdoConstant
);
$index
++
;
}
$query
->
bindValue
(
$index
,
$param
,
$pdoConstant
);
$index
++
;
}
$result
=
$query
->
execute
();
...
...
tests/lib/appframework/db/mappertest.php
View file @
1de6fa19
...
...
@@ -47,6 +47,7 @@ class ExampleMapper extends Mapper {
public
function
findOneEntity
(
$table
,
$id
){
return
$this
->
findEntity
(
$table
,
$id
);
}
public
function
findAllEntities
(
$table
){
return
$this
->
findEntities
(
$table
);
}
public
function
mapRow
(
$row
){
return
$this
->
mapRowToEntity
(
$row
);
}
public
function
execSql
(
$sql
,
$params
){
return
$this
->
execute
(
$sql
,
$params
);
}
}
...
...
@@ -187,6 +188,15 @@ class MapperTest extends MapperTestUtility {
}
public
function
testAssocParameters
()
{
$sql
=
'test'
;
$params
=
[
':test'
=>
1
,
':a'
=>
2
];
$this
->
setMapperResult
(
$sql
,
$params
);
$this
->
mapper
->
execSql
(
$sql
,
$params
);
}
public
function
testUpdate
(){
$sql
=
'UPDATE `*PREFIX*table` '
.
'SET '
.
...
...
tests/lib/appframework/db/mappertestutility.php
View file @
1de6fa19
...
...
@@ -56,7 +56,30 @@ abstract class MapperTestUtility extends \Test\TestCase {
$this
->
fetchAt
=
0
;
}
/**
* Checks if an array is associative
* @param array $array
* @return bool true if associative
*/
private
function
isAssocArray
(
array
$array
)
{
return
array_values
(
$array
)
!==
$array
;
}
/**
* Returns the correct PDO constant based on the value type
* @param $value
* @return PDO constant
*/
private
function
getPDOType
(
$value
)
{
switch
(
gettype
(
$value
))
{
case
'integer'
:
return
\
PDO
::
PARAM_INT
;
case
'boolean'
:
return
\
PDO
::
PARAM_BOOL
;
default
:
return
\
PDO
::
PARAM_STR
;
}
}
/**
* Create mocks and set expected results for database queries
...
...
@@ -117,32 +140,28 @@ abstract class MapperTestUtility extends \Test\TestCase {
}
));
$index
=
1
;
foreach
(
$arguments
as
$argument
)
{
switch
(
gettype
(
$argument
))
{
case
'integer'
:
$pdoConstant
=
\
PDO
::
PARAM_INT
;
break
;
case
'NULL'
:
$pdoConstant
=
\
PDO
::
PARAM_NULL
;
break
;
case
'boolean'
:
$pdoConstant
=
\
PDO
::
PARAM_BOOL
;
break
;
default
:
$pdoConstant
=
\
PDO
::
PARAM_STR
;
break
;
if
(
$this
->
isAssocArray
(
$arguments
))
{
foreach
(
$arguments
as
$key
=>
$argument
)
{
$pdoConstant
=
$this
->
getPDOType
(
$argument
);
$this
->
query
->
expects
(
$this
->
at
(
$this
->
queryAt
))
->
method
(
'bindValue'
)
->
with
(
$this
->
equalTo
(
$key
),
$this
->
equalTo
(
$argument
),
$this
->
equalTo
(
$pdoConstant
));
$this
->
queryAt
++
;
}
}
else
{
$index
=
1
;
foreach
(
$arguments
as
$argument
)
{
$pdoConstant
=
$this
->
getPDOType
(
$argument
);
$this
->
query
->
expects
(
$this
->
at
(
$this
->
queryAt
))
->
method
(
'bindValue'
)
->
with
(
$this
->
equalTo
(
$index
),
$this
->
equalTo
(
$argument
),
$this
->
equalTo
(
$pdoConstant
));
$index
++
;
$this
->
queryAt
++
;
}
$this
->
query
->
expects
(
$this
->
at
(
$this
->
queryAt
))
->
method
(
'bindValue'
)
->
with
(
$this
->
equalTo
(
$index
),
$this
->
equalTo
(
$argument
),
$this
->
equalTo
(
$pdoConstant
));
$index
++
;
$this
->
queryAt
++
;
}
$this
->
query
->
expects
(
$this
->
at
(
$this
->
queryAt
))
...
...
Write
Preview
Supports
Markdown
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