We are moving into the arena of having multiple repositories in multiple technologies (.EAP, MS SQL Server, Oracle). So we started to investigate the compatibilities and found (not really to our surprise) that the various structures for the different technologies were inconsistent. Not merely because of technological differences (for example Oracle hasn't had Booleans since forever), but just plain bugs. Column is 50 in one technology, 255 in another etc... This affects the ability to generate the correct outcomes with the
Tools|Data Management>Project Transfer... functionality.
Now, as far as we can ascertain, EA code emits "0" and "1" for (conceptually) Boolean columns. Since there is no consistency, even within a row, let alone a technology, on how Booleans are represented it can create issues if you query the repository directly (as mentioned in:
NULL is NOT False).
So it was interesting to observe that although the t_package.IsControlled field is a Number (int) EA still attempts to query it as though it were a Boolean Yes/No field in the .EAP (the query probably includes IsControlled = True) but NOT (apparently) in MS SQL Server.
Don't ask how we know - that's "Secret Data Architect's business..."
The reason for reporting the bug is (as usual) the consistency one... Why is only this column in the table (where there are at least three other Booleans) treated this way? In fact, we know there's probably one or two others that behave the same way across the DB (now that we've sussed out what - we think - is going on).
Writing code with all these exceptions and conditionals leads to buggy and inconsistent behaviour. Since EA is Emitting "0" and "1" for the Boolean values (presumably because of differences in technologies), it should explicitly test for "0" and "1" in
all technologies. It's just bad coding (if not bad design)...
Naturally, the discovery of this "bug" reduces our ability to create consistent outcomes in all the technologies of interest.
Thoughts?
Reported,
Paolo