diff options
author | dan <dan@noemail.net> | 2020-04-30 15:49:56 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2020-04-30 15:49:56 +0000 |
commit | 1e113844fc1e0cf88ca1967bc7b9581d773ec187 (patch) | |
tree | 367a712100c3c302a784273ef977a6fa8795095a /src | |
parent | f2972b6083aef8bd57c2e1ff60d357c5b1ff7f88 (diff) | |
download | sqlite-1e113844fc1e0cf88ca1967bc7b9581d773ec187.tar.gz sqlite-1e113844fc1e0cf88ca1967bc7b9581d773ec187.zip |
Report an error if an UPDATE...FROM statement has an ORDER BY but no LIMIT clause. Add tests for multi-column primary keys.
FossilOrigin-Name: ffcdb6689123bb871c9bd8f977197f86f37c42e9094e2d4bb187ff479f74cf65
Diffstat (limited to 'src')
-rw-r--r-- | src/update.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/update.c b/src/update.c index 5d4e5ae7d..fa80a7da8 100644 --- a/src/update.c +++ b/src/update.c @@ -169,18 +169,28 @@ static void updatePopulateEphTable( Expr *pLimit ){ int i; - sqlite3 *db = pParse->db; SelectDest dest; Select *pSelect = 0; ExprList *pList = 0; - Table *pTab = pTabList->a[0].pTab; - SrcList *pSrc = sqlite3SrcListDup(db, pTabList, 0); - Expr *pWhere2 = sqlite3ExprDup(db, pWhere, 0); - Expr *pLimit2 = sqlite3ExprDup(db, pLimit, 0); - ExprList *pOrderBy2 = sqlite3ExprListDup(db, pOrderBy, 0); ExprList *pGroupBy = 0; + sqlite3 *db = pParse->db; + Table *pTab = pTabList->a[0].pTab; + SrcList *pSrc; + Expr *pWhere2; + Expr *pLimit2; + ExprList *pOrderBy2; int eDest; + if( pOrderBy && pLimit==0 ) { + sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on UPDATE"); + return; + } + + pSrc = sqlite3SrcListDup(db, pTabList, 0); + pWhere2 = sqlite3ExprDup(db, pWhere, 0); + pLimit2 = sqlite3ExprDup(db, pLimit, 0); + pOrderBy2 = sqlite3ExprListDup(db, pOrderBy, 0); + assert( pTabList->nSrc>1 ); if( pSrc ){ pSrc->a[0].iCursor = -1; |