Hi there,
In all versions of Glorp I have access to, there are way too many halts. Take a look at
GlorpSession>>#createTables:
"Create the tables for our descriptor system. This will fail if the tables already exist. Use recreateTables for that."
| sequences |
system platform areSequencesExplicitlyCreated
ifTrue: [
sequences := self system allSequencesFor: aCollection.
sequences do: [:each | accessor createSequence: each ifError: [:ex | self halt]]].
aCollection do: [:each | accessor createTable: each ifError: [:ex | self halt]].
aCollection do: [:each | accessor createTableIndexes: each ifError: [:ex | self halt]].
self platform supportsConstraints
ifTrue: [
aCollection
do: [:each | accessor createTableFKConstraints: each ifError: [:ex | self halt]]]
None of these halts should be in the code for multiple reasons:
first, a halt stops a running image and there is not much you can do.
second: a halt does not provide any helpful information to a developer who is looking for the problem. Especially when a method includes multiple halts, it is almost impossible to find out what could have gone wrong.
third: use of Exceptions would make catching them and providing helpful information much easier.
When I last stumbled over this it was a halt occuring in the schema evolution part of starting ap a new version of a headless server image. It took me quite a while to understand that "my" halt was the first one. Once I had that it was easy to guess I was trying to create an already existing sequence. If something useful had been done in the ifError: block, and be it just a simple [:ex| Error signal: 'Sequence creation failed: ', ex description] instead of a halt, I would probably have saved an hour of guesswork.
If there was a process or platform to exchange ideas like this - be it guthub or whatever, such things could be improved in a matter of a few hours or days. Adding the Code, posting a few comments and maybe a test case, could be fast and effective
But the way things work right now, it takes years or doesn't happen at all, because I have no idea who to talk to and how to push changes upstream and maybe have them reviewed...
Any suggestions?
Joachim