On Mon, 17 Aug 2015 17:19:49 +0200 Olivier Barthelemy <barthelemy at geovariances.com> wrote:
> CREATE TABLE VariableDetails (dtl_id INTEGER PRIMARY KEY ASC > AUTOINCREMENT, storage_implicit BOOLEANCHECK (storage_implicit = > 'true' OR storage_implicit = 'false'), storage_type TEXT NOT NULL); > > Insert statement > INSERT INTO VariableDetails (storage_implicit, storage_type) VALUES > (true, INT_64); > ( Values are not passed dirrectly in the statement. The boolean in > particular is passed using sqlite3_bind_int() ) I think you got to the right place with this, but I'm not sure it was made clear that the reason is evident in the above text. The constraint is against the strings 'true' and 'false'. The insert statement inserts "true", no quotes; as you say, it's a C symbol interpreted by the compiler. It's bound to the prepared statement with sqlite3_bind_int. The value in the bound location will be interpreted as an integer, not as a pointer to a character array! --jkl