(name 'Voyage-Mongo-Core-HenrikSperreJohansen.56' message 'Actually use the fast materialization.
Make sure cache is updated with our pseudo-forwardBecome''d object.' id '238a1ab1-ea9b-48ff-947e-649f9990d4b1' date '8 May 2015' time '2:53:49.189068 pm' author 'HenrikSperreJohansen' ancestors ((name 'Voyage-Mongo-Core-HenrikSperreJohansen.55' message 'Make VOLazyProxys resolve without become: (ie, thousands of times faster) when the target object is of an appropriate shape.

Uses AnonymousClassInstaller, so it requires Pharo4.0, though the equivalent could be written for older versions

To see the difference, try this in a workspace:
proxyClass := VOLazyProxy.
"Some random class that can now be fast swapped in for a proxy"
destClass := AthensTreeView.

defProxyClass := VOLazyProxy classFor: destClass.

proxies := (1 to: 5) collect: [ :i | proxyClass objectClass: destClass id: nil].
definedProxies := (1 to: 1000000) collect: [ :i | defProxyClass objectClass: destClass id: nil].
"Tenure objects for realistic become: performance"
Smalltalk garbageCollect.

{
"Old way"
[proxies do:[:each | each becomeForward: destClass new] ] timeToRun.
"New way"
[definedProxies do:[:each | each becomeForward: destClass new] ] timeToRun
}.
' id '4d3601bc-bf26-43e9-8719-3b73b4790d1f' date '8 May 2015' time '1:26:58.490739 pm' author 'HenrikSperreJohansen' ancestors ((name 'Voyage-Mongo-Core-TorstenBergmann.54' message 'categorize and comment' id '250235a9-ea73-7442-9e7e-1d80cd8e5629' date '4 March 2015' time '8:52:51.166442 pm' author 'TorstenBergmann' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.53' message 'fixes a comment' id '4f5e521c-e356-4ed4-9e77-8f73706055a6' date '3 October 2014' time '6:56:47.076708 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.52' message '- merged' id '5b591827-0462-42ad-a30c-815b08e10e2d' date '21 July 2014' time '1:06:46.642307 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-NorbertHartl.51' message 'removeAll calls not only removed all entities from a collection but also the collection itself. Indexes attached to the collection get removed this way as well. On automatic collection recreation the situation has changed and might lead to errornous behaviour if an index is necessary for an operation to succeed. 
removeAll just deletes all entities now. A removeCollection call has been introduced that can be called if the collection should be removed' id '3fd64d62-1359-477a-bfb1-ecdd223797cd' date '14 July 2014' time '2:27:25.943377 pm' author 'NorbertHartl' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.50' message '- implemented missing method #selectAllSortBy:' id '8f1a66e7-9d77-48c0-a118-17f71a73c85c' date '3 December 2013' time '12:55:49.23924 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.49' message '- added polymorphic method #idOf: (to obtain ids when needed)' id 'd37d1709-f8c3-4bde-a054-1564c7219061' date '23 November 2013' time '4:05:18.635 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.48' message '-  missing method implemented.' id 'a6946088-1470-4153-a42d-68e2be28ec5b' date '21 November 2013' time '12:57:09.312 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-OlivierAuverlot.47' message 'Login and password are added to the connection parameters' id 'e0f4f855-b6e0-480a-882c-135292a3e689' date '25 September 2013' time '10:41:21.204 am' author 'OlivierAuverlot' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.46' message '- added helper class VOOrder' id '8dc03f09-0ead-48ed-9660-bf9d9ef9d488' date '16 July 2013' time '6:44:59.218 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.45' message '- cleaning cache description when method changes' id 'c396c407-1895-4428-b564-77a7e6555511' date '14 June 2013' time '1:32:47.810613 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.44' message '- select with limit and sort order now works with mongoqueries too' id '67467cc4-3c0d-4807-bb44-bf67919ef63b' date '15 April 2013' time '8:39:24.171 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.43' message '- selectMany:limit:offset: now works with latest version of MongoQueries' id 'bbfb5bd7-006e-4e0c-9f27-71043f2e970e' date '13 April 2013' time '10:16:43.281 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-MarianoMartinezPeck.42' message '- Added an ifAbsent: when removing from cache because it may happen to remove an object which was already gced' id '6d90dd7a-6d42-430c-80c1-2a408a719995' date '4 February 2013' time '4:14:22.054 pm' author 'MarianoMartinezPeck' ancestors ((name 'Voyage-Mongo-Core-NicolasPetton.41' message 'Fixed object retreival in ODMongoRepositoryResolver >> retrieveClassOf:json:' id '00de6bf4-5d7e-4963-87ee-046e71286ea8' date '23 January 2013' time '3:45:24.948 pm' author 'NicolasPetton' ancestors ((name 'Voyage-Mongo-Core-MarianoMartinezPeck.40' message 'When removing an object, don''t forget to remove the key/value from the cache! otherwise since the cache is weak, we may think we need an update (beacuse an object could be there) but it could just mean that the GC didn''t run yet and hence we would need an insert, not update.' id '6ec18628-0b34-4296-9c9f-dc594d85c6a6' date '14 January 2013' time '9:26:22.326 am' author 'MarianoMartinezPeck' ancestors ((name 'Voyage-Mongo-Core-NicolasPetton.39' message 'Added #selectMany:sortBy:limit:offset:

The repository resolver sucks BTW, and needs to be refactored' id '777e7e38-3f93-485f-8eba-9cd9cd0cb967' date '10 January 2013' time '2:06:30.98 pm' author 'NicolasPetton' ancestors ((name 'Voyage-Mongo-Core-NicolasPetton.38' message '- do not use a global serializer/materializer in VOMongoRepository
- Reverted VOMongoRepositoryResolver>>basicRawSelectMany...' id '3fed6233-05ea-4835-88fd-84c626502259' date '9 January 2013' time '5:59:41.912 pm' author 'NicolasPetton' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.37' message '- merged with latest from Francois, Nico and Mariano :)' id 'b09f908c-b55c-438d-95c0-c2c5340f82da' date '9 January 2013' time '5:03:04.949 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.28' message '- fixed a bug where retrieved objects with #instanceOf defined where wrongly created with a parent class.' id '6f6474f3-6423-4534-8f50-f8baa08bc219' date '12 December 2012' time '3:11:43.508 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.27' message '-lots of small fixes
- access to cache now synchronized
- added #forceEager: method to repositories
- added #isTypeForbidden to forbid persistence of certain types (Blocks, for now)' id '0c5b4258-e48c-4ad1-95ad-f37a5f0060f2' date '23 July 2012' time '12:49:45.625 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.26' message '- allow handling of misssing references ("lazy integrity")' id 'fc9e7a4e-5538-4ffc-8ec0-a87950b40817' date '7 May 2012' time '11:37:52.161 am' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.25' message 'fix on pool size initialization' id '7de53480-5f31-491b-8df4-1d660a31851d' date '25 June 2012' time '10:12:41.852 am' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.24' message '-protocol to set pool size
-bugfix' id 'ecf31461-12d1-425b-826c-6d634a7b1af8' date '23 June 2012' time '5:53:35.161 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.23' message '-bugfix on remove' id '486cc57e-8a2f-497a-9b42-eb30967a3827' date '12 June 2012' time '6:12:51.981 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.22' message '-using SmalltalkHub connnection pool' id '4995e0a4-8ec8-4354-8dd3-53089a343bde' date '12 June 2012' time '11:04:35.927 am' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.21' message '-bugfix
-updated versions for 1.0 release' id '2ca4e68b-a1f2-4b1d-8c56-0612a004aed7' date '7 June 2012' time '3:30:17.693 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.20' message '-bugfix' id '34b12f2d-37c6-4426-9b15-85fbd6770829' date '6 June 2012' time '3:19:15.974 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.19' message '-bugfix' id '412907e0-d500-4b6c-9cd3-ce15f9106d8a' date '6 June 2012' time '3:11:44.087 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.18' message '-bugfix' id 'fc544cbf-a539-4e13-b37e-8bde4c055d19' date '6 June 2012' time '2:55:32.42 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.17' message '-bugfix' id 'df4f2d5c-d8fb-42c1-8384-00cce083f802' date '6 June 2012' time '2:51:02.405 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.16' message '-bugfix' id 'e4d9cb85-dbf8-49e5-84da-135ffd817ffd' date '6 June 2012' time '2:47:18.551 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.15' message '-bugfix
-updated versions for 1.0 release' id 'd83c4bcc-d03a-43c6-8e20-7c1fe8899f9e' date '31 May 2012' time '5:54:11.685 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.14' message '-bugfix' id 'a92f5090-d186-4b6f-b5dd-e3dca04ca43a' date '31 May 2012' time '3:06:22.197 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.13' message '-added some convenience methods
-added some class comments
-using "version" instead "timeStamp" (to prevent different times from different machines)' id 'c0a65012-dfe4-4fb1-9bd7-52d96be74f48' date '31 May 2012' time '1:31:22.269 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.12' message '-#isPersistent renamed to #isVoyageRoot. Still not convinced, but is a bit better' id '68d52a8d-8dff-44ce-85d9-d0f79a60b1eb' date '29 May 2012' time '6:44:38.822 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.11' message '-fixes
-timestamp' id '087061f0-d9b3-4b73-8837-b27461cb896b' date '25 May 2012' time '11:47:14.98 am' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.10' message '-added VOMongoKeyPairHashedValues to handle one-to-many collections where values are Dictionaries' id '1e8e6e74-2eb0-4c4f-9272-ed6d4c077fa3' date '14 May 2012' time '7:21:48.665 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.9' message '-added "future markers" to deal with cyclic references
-added VOMongoRepository#save:forceId: protocol to deal with future markers 
-added more information to reference and embeded types
-some minor refactors' id '15719616-9ded-4f4b-86eb-92d7e2622562' date '10 May 2012' time '2:27:42.867 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.8' message '-big simplification: now all attributes all one-to-one (unless one-to-many), its primitiveness solved in serialization/materialization time
-some work on the builder related to persist metaclasses too (class references)' id '03e765f0-3979-4b5a-a853-1def8afe6521' date '10 May 2012' time '9:45:40 am' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.7' message '-missing methods' id '76a98b09-f4df-4868-b591-695dc188fde3' date '7 May 2012' time '7:30:53.298 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.6' message '-changed relation descriptions to be more itelligent. Now you do not have to explicit the kind of the relationship, is infered by the information upcoming
-changed the two phases serialization, using a hacky (and I think cleaver) use of become :)' id 'e426d120-b9a6-4121-8e3f-2bab124a42e5' date '7 May 2012' time '7:21:45.834 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.5' message '-using direct accessor read/write, because some can override #readUsing: and #write:usung: can be rewritten (it happens in pier, for instance)
-Util classes to persist diferent kind of dictionaries' id '410760ce-5e54-4362-9319-31494e7e8a14' date '7 May 2012' time '1:46:23.54 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.4' message 'better error handling' id 'dd9f2ef2-25f2-493b-a967-b5d7d5cc495d' date '24 April 2012' time '2:03:47.523 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.3' message 'I don''t want mongo persistence to autoregister' id 'eab93d2c-ba57-4643-b8c2-16dcb82b8bcd' date '30 March 2012' time '4:53:09 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.2' message '-lazy proxy now keeps repository (needed if not using a centered repository)
-now it is possible to instance a VOMongoRepository, no need to subclass
-fixed on persistence' id '7a5502c6-4e3d-4498-b781-594f80ff99ea' date '5 March 2012' time '12:25:11 pm' author 'EstebanLorenzano' ancestors ((name 'Voyage-Mongo-Core-EstebanLorenzano.1' message 'version bump' id '1327d1b2-856a-410b-82c4-3b34319c30bd' date '14 February 2012' time '10:10:49 am' author 'EstebanLorenzano' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Voyage-Mongo-Core-MarianoMartinezPeck.36' message '- Rename ShSessionPool to VOMongoSessionPool.
- Accurate name for process in VOMongoSessionPool>>#populate.
- Add some comments. 
' id '234294e8-0baf-4885-85ba-36e0edfe887e' date '8 January 2013' time '9:10:52.952 am' author 'MarianoMartinezPeck' ancestors ((name 'Voyage-Mongo-Core-MarianoMartinezPeck.35' message '- Rename ShSessionPool to VOMongoSessionPool.
- Accurate name for process in VOMongoSessionPool>>#populate.
- Add some comments. 
' id 'd7895882-bff6-44c3-802c-d574e8a4f9e7' date '7 January 2013' time '4:36:45.738 pm' author 'MarianoMartinezPeck' ancestors ((name 'Voyage-Mongo-Core-MarianoMartinezPeck.34' message '- Rename ShSessionPool to VOMongoSessionPool.
- Accurate name for process in VOMongoSessionPool>>#populate.
- Add some comments. 
' id '810c336c-890f-45e1-b13c-7b60e5cb4fe2' date '7 January 2013' time '4:36:16.202 pm' author 'MarianoMartinezPeck' ancestors ((name 'Voyage-Mongo-Core-NicolasPetton.33' message 'Updated VOMongoRepositoryResolver to work with MongoTalk 1.4' id '7eebad90-8dfd-4000-a352-ea66bc3fb875' date '20 November 2012' time '1:49:47.308 pm' author 'NicolasPetton' ancestors ((name 'Voyage-Mongo-Core-FrancoisStephany.32' message 'adapts to MongoTalk 1.3' id '37aabf2e-db3b-45d1-b671-0164c6fd95fe' date '14 November 2012' time '9:19:33.278 pm' author 'FrancoisStephany' ancestors ((name 'Voyage-Mongo-Core-FrancoisStephany.31' message 'Introduce limit and offset in the query interface.' id '30e4f1e4-a9da-472f-971d-fa7e36548049' date '26 September 2012' time '11:13:30.952 am' author 'FrancoisStephany' ancestors ((name 'Voyage-Mongo-Core-FrancoisStephany.30' message 'Add a "count" method to persisted objects. ' id '0f83a92b-0255-471f-a75e-5e2f2d19396b' date '6 September 2012' time '3:34:05.511 pm' author 'FrancoisStephany' ancestors ((name 'Voyage-Mongo-Core-FrancoisStephany.29' message 'Fixes the bug described in VORepositoryTest>>testSelectOneWithSubclass

