aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrh <>2021-08-23 10:28:02 +0000
committerdrh <>2021-08-23 10:28:02 +0000
commitb9fd0101bd350b5256a72bf3567fd9ad2e60c4b3 (patch)
tree48fe251e5637945fc3f1535087e183c38a2b529c
parent2a0eefd66536fea7ac7f57d67ce97aa0b1da7338 (diff)
downloadsqlite-b9fd0101bd350b5256a72bf3567fd9ad2e60c4b3.tar.gz
sqlite-b9fd0101bd350b5256a72bf3567fd9ad2e60c4b3.zip
Back out the change that allows typeless columns in strict tables. Replace
that capability with an ANY type for strict tables that will accept any datatype with BLOB affinity. FossilOrigin-Name: d8fd1a2bfd51848ea612142d23475b268b3f5269e558f2e09713d1ac18b18274
-rw-r--r--manifest20
-rw-r--r--manifest.uuid2
-rw-r--r--src/build.c17
-rw-r--r--src/global.c5
-rw-r--r--src/sqliteInt.h13
-rw-r--r--src/vdbe.c2
-rw-r--r--test/strict1.test12
7 files changed, 41 insertions, 30 deletions
diff --git a/manifest b/manifest
index 1f41b59dd..9b371f461 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Allow\stypeless\scolumns\sin\sSTRICT\stables\sthat\sare\sable\sto\saccept\sany\ndata\stype.
-D 2021-08-21T20:54:19.283
+C Back\sout\sthe\schange\sthat\sallows\stypeless\scolumns\sin\sstrict\stables.\s\sReplace\nthat\scapability\swith\san\sANY\stype\sfor\sstrict\stables\sthat\swill\saccept\sany\ndatatype\swith\sBLOB\saffinity.
+D 2021-08-23T10:28:02.736
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -488,7 +488,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
F src/btree.c e204a9c8fb4fe5dbb910a863ba487f4af9b5c501254ec4ccbfcdd6b1f65b7fb4
F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22
F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0
-F src/build.c f9246c633829153bb6d41f03eeb5a121a6e618b48e20a5e9c18927c381df072d
+F src/build.c 8fa6deebf8726339a5aafb322e9d79c48950b994f33f17460c5393ef593d202e
F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
F src/ctime.c 8159d5f706551861c18ec6c8f6bdf105e15ea00367f05d9ab65d31a1077facc1
@@ -500,7 +500,7 @@ F src/expr.c e98375fc63552cc8cdd36a41bdca3039cb603d9fe67abd9c9f40adae8405fbc5
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
F src/fkey.c 1905af1821b88321e1bb9d6a69e704495b6844a9b6c29398d40117cc251e893c
F src/func.c c224240cbc97fa5e9c4fe9acb128716cb835ca045532bca6951b7c45b020c56c
-F src/global.c 24ba3b3e88dd2a70389388c3bc46fd55a44bfae3c44f76dad1ca00556f1c769a
+F src/global.c 612ea60c9acbcb45754c2ed659b4a56936a06814718e969636fedc7e3b889808
F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19
F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38
F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144
@@ -549,7 +549,7 @@ F src/shell.c.in f795a4ae3c35631f5edcfa754c7824ff1d8a75b23a07e22e664b50f82e82634
F src/sqlite.h.in 4e977a5e2ed1a9e8987ff65a2cab5f99a4298ebf040ea5ff636e1753339ff45a
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510
-F src/sqliteInt.h a0e00a52b90f236c77fd0c0b839cc091d9926aca7627eb6ad8cf3f55a9847a71
+F src/sqliteInt.h 4cb73cc4b9b7705ccfd5bdfb9c248a9772a90ba52f743dbab90d13123babe36b
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -616,7 +616,7 @@ F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937
F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
F src/util.c eafc8cfeb66fdbf8839922d13019b7882f242ac31b383e3451aab7744c54df3e
F src/vacuum.c 454973a59fb20bb982efc2df568a098616db6328a0491b6e84e2e07f7333db45
-F src/vdbe.c b228d775c269c4f44284ca9f855329f7cb429159d0f79e54408e4506c932b712
+F src/vdbe.c 39755f468a623af5e805c65a9ad7edb7c45fd78239fd58a319c7db8dfacc302b
F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe
F src/vdbeInt.h 38206c8dd6b60ff03d9fd4f626b1b4fd0eef7cdc44f2fc2c1973b0f932a3f26b
F src/vdbeapi.c aa5aaf2c37676b83af5724c6cd8207a3064ed46a217fd180957f75ac84f7a2a5
@@ -1425,7 +1425,7 @@ F test/stat.test 15a3106eddedfc882f64bc09f237b4169be4b92dd57c93031b8ff8b13af3e7c
F test/statfault.test f525a7bf633e50afd027700e9a486090684b1ac1
F test/stmt.test 54ed2cc0764bf3e48a058331813c3dbd19fc1d0827c3d8369914a5d8f564ec75
F test/stmtvtab1.test 6873dfb24f8e79cbb5b799b95c2e4349060eb7a3b811982749a84b359468e2d5
-F test/strict1.test c5848830ebbf96b5126c41b16974d76110a50f8877dec42e222527cd292c47f5
+F test/strict1.test 1e80c6ae71702c7cebacbc9c61d0c58e270b4cc8004c187296e39432015bf2be
F test/strict2.test fe1928b3768f51b39774d753ac7e71727718d1c3305eead0e5ea60f75e9e6b4c
F test/subjournal.test 8d4e2572c0ee9a15549f0d8e40863161295107e52f07a3e8012a2e1fdd093c49
F test/subquery.test d7268d193dd33d5505df965399d3a594e76ae13f
@@ -1922,7 +1922,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 600f1991e5c0a5d89cd8776a157b6fd72c7489791085876925e8dd7ab146fe1f
-R 1fec1fd4fd154dec8605720039e4eeb3
+P 1e2dcc2d4ee88c0aed40d1472b1c7d43fd43822891729ad6a2c55d5b912e7ad7
+R bc0e3fa5395544f8414a9f2fc5c4a24f
U drh
-Z 8c2a8dfd9ff7ca38c0c83e9da4b64c4b
+Z 6df95366126c115ab64940da7d4c5f2b
diff --git a/manifest.uuid b/manifest.uuid
index 472ade95b..8c812008c 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-1e2dcc2d4ee88c0aed40d1472b1c7d43fd43822891729ad6a2c55d5b912e7ad7 \ No newline at end of file
+d8fd1a2bfd51848ea612142d23475b268b3f5269e558f2e09713d1ac18b18274 \ No newline at end of file
diff --git a/src/build.c b/src/build.c
index b80eef8dc..f2b3d2544 100644
--- a/src/build.c
+++ b/src/build.c
@@ -2606,12 +2606,19 @@ void sqlite3EndTable(
p->tabFlags |= TF_Strict;
for(ii=0; ii<p->nCol; ii++){
Column *pCol = &p->aCol[ii];
- if( pCol->eCType==COLTYPE_CUSTOM && pCol->colFlags & COLFLAG_HASTYPE ){
- sqlite3ErrorMsg(pParse,
- "unknown datatype for %s.%s: \"%s\"",
- p->zName, pCol->zCnName, sqlite3ColumnType(pCol, "")
- );
+ if( pCol->eCType==COLTYPE_CUSTOM ){
+ if( pCol->colFlags & COLFLAG_HASTYPE ){
+ sqlite3ErrorMsg(pParse,
+ "unknown datatype for %s.%s: \"%s\"",
+ p->zName, pCol->zCnName, sqlite3ColumnType(pCol, "")
+ );
+ }else{
+ sqlite3ErrorMsg(pParse, "missing datatype for %s.%s",
+ p->zName, pCol->zCnName);
+ }
return;
+ }else if( pCol->eCType==COLTYPE_ANY ){
+ pCol->affinity = SQLITE_AFF_BLOB;
}
if( (pCol->colFlags & COLFLAG_PRIMKEY)!=0
&& p->iPKey!=ii
diff --git a/src/global.c b/src/global.c
index 091310c93..675cdec23 100644
--- a/src/global.c
+++ b/src/global.c
@@ -364,8 +364,9 @@ const char sqlite3StrBINARY[] = "BINARY";
** sqlite3_column_type() or sqlite3_value_type())
** for each entry in sqlite3StdType[].
*/
-const unsigned char sqlite3StdTypeLen[] = { 4, 3, 7, 4, 4 };
+const unsigned char sqlite3StdTypeLen[] = { 3, 4, 3, 7, 4, 4 };
const char sqlite3StdTypeAffinity[] = {
+ SQLITE_AFF_NUMERIC,
SQLITE_AFF_BLOB,
SQLITE_AFF_INTEGER,
SQLITE_AFF_INTEGER,
@@ -373,6 +374,7 @@ const char sqlite3StdTypeAffinity[] = {
SQLITE_AFF_TEXT
};
const char sqlite3StdTypeMap[] = {
+ 0,
SQLITE_BLOB,
SQLITE_INTEGER,
SQLITE_INTEGER,
@@ -380,6 +382,7 @@ const char sqlite3StdTypeMap[] = {
SQLITE_TEXT
};
const char *sqlite3StdType[] = {
+ "ANY",
"BLOB",
"INT",
"INTEGER",
diff --git a/src/sqliteInt.h b/src/sqliteInt.h
index 348a41393..5308ca95c 100644
--- a/src/sqliteInt.h
+++ b/src/sqliteInt.h
@@ -2055,12 +2055,13 @@ struct Column {
** Adjust the SQLITE_N_STDTYPE value if adding or removing entries.
*/
#define COLTYPE_CUSTOM 0 /* Type appended to zName */
-#define COLTYPE_BLOB 1
-#define COLTYPE_INT 2
-#define COLTYPE_INTEGER 3
-#define COLTYPE_REAL 4
-#define COLTYPE_TEXT 5
-#define SQLITE_N_STDTYPE 5 /* Number of standard types */
+#define COLTYPE_ANY 1
+#define COLTYPE_BLOB 2
+#define COLTYPE_INT 3
+#define COLTYPE_INTEGER 4
+#define COLTYPE_REAL 5
+#define COLTYPE_TEXT 6
+#define SQLITE_N_STDTYPE 6 /* Number of standard types */
/* Allowed values for Column.colFlags.
**
diff --git a/src/vdbe.c b/src/vdbe.c
index 92d904135..5ac770c05 100644
--- a/src/vdbe.c
+++ b/src/vdbe.c
@@ -2974,7 +2974,7 @@ case OP_TypeCheck: {
break;
}
default: {
- /* anything goes */
+ /* COLTYPE_ANY. Accept anything. */
break;
}
}
diff --git a/test/strict1.test b/test/strict1.test
index 819c7e5c6..da3d33856 100644
--- a/test/strict1.test
+++ b/test/strict1.test
@@ -20,14 +20,14 @@ set testprefix strict1
# STRICT tables have on a limited number of allowed datatypes.
#
do_catchsql_test strict1-1.1 {
- CREATE TABLE t1ok0(a) STRICT;
-} {0 {}}
+ CREATE TABLE t1(a) STRICT;
+} {1 {missing datatype for t1.a}}
do_catchsql_test strict1-1.2 {
- CREATE TABLE t1ok1(a PRIMARY KEY) STRICT, WITHOUT ROWID;
-} {0 {}}
+ CREATE TABLE t1(a PRIMARY KEY) STRICT, WITHOUT ROWID;
+} {1 {missing datatype for t1.a}}
do_catchsql_test strict1-1.3 {
- CREATE TABLE t1ok2(a PRIMARY KEY) WITHOUT ROWID, STRICT;
-} {0 {}}
+ CREATE TABLE t1(a PRIMARY KEY) WITHOUT ROWID, STRICT;
+} {1 {missing datatype for t1.a}}
do_catchsql_test strict1-1.4 {
CREATE TABLE t1(a BANJO PRIMARY KEY) WITHOUT ROWID, STRICT;
} {1 {unknown datatype for t1.a: "BANJO"}}