Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Change a comment in sqlite3ota.h to make it clear that it is not possible to insert a NULL value into an INTEGER PRIMARY KEY column using ota. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | ota-update |
Files: | files | file ages | folders |
SHA1: |
a5e86bea4ad51bbb988a2a2215961706 |
User & Date: | dan 2015-02-05 17:46:19.663 |
Context
2015-02-06
| ||
00:31 | Revise the way that the index structure for a WITHOUT ROWID table is discovered. (check-in: 7f10a0eaf1 user: drh tags: ota-update) | |
2015-02-05
| ||
17:46 | Change a comment in sqlite3ota.h to make it clear that it is not possible to insert a NULL value into an INTEGER PRIMARY KEY column using ota. (check-in: a5e86bea4a user: dan tags: ota-update) | |
17:36 | Prevent ota updates from violating NOT NULL constraints. Add a comment to the "limitations" section of sqlite3ota.h saying that CHECK constraints are not enforced. (check-in: 74e073dd60 user: dan tags: ota-update) | |
Changes
Changes to ext/ota/ota10.test.
︙ | ︙ | |||
125 126 127 128 129 130 131 | CREATE TABLE t2(a INTEGER NOT NULL, b TEXT NOT NULL, c PRIMARY KEY); CREATE TABLE t3(a INTEGER NOT NULL, b TEXT NOT NULL, c INTEGER PRIMARY KEY); CREATE TABLE t4(a, b, PRIMARY KEY(a, b)) WITHOUT ROWID; INSERT INTO t2 VALUES(10, 10, 10); INSERT INTO t3 VALUES(10, 10, 10); INSERT INTO t4 VALUES(10, 10); | < > > > > > > | > > > > > > > > | 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | CREATE TABLE t2(a INTEGER NOT NULL, b TEXT NOT NULL, c PRIMARY KEY); CREATE TABLE t3(a INTEGER NOT NULL, b TEXT NOT NULL, c INTEGER PRIMARY KEY); CREATE TABLE t4(a, b, PRIMARY KEY(a, b)) WITHOUT ROWID; INSERT INTO t2 VALUES(10, 10, 10); INSERT INTO t3 VALUES(10, 10, 10); INSERT INTO t4 VALUES(10, 10); } foreach {tn error ota} { 2 {SQLITE_CONSTRAINT - NOT NULL constraint failed: t2.a} { INSERT INTO data_t2 VALUES(NULL, 'abc', 1, 0); } 3 {SQLITE_CONSTRAINT - NOT NULL constraint failed: t2.b} { INSERT INTO data_t2 VALUES(2, NULL, 1, 0); } 4 {SQLITE_CONSTRAINT - NOT NULL constraint failed: t2.c} { INSERT INTO data_t2 VALUES(1, 'abc', NULL, 0); } 5 {SQLITE_MISMATCH - datatype mismatch} { INSERT INTO data_t3 VALUES(1, 'abc', NULL, 0); } 6 {SQLITE_CONSTRAINT - NOT NULL constraint failed: t4.b} { INSERT INTO data_t4 VALUES('a', NULL, 0); } 7 {SQLITE_CONSTRAINT - NOT NULL constraint failed: t4.a} { INSERT INTO data_t4 VALUES(NULL, 'a', 0); } 8 {SQLITE_CONSTRAINT - NOT NULL constraint failed: t2.a} { INSERT INTO data_t2 VALUES(NULL, 0, 10, 'x..'); } 9 {SQLITE_CONSTRAINT - NOT NULL constraint failed: t3.b} { INSERT INTO data_t3 VALUES(10, NULL, 10, '.x.'); } 10 {SQLITE_MISMATCH - datatype mismatch} { INSERT INTO data_t3 VALUES(1, 'abc', 'text', 0); } } { set ota " CREATE TABLE data_t2(a, b, c, ota_control); CREATE TABLE data_t3(a, b, c, ota_control); CREATE TABLE data_t4(a, b, ota_control); $ota " do_test 4.2.$tn { list [catch { apply_ota $ota } msg] $msg } [list 1 $error] } do_test 4.3 { set ota { CREATE TABLE data_t3(a, b, c, ota_control); INSERT INTO data_t3 VALUES(1, 'abc', '5', 0); INSERT INTO data_t3 VALUES(1, 'abc', '-6.0', 0); } list [catch { apply_ota $ota } msg] $msg } {0 SQLITE_DONE} finish_test |
Changes to ext/ota/sqlite3ota.h.
︙ | ︙ | |||
125 126 127 128 129 130 131 | ** ** For each row to INSERT into the target database as part of the OTA ** update, the corresponding data_% table should contain a single record ** with the "ota_control" column set to contain integer value 0. The ** other columns should be set to the values that make up the new record ** to insert. ** | | | | < | 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | ** ** For each row to INSERT into the target database as part of the OTA ** update, the corresponding data_% table should contain a single record ** with the "ota_control" column set to contain integer value 0. The ** other columns should be set to the values that make up the new record ** to insert. ** ** If the target database table has an INTEGER PRIMARY KEY, it is not ** possible to insert a NULL value into the IPK column. Attempting to ** do so results in an SQLITE_MISMATCH error. ** ** For each row to DELETE from the target database as part of the OTA ** update, the corresponding data_% table should contain a single record ** with the "ota_control" column set to contain integer value 1. The ** real primary key values of the row to delete should be stored in the ** corresponding columns of the data_% table. The values stored in the ** other columns are not used. |
︙ | ︙ |