if B is a subclass of A and an instance of B is saved into a DB then retrieved with:
A selectOne: {...} 
it shows up as an instance of A instead of ' id '5ea7fcb4-4206-456c-812c-951fd8320855' date '3 September 2012' time '9:27:34.484 pm' author 'FrancoisStephany' ancestors ((name 'Voyage-Mongo-Core-FrancoisStephany.28' message 'Add the possibility to drop the database of the current VOMongoRepository:
VORepository current dropDatabase.

This can be useful to delete a database created for tests.' id '58922665-e437-414c-a12f-b631d451cb1e' date '6 August 2012' time '4:55:38.294 pm' author 'FrancoisStephany' ancestors ((id '0c5b4258-e48c-4ad1-95ad-f37a5f0060f2')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Voyage-Mongo-Core-NicolasPetton.34' message 'Filter instances of the queried class in VOMongoRepositoryResolver' id 'c8f3b372-bcc1-44c0-b968-51b6768d6d6d' date '8 January 2013' time '4:39:33.17 pm' author 'NicolasPetton' ancestors ((id '7eebad90-8dfd-4000-a352-ea66bc3fb875')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Voyage-Mongo-Core-StephaneDucasse.51' message 'adding printString to repo.' id '8ef914ac-a90b-4c73-9b58-fe8caef6b7ef' date '28 February 2014' time '11:44:07.735481 am' author 'StephaneDucasse' ancestors ((id '8f1a66e7-9d77-48c0-a118-17f71a73c85c')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())