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
a1128669
Commit
a1128669
authored
May 24, 2008
by
romanb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cleanups
parent
46161742
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
113 additions
and
246 deletions
+113
-246
ClassMetadata.php
lib/Doctrine/ClassMetadata.php
+27
-0
Connection.php
lib/Doctrine/Connection.php
+0
-4
Abstract.php
lib/Doctrine/EntityPersister/Abstract.php
+4
-227
JoinedSubclass.php
lib/Doctrine/EntityPersister/JoinedSubclass.php
+2
-2
HydratorNew.php
lib/Doctrine/HydratorNew.php
+80
-11
RangeVariableDeclaration.php
lib/Doctrine/Query/Production/RangeVariableDeclaration.php
+0
-1
VariableDeclaration.php
lib/Doctrine/Query/Production/VariableDeclaration.php
+0
-1
No files found.
lib/Doctrine/ClassMetadata.php
View file @
a1128669
...
...
@@ -556,6 +556,33 @@ class Doctrine_ClassMetadata extends Doctrine_Configurable implements Serializab
$this
->
_fieldNames
[
$columnName
]
:
$columnName
;
}
private
$_subclassFieldNames
=
array
();
/**
*
*/
public
function
lookupFieldName
(
$columnName
)
{
if
(
isset
(
$this
->
_fieldNames
[
$columnName
]))
{
return
$this
->
_fieldNames
[
$columnName
];
}
else
if
(
isset
(
$this
->
_subclassFieldNames
[
$columnName
]))
{
return
$this
->
_subclassFieldNames
[
$columnName
];
}
$classMetadata
=
$this
;
$conn
=
$this
->
_conn
;
foreach
(
$classMetadata
->
getSubclasses
()
as
$subClass
)
{
$subClassMetadata
=
$conn
->
getClassMetadata
(
$subClass
);
if
(
$subClassMetadata
->
hasColumn
(
$columnName
))
{
$this
->
_subclassFieldNames
[
$columnName
]
=
$subClassMetadata
->
getFieldName
(
$columnName
);
return
$this
->
_subclassFieldNames
[
$columnName
];
}
}
throw
new
Doctrine_ClassMetadata_Exception
(
"No field name found for column name '
$columnName
' during lookup."
);
}
/**
* @deprecated
*/
...
...
lib/Doctrine/Connection.php
View file @
a1128669
...
...
@@ -220,10 +220,6 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
}
}
/*
* ----------- Connection methods ---------------
*/
/**
* getOption
*
...
...
lib/Doctrine/EntityPersister/Abstract.php
View file @
a1128669
...
...
@@ -167,221 +167,6 @@ abstract class Doctrine_EntityPersister_Abstract
return
$this
->
_em
;
}
/**
* creates a new record
*
* @param $array an array where keys are field names and
* values representing field values
* @return Doctrine_Entity the created record object
* @todo To EntityManager.
*/
public
function
create
(
array
$array
=
array
())
{
$record
=
new
$this
->
_domainClassName
();
$record
->
fromArray
(
$array
);
return
$record
;
}
public
function
addEntityListener
(
Doctrine_Record_Listener
$listener
)
{
if
(
!
in_array
(
$listener
,
$this
->
_entityListeners
))
{
$this
->
_entityListeners
[]
=
$listener
;
return
true
;
}
return
false
;
}
public
function
removeEntityListener
(
Doctrine_Record_Listener
$listener
)
{
if
(
$key
=
array_search
(
$listener
,
$this
->
_entityListeners
,
true
))
{
unset
(
$this
->
_entityListeners
[
$key
]);
return
true
;
}
return
false
;
}
public
function
notifyEntityListeners
(
Doctrine_Entity
$entity
,
$callback
,
$eventType
)
{
if
(
$this
->
_entityListeners
)
{
$event
=
new
Doctrine_Event
(
$entity
,
$eventType
);
foreach
(
$this
->
_entityListeners
as
$listener
)
{
$listener
->
$callback
(
$event
);
}
}
}
/**
* Enter description here...
*
* @param Doctrine_Entity $entity
* @return unknown
* @todo To EntityManager
*/
public
function
detach
(
Doctrine_Entity
$entity
)
{
return
$this
->
_conn
->
getUnitOfWork
()
->
detach
(
$entity
);
}
/**
* clear
* clears the first level cache (identityMap)
*
* @return void
* @todo what about a more descriptive name? clearIdentityMap?
* @todo To EntityManager
*/
public
function
clear
()
{
$this
->
_conn
->
getUnitOfWork
()
->
clearIdentitiesForEntity
(
$this
->
_classMetadata
->
getRootClassName
());
}
/**
* addRecord
* adds a record to identity map
*
* @param Doctrine_Entity $record record to be added
* @return boolean
* @todo Better name? registerRecord? Move elsewhere to the new location of the identity maps.
* @todo Remove.
*/
public
function
addRecord
(
Doctrine_Entity
$record
)
{
if
(
$this
->
_conn
->
unitOfWork
->
contains
(
$record
))
{
return
false
;
}
$this
->
_conn
->
unitOfWork
->
registerIdentity
(
$record
);
return
true
;
}
/**
* Tells the mapper to manage the entity if it's not already managed.
*
* @return boolean TRUE if the entity was previously not managed and is now managed,
* FALSE otherwise (the entity is already managed).
* @todo Remove.
*/
public
function
manage
(
Doctrine_Entity
$record
)
{
return
$this
->
_conn
->
unitOfWork
->
manage
(
$record
);
}
/**
* removeRecord
* removes a record from the identity map, returning true if the record
* was found and removed and false if the record wasn't found.
*
* @param Doctrine_Entity $record record to be removed
* @return boolean
* @todo Move elsewhere to the new location of the identity maps.
*/
public
function
removeRecord
(
Doctrine_Entity
$record
)
{
if
(
$this
->
_conn
->
unitOfWork
->
contains
(
$record
))
{
$this
->
_conn
->
unitOfWork
->
unregisterIdentity
(
$record
);
return
true
;
}
return
false
;
}
/**
* getRecord
* First checks if record exists in identityMap, if not
* returns a new record.
*
* @return Doctrine_Entity
* @todo To EntityManager.
*/
public
function
getRecord
(
array
$data
)
{
if
(
!
empty
(
$data
))
{
$identifierFieldNames
=
$this
->
_classMetadata
->
getIdentifier
();
$found
=
false
;
foreach
(
$identifierFieldNames
as
$fieldName
)
{
if
(
!
isset
(
$data
[
$fieldName
]))
{
// primary key column not found return new record
$found
=
true
;
break
;
}
$id
[]
=
$data
[
$fieldName
];
}
if
(
$found
)
{
return
new
$this
->
_domainClassName
(
true
,
$data
);
}
$idHash
=
$this
->
_conn
->
unitOfWork
->
getIdentifierHash
(
$id
);
if
(
$record
=
$this
->
_conn
->
unitOfWork
->
tryGetByIdHash
(
$idHash
,
$this
->
_classMetadata
->
getRootClassName
()))
{
$record
->
hydrate
(
$data
);
}
else
{
$record
=
new
$this
->
_domainClassName
(
false
,
$data
);
$this
->
_conn
->
unitOfWork
->
registerIdentity
(
$record
);
}
$data
=
array
();
}
else
{
$record
=
new
$this
->
_domainClassName
(
true
,
$data
);
}
return
$record
;
}
/**
* @param $id database row id
* @todo Looks broken. Figure out an implementation and decide whether its needed.
*/
final
public
function
getProxy
(
$id
=
null
)
{
if
(
$id
!==
null
)
{
$identifierColumnNames
=
$this
->
_classMetadata
->
getIdentifierColumnNames
();
$query
=
'SELECT '
.
implode
(
', '
,
$identifierColumnNames
)
.
' FROM '
.
$this
->
_classMetadata
->
getTableName
()
.
' WHERE '
.
implode
(
' = ? && '
,
$identifierColumnNames
)
.
' = ?'
;
$query
=
$this
->
applyInheritance
(
$query
);
$params
=
array_merge
(
array
(
$id
),
array
());
$data
=
$this
->
_conn
->
execute
(
$query
,
$params
)
->
fetch
(
PDO
::
FETCH_ASSOC
);
if
(
$data
===
false
)
{
return
false
;
}
}
return
$this
->
getRecord
(
$data
);
}
/**
* applyInheritance
* @param $where query where part to be modified
* @return string query where part with column aggregation inheritance added
* @todo What to do with this? Remove if possible.
*/
final
public
function
applyInheritance
(
$where
)
{
$discCol
=
$this
->
_classMetadata
->
getInheritanceOption
(
'discriminatorColumn'
);
if
(
!
$discCol
)
{
return
$where
;
}
$discMap
=
$this
->
_classMetadata
->
getInheritanceOption
(
'discriminatorMap'
);
$inheritanceMap
=
array
(
$discCol
=>
array_search
(
$this
->
_domainClassName
,
$discMap
));
if
(
!
empty
(
$inheritanceMap
))
{
$a
=
array
();
foreach
(
$inheritanceMap
as
$column
=>
$value
)
{
$a
[]
=
$column
.
' = ?'
;
}
$i
=
implode
(
' AND '
,
$a
);
$where
.=
' AND '
.
$i
;
}
return
$where
;
}
/**
* prepareValue
* this method performs special data preparation depending on
...
...
@@ -410,7 +195,7 @@ abstract class Doctrine_EntityPersister_Abstract
* @todo To EntityManager. Make private and use in createEntity().
* .. Or, maybe better: Move to hydrator for performance reasons.
*/
public
function
prepareValue
(
$fieldName
,
$value
,
$typeHint
=
null
)
/*
public function prepareValue($fieldName, $value, $typeHint = null)
{
if ($value === $this->_nullObject) {
return $this->_nullObject;
...
...
@@ -449,7 +234,7 @@ abstract class Doctrine_EntityPersister_Abstract
}
}
return $value;
}
}
*/
/**
* getComponentName
...
...
@@ -462,14 +247,6 @@ abstract class Doctrine_EntityPersister_Abstract
return
$this
->
_domainClassName
;
}
/**
* Gets the name of the class the mapper is used for.
*/
public
function
getMappedClassName
()
{
return
$this
->
_domainClassName
;
}
/**
* Saves an entity and all it's related entities.
*
...
...
@@ -788,10 +565,10 @@ abstract class Doctrine_EntityPersister_Abstract
return
$this
->
_classMetadata
;
}
public
function
getFieldName
(
$columnName
)
/*
public function getFieldName($columnName)
{
return $this->_classMetadata->getFieldName($columnName);
}
}
*/
public
function
getFieldNames
()
{
...
...
lib/Doctrine/EntityPersister/JoinedSubclass.php
View file @
a1128669
...
...
@@ -226,7 +226,7 @@ class Doctrine_EntityPersister_JoinedSubclass extends Doctrine_EntityPersister_A
/**
*
*/
public
function
getFieldName
(
$columnName
)
/*
public function getFieldName($columnName)
{
if (isset($this->_columnNameFieldNameMap[$columnName])) {
return $this->_columnNameFieldNameMap[$columnName];
...
...
@@ -249,7 +249,7 @@ class Doctrine_EntityPersister_JoinedSubclass extends Doctrine_EntityPersister_A
}
throw new Doctrine_Mapper_Exception("No field name found for column name '$columnName'.");
}
}
*/
/**
*
...
...
lib/Doctrine/HydratorNew.php
View file @
a1128669
...
...
@@ -368,14 +368,13 @@ class Doctrine_HydratorNew extends Doctrine_Hydrator_Abstract
$e
=
explode
(
'__'
,
$key
);
$columnName
=
strtolower
(
array_pop
(
$e
));
$cache
[
$key
][
'dqlAlias'
]
=
$this
->
_tableAliases
[
strtolower
(
implode
(
'__'
,
$e
))];
$mapper
=
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'mapper'
];
$classMetadata
=
$mapper
->
getClassMetadata
();
$classMetadata
=
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'table'
];
// check whether it's an aggregate value or a regular field
if
(
isset
(
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'agg'
][
$columnName
]))
{
$fieldName
=
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'agg'
][
$columnName
];
$cache
[
$key
][
'isScalar'
]
=
true
;
}
else
{
$fieldName
=
$
mapper
->
get
FieldName
(
$columnName
);
$fieldName
=
$
classMetadata
->
lookup
FieldName
(
$columnName
);
$cache
[
$key
][
'isScalar'
]
=
false
;
}
...
...
@@ -398,7 +397,7 @@ class Doctrine_HydratorNew extends Doctrine_Hydrator_Abstract
}
}
$
mapper
=
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'mapper
'
];
$
class
=
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'table
'
];
$dqlAlias
=
$cache
[
$key
][
'dqlAlias'
];
$fieldName
=
$cache
[
$key
][
'fieldName'
];
...
...
@@ -414,7 +413,7 @@ class Doctrine_HydratorNew extends Doctrine_Hydrator_Abstract
if
(
$cache
[
$key
][
'isSimpleType'
])
{
$rowData
[
$dqlAlias
][
$fieldName
]
=
$value
;
}
else
{
$rowData
[
$dqlAlias
][
$fieldName
]
=
$
mapper
->
prepareValue
(
$rowData
[
$dqlAlias
][
$fieldName
]
=
$
class
->
prepareValue
(
$fieldName
,
$value
,
$cache
[
$key
][
'type'
]);
}
...
...
@@ -453,14 +452,13 @@ class Doctrine_HydratorNew extends Doctrine_Hydrator_Abstract
$e
=
explode
(
'__'
,
$key
);
$columnName
=
strtolower
(
array_pop
(
$e
));
$cache
[
$key
][
'dqlAlias'
]
=
$this
->
_tableAliases
[
strtolower
(
implode
(
'__'
,
$e
))];
$mapper
=
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'mapper'
];
$classMetadata
=
$mapper
->
getClassMetadata
();
$classMetadata
=
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'table'
];
// check whether it's an aggregate value or a regular field
if
(
isset
(
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'agg'
][
$columnName
]))
{
$fieldName
=
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'agg'
][
$columnName
];
$cache
[
$key
][
'isScalar'
]
=
true
;
}
else
{
$fieldName
=
$
mapper
->
get
FieldName
(
$columnName
);
$fieldName
=
$
classMetadata
->
lookup
FieldName
(
$columnName
);
$cache
[
$key
][
'isScalar'
]
=
false
;
}
...
...
@@ -476,15 +474,15 @@ class Doctrine_HydratorNew extends Doctrine_Hydrator_Abstract
}
}
$
mapper
=
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'mapper
'
];
$
class
=
$this
->
_queryComponents
[
$cache
[
$key
][
'dqlAlias'
]][
'table
'
];
$dqlAlias
=
$cache
[
$key
][
'dqlAlias'
];
$fieldName
=
$cache
[
$key
][
'fieldName'
];
if
(
$cache
[
$key
][
'isSimpleType'
]
||
$cache
[
$key
][
'isScalar'
])
{
$rowData
[
$dqlAlias
.
'_'
.
$fieldName
]
=
$value
;
}
else
{
$rowData
[
$dqlAlias
.
'_'
.
$fieldName
]
=
$
mapper
->
prepareValue
(
$fieldName
,
$value
,
$cache
[
$key
][
'type'
]);
$rowData
[
$dqlAlias
.
'_'
.
$fieldName
]
=
$
this
->
prepareValue
(
$
class
,
$
fieldName
,
$value
,
$cache
[
$key
][
'type'
]);
}
}
...
...
@@ -515,6 +513,77 @@ class Doctrine_HydratorNew extends Doctrine_Hydrator_Abstract
return
$name
==
'doctrine_rownum'
;
}
/**
* prepareValue
* this method performs special data preparation depending on
* the type of the given column
*
* 1. It unserializes array and object typed columns
* 2. Uncompresses gzip typed columns
* 3. Gets the appropriate enum values for enum typed columns
* 4. Initializes special null object pointer for null values (for fast column existence checking purposes)
*
* example:
* <code type='php'>
* $field = 'name';
* $value = null;
* $table->prepareValue($field, $value); // Doctrine_Null
* </code>
*
* @throws Doctrine_Table_Exception if unserialization of array/object typed column fails or
* @throws Doctrine_Table_Exception if uncompression of gzip typed column fails *
* @param string $field the name of the field
* @param string $value field value
* @param string $typeHint A hint on the type of the value. If provided, the type lookup
* for the field can be skipped. Used i.e. during hydration to
* improve performance on large and/or complex results.
* @return mixed prepared value
* @todo To EntityManager. Make private and use in createEntity().
* .. Or, maybe better: Move to hydrator for performance reasons.
*/
public
function
prepareValue
(
Doctrine_ClassMetadata
$class
,
$fieldName
,
$value
,
$typeHint
=
null
)
{
if
(
$value
===
$this
->
_nullObject
)
{
return
$this
->
_nullObject
;
}
else
if
(
$value
===
null
)
{
return
null
;
}
else
{
$type
=
is_null
(
$typeHint
)
?
$class
->
getTypeOf
(
$fieldName
)
:
$typeHint
;
switch
(
$type
)
{
case
'integer'
:
case
'string'
;
// don't do any casting here PHP INT_MAX is smaller than what the databases support
break
;
case
'enum'
:
return
$class
->
enumValue
(
$fieldName
,
$value
);
break
;
case
'boolean'
:
return
(
boolean
)
$value
;
break
;
case
'array'
:
case
'object'
:
if
(
is_string
(
$value
))
{
$value
=
unserialize
(
$value
);
if
(
$value
===
false
)
{
throw
new
Doctrine_Hydrator_Exception
(
'Unserialization of '
.
$fieldName
.
' failed.'
);
}
return
$value
;
}
break
;
case
'gzip'
:
$value
=
gzuncompress
(
$value
);
if
(
$value
===
false
)
{
throw
new
Doctrine_Hydrator_Exception
(
'Uncompressing of '
.
$fieldName
.
' failed.'
);
}
return
$value
;
break
;
}
}
return
$value
;
}
/** Needed only temporarily until the new parser is ready */
private
$_isResultMixed
=
false
;
public
function
setResultMixed
(
$bool
)
...
...
lib/Doctrine/Query/Production/RangeVariableDeclaration.php
View file @
a1128669
...
...
@@ -126,7 +126,6 @@ class Doctrine_Query_Production_RangeVariableDeclaration extends Doctrine_Query_
// Building queryComponent
$queryComponent
=
array
(
'metadata'
=>
$classMetadata
,
'mapper'
=>
$manager
->
getEntityPersister
(
$componentName
),
'parent'
=>
null
,
'relation'
=>
null
,
'map'
=>
null
,
...
...
lib/Doctrine/Query/Production/VariableDeclaration.php
View file @
a1128669
...
...
@@ -93,7 +93,6 @@ class Doctrine_Query_Production_VariableDeclaration extends Doctrine_Query_Produ
// Building queryComponent
$queryComponent
=
array
(
'metadata'
=>
$classMetadata
,
'mapper'
=>
$manager
->
getEntityPersister
(
$this
->
_componentName
),
'parent'
=>
null
,
'relation'
=>
null
,
'map'
=>
null
,
...
...
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