From: drh Date: Tue, 22 Oct 2019 12:02:09 +0000 (+0000) Subject: Merge changes on trunk into the generated-columns branch. X-Git-Tag: version-3.31.0~376^2~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6b910364bbf531670aa0c02ad004bcdf2f5b66ad;p=thirdparty%2Fsqlite.git Merge changes on trunk into the generated-columns branch. FossilOrigin-Name: ba123b8c201053d8f9387de38f3513b06f7721b28d79fab8489f96d336105117 --- 6b910364bbf531670aa0c02ad004bcdf2f5b66ad diff --cc manifest index b164bf9dd0,8c107179f6..ca085798dd --- a/manifest +++ b/manifest @@@ -1,5 -1,5 +1,5 @@@ - C Changes\sto\sthe\sINSERT\slogic\sto\smake\sit\ssimpler\sand\sfaster\sand\sso\sthat\nit\sworks\swith\sgenerated\scolumns\sand\sBEFORE\striggers. - D 2019-10-21T01:04:11.302 -C Previous\scheck-in\sto\sfix\s[b47e3627ecaadbde]\swas\sincomplete.\s\sThis\scheck-in\ncompletes\sthe\sfix\sand\sadds\sa\stest\scases. -D 2019-10-22T11:29:22.330 ++C Merge\schanges\son\strunk\sinto\sthe\sgenerated-columns\sbranch. ++D 2019-10-22T12:02:09.134 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@@ -469,15 -469,15 +469,15 @@@ F src/btmutex.c 8acc2f464ee76324bf13310 F src/btree.c a8a9c2ce62bdf54c8cf9795143d7cb10b7473a1230a0572f702d061ffcceefe5 F src/btree.h f27a33c49280209a93385e218306c4ee5f46ba8d7649d2f81a7166b282232484 F src/btreeInt.h 91806f01fd1145a9a86ba3042f25c38d8faf6002701bf5e780742cf88bcff437 - F src/build.c b5eefc5b29788ff43062aa15f08e17df843fcc3dedbf6ad2e8a5ecfdd71c83a8 - F src/callback.c 25dda5e1c2334a367b94a64077b1d06b2553369f616261ca6783c48bcb6bda73 -F src/build.c 0e558ef847ccc4b6aa38dee44cde9d9df46e953b0a66e4fa4376265824955fe3 ++F src/build.c c8d76afe573ad68678206f85c122544d65932f95ad067e17570de930de4b0276 + F src/callback.c 88615dfc0a82167b65b452b4b305dbf86be77200b3343c6ffc6d03e92a01d181 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 1b0724e66f95f33b160b1af85caaf9cceb325d22abf39bd24df4f54a73982251 F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c c12833de69cb655751487d2c5a59607e36be1c58ba1f4bd536609909ad47b319 F src/delete.c d08c9e01a2664afd12edcfa3a9c6578517e8ff8735f35509582693adbe0edeaf - F src/expr.c e00d483f68fcaa2bfb334ba21550f949ca92b239f86ca22824577988efc53010 -F src/expr.c da4b31b0dfba1bf7891d996e91eff371b4eb5672341beb0c54299f56bc745cbc ++F src/expr.c 7f2492f1a8190ae51e5cd2b8d64dd97d672de6270789daa70031c9243b101431 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 6271fda51794b569d736eba4097d28f13080cd0c9eb66d5fcecb4b77336fae50 F src/func.c ed33e38cd642058182a31a3f518f2e34f4bbe53aa483335705c153c4d3e50b12 @@@ -486,7 -486,7 +486,7 @@@ F src/hash.c 8d7dda241d0ebdafb6ffdeda31 F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38 F src/hwtime.h 747c1bbe9df21a92e9c50f3bbec1de841dc5e5da F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 - F src/insert.c db411a28a6c5bf159c0ea9f9b7dde1b41b4be6f393a77b574e8086dd4bea0153 -F src/insert.c 69e47d76598d26f87cc9b32b9e9fc84e49e3b9371b5d9ae8465f38486ad9665e ++F src/insert.c f657ee9898f147d3dd96986dae2611afb75bcef8dd3644f182232f5ca2268a0e F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 4ddc65ae13c0d93db0ceedc8b14a28c8c260513448b0eb8c5a2ac375e3b6a85d F src/main.c 3e01f6a1c96643381b5f9d79e4ff7f2520bc5712197746fb0852283e78cccf66 @@@ -523,14 -523,14 +523,14 @@@ F src/pragma.h 40962d65b645bb3f08c1f4c4 F src/prepare.c 6049beb71385f017af6fc320d2c75a4e50b75e280c54232442b785fbb83df057 F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c e021be0c1c4a2125fa38aabcd8dbb764bf5b2c889a948c30d3708430ec6ccd00 +F src/resolve.c 2160146697e6e0ba251b5a954e16f542b6e684fb4778cec2994094ab401ef996 F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 - F src/select.c 7ef05eeb7f686f84dd1428cbdca280c898915bbf56e1ea97bd42ecc070af78d3 + F src/select.c 9c81d168b5a7ddc2277a6f6d3daec9ddd0ff5cebf12628d7e342f3c337231e7e F src/shell.c.in 3093bdf5eedd91da08f0268f1442aa510a60798c9441868149ddbecdf8bcaa79 F src/sqlite.h.in 5725a6b20190a1e8d662077a1c1c8ea889ad7be90dd803f914c2de226f5fe6ab F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h cef696ce3293242c67b2339763608427bf72ee66f1f3a05389ac2a7b46001c31 - F src/sqliteInt.h 49ade8ae4322263c4bfb46ededd566f6351a82380294bb11efb91d2ae100ca24 -F src/sqliteInt.h 5e98328254a8932a912cd12960cc7a4f22078a56bc9c617ffe042ad554c0db68 ++F src/sqliteInt.h 3a498ce50d079e0b2c4d780fc48d93024afaac4511021bc121d4277cb1a3df56 F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34 @@@ -611,10 -611,10 +611,10 @@@ F src/vxworks.h d2988f4e5a61a4dfe82c652 F src/wal.c bbd6838bd79c0a32144d482fb0b6a9d2d1a252fb3b16d5005ec30f2f80413b0d F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a F src/walker.c d5a94907dcac990e31976be9dc769d17f6a806782593d6aec9d760ee01ec22cd - F src/where.c 9ab206102932b7fe0e05f8e9133b5c0a351c0fd6f01e5d65ae4d1cd116aa89e6 - F src/whereInt.h 2c6bae136a7c0be6ff75dc36950d1968c67d005c8e51d7a9d77cb996bb4843d9 -F src/where.c 148fa1ce9d6421a2c325291cae7681b3492cf1f219ff58f9ef38695a7f3c61ff ++F src/where.c 6ff3ef076485dd71efbbabcc7ddc0473c04a9bdcb524128939757b002466f2d1 + F src/whereInt.h 4a296fd4fa79fdcbc2b5e8c1b898901617655811223e1082b899c23ecb092217 -F src/wherecode.c 57d034a0dbca9f86e1a691f74e469ed09ff49d04712b838fb68596b76a9af7d2 +F src/wherecode.c d96190c0b536339375846048ad3c41758b4bd6baaf8f8f350da5911d42bc4a61 - F src/whereexpr.c 05c283d26aa9c3f5d1bf13a5f6a573b43295b9db280eff18e26f97d7d7f119b4 + F src/whereexpr.c 0705f608f6dbbd4e95d440528d6c760b91b6f402ba4eb8b8d964c110e2010780 F src/window.c 064f251451c8e2a1c76b6269229d911a651e119c6a5f522b6eaebf8dc8714041 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627 @@@ -1847,7 -1847,7 +1847,7 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 - P 932a37275d7e932f8237d32c8fc6087ed8cd342fe01ef2f7a43c7237ab84c9ac - R 47a4a5169a9bdb2c3c1d9653909f73fd -P 9ff80a9bf8fee776e2f282d0597215b77d48093ebc71d047ad1457da0582ddbc -R afcf07bfa3aa997eb10b76d021564d31 ++P bc368cb090376d33d3844e3689c4f6bd19eed758e39b878ee67fef93b1c839ea c7da1c01f1f239e68c2173ac5748b8c5798271e43bdcee68f51f97cd0ca92bd5 ++R 3ed2fbe0c143869ff55bbbadcc27c112 U drh - Z f477eaf49473bce8390a1ef42b7a8a95 -Z 3c9d55fa5bc6fe09c146135efce06e8a ++Z c16a467e1be0aad7834a9c102a3d7298 diff --cc manifest.uuid index 1071898fde,60f43863b3..7095e594e6 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - bc368cb090376d33d3844e3689c4f6bd19eed758e39b878ee67fef93b1c839ea -c7da1c01f1f239e68c2173ac5748b8c5798271e43bdcee68f51f97cd0ca92bd5 ++ba123b8c201053d8f9387de38f3513b06f7721b28d79fab8489f96d336105117 diff --cc src/build.c index 4501d41d46,22a57a240b..ad65c25ef7 --- a/src/build.c +++ b/src/build.c @@@ -1599,87 -1520,6 +1599,52 @@@ void sqlite3AddCollateType(Parse *pPars } } +/* Change the most recently parsed column to be a GENERATED ALWAYS AS +** column. +*/ +void sqlite3AddGenerated(Parse *pParse, Expr *pExpr, Token *pType){ +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + u8 eType = COLFLAG_VIRTUAL; + Table *pTab = pParse->pNewTable; + Column *pCol; + if( pTab==0 ) goto generated_done; + pCol = &(pTab->aCol[pTab->nCol-1]); + if( IN_DECLARE_VTAB ){ + sqlite3ErrorMsg(pParse, "virtual tables cannot use computed columns"); + goto generated_done; + } + if( pCol->pDflt ) goto generated_error; + if( pType ){ + if( pType->n==7 && sqlite3StrNICmp("virtual",pType->z,7)==0 ){ + /* no-op */ + }else if( pType->n==6 && sqlite3StrNICmp("stored",pType->z,6)==0 ){ + eType = COLFLAG_STORED; + }else{ + goto generated_error; + } + } + if( eType==COLFLAG_VIRTUAL ) pTab->nNVCol--; + pCol->colFlags |= eType; + assert( TF_HasVirtual==COLFLAG_VIRTUAL ); + assert( TF_HasStored==COLFLAG_STORED ); + pTab->tabFlags |= eType; + pCol->pDflt = pExpr; + pExpr = 0; + goto generated_done; + +generated_error: + sqlite3ErrorMsg(pParse, "incorrect GENERATED ALWAYS AS on column \"%s\"", + pCol->zName); +generated_done: + sqlite3ExprDelete(pParse->db, pExpr); +#else + /* Throw and error for the GENERATED ALWAYS AS clause if the + ** SQLITE_OMIT_GENERATED_COLUMNS compile-time option is used. */ + sqlite3ErrorMsg(pParse, "GENERATED ALWAYS AS not supported"); + sqlite3ExprDelete(pParse->db, pExpr); +#endif +} + - /* - ** This function returns the collation sequence for database native text - ** encoding identified by the string zName, length nName. - ** - ** If the requested collation sequence is not available, or not available - ** in the database native encoding, the collation factory is invoked to - ** request it. If the collation factory does not supply such a sequence, - ** and the sequence is available in another text encoding, then that is - ** returned instead. - ** - ** If no versions of the requested collations sequence are available, or - ** another error occurs, NULL is returned and an error message written into - ** pParse. - ** - ** This routine is a wrapper around sqlite3FindCollSeq(). This routine - ** invokes the collation factory if the named collation cannot be found - ** and generates an error message. - ** - ** See also: sqlite3FindCollSeq(), sqlite3GetCollSeq() - */ - CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){ - sqlite3 *db = pParse->db; - u8 enc = ENC(db); - u8 initbusy = db->init.busy; - CollSeq *pColl; - - pColl = sqlite3FindCollSeq(db, enc, zName, initbusy); - if( !initbusy && (!pColl || !pColl->xCmp) ){ - pColl = sqlite3GetCollSeq(pParse, enc, pColl, zName); - } - - return pColl; - } - - /* ** Generate code that will increment the schema cookie. **