@@ -53,15 +53,17 @@ class Complex extends Resultset implements ResultsetInterface
5353 public function __construct(
5454 var columnTypes,
5555 <ResultInterface> result = null ,
56- var cache = null
56+ var cache = null ,
57+ manager = null ,
58+ metaData = null
5759 )
5860 {
5961 /**
6062 * Column types, tell the resultset how to build the result
6163 */
6264 let this -> columnTypes = columnTypes;
6365
64- parent :: __construct(result, cache);
66+ parent :: __construct(result, cache, manager, metaData );
6567 }
6668
6769 /**
@@ -71,7 +73,7 @@ class Complex extends Resultset implements ResultsetInterface
7173 {
7274 var row, hydrateMode, eager, dirtyState, alias, activeRow, type, column,
7375 columnValue, value, attribute, source, attributes, columnMap,
74- rowModel, keepSnapshots, sqlAlias, modelName;
76+ rowModel, keepSnapshots, sqlAlias, modelName, uuid, model ;
7577
7678 let activeRow = this -> activeRow;
7779
@@ -170,35 +172,50 @@ class Complex extends Resultset implements ResultsetInterface
170172 if ! fetch keepSnapshots, column[" keepSnapshots" ] {
171173 let keepSnapshots = false ;
172174 }
175+ /**
176+ * checks for session cache and returns already in memory models
177+ */
178+ let value = null ;
179+ if true === globals_get(" orm.session_cache" ) {
180+ let modelName = get_class(column[" instance" ]);
181+ let model = new {modelName}();
182+ let uuid = this -> metaData-> getModelUUID(model, row);
183+ let value = this -> sessionCache-> get (uuid);
184+ }
173185
174- if globals_get(" orm.late_state_binding" ) {
175- if column[" instance" ] instanceof Model {
176- let modelName = get_class(column[" instance" ]);
186+ if null === value {
187+ if globals_get(" orm.late_state_binding" ) {
188+ if column[" instance" ] instanceof Model {
189+ let modelName = get_class(column[" instance" ]);
190+ } else {
191+ let modelName = " Phalcon\\ Mvc\\ Model" ;
192+ }
193+
194+ let value = {modelName}:: cloneResultMap(
195+ column[" instance" ],
196+ rowModel,
197+ columnMap,
198+ dirtyState,
199+ keepSnapshots
200+ );
177201 } else {
178- let modelName = " Phalcon\\ Mvc\\ Model" ;
202+ /**
203+ * Get the base instance. Assign the values to the
204+ * attributes using a column map
205+ */
206+ let value = Model:: cloneResultMap(
207+ column[" instance" ],
208+ rowModel,
209+ columnMap,
210+ dirtyState,
211+ keepSnapshots
212+ );
213+ }
214+ if true === globals_get(" orm.session_cache" ) {
215+ this -> sessionCache-> set (uuid, value);
216+ value-> setModelUUID(uuid);
179217 }
180-
181- let value = {modelName}:: cloneResultMap(
182- column[" instance" ],
183- rowModel,
184- columnMap,
185- dirtyState,
186- keepSnapshots
187- );
188- } else {
189- /**
190- * Get the base instance. Assign the values to the
191- * attributes using a column map
192- */
193- let value = Model:: cloneResultMap(
194- column[" instance" ],
195- rowModel,
196- columnMap,
197- dirtyState,
198- keepSnapshots
199- );
200218 }
201-
202219 break ;
203220
204221 default :
0 commit comments