On Tue, Apr 9, 2019 at 5:08 AM Joshua Thomas Wise < joshuathomasw...@gmail.com> wrote:
> SQLite3 uses manifest typing, which is great and provides a ton of > flexibility. However, due to implicit casting rules, many operations can > accidentally result in a different value than what was desired. If > programmers don’t guard against every possible cause of implicit casting, > many error situations are swallowed and instead can result in data > corruption. I propose there should be a compile-time option to disable all > implicit casting done within the SQL virtual machine. The option could > cause all type-incompatible operations to return NULL, or it could cause > these operations to throw hard errors. Either approach would be similarly > useful. > > Here are some examples of how implicit casting can lead to surprising > results: > > 1. If invoking SUM() would cause integer overflow, a hard error is > returned. The same things happens with ABS(). However, if integer overflow > occurs when using the + operator, a REAL value is returned instead. > > 2. Many built-in string functions will automatically cast BLOBs to TEXTs, > but those could contain embedded nuls, leading to undefined behavior. > > 3. Declaring a column with INTEGER affinity does not actually force its > values to be integers. An integer that is out of range could be stored as a > REAL value, unexpectedly changing the behavior of functions such as SUM() > and ABS(). > While I can see some benefits, I'm afraid this is unlikely to happen, because the testing effort from Richard/Dan/Joe would be large, to retain their 100% line/branch coverage, with benefits not outweighing the costs from their POV. I'm the first one to request or lobby for changes, like optional "usual" strong enforcement of types/affinity when storing values into tables, similar to your #3. So it's not that I don't see some value in it. But experience tells me this will be an uphill battle I'm afraid. --DD _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users