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(). _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users