aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordan <dan@noemail.net>2020-04-30 15:49:56 +0000
committerdan <dan@noemail.net>2020-04-30 15:49:56 +0000
commit1e113844fc1e0cf88ca1967bc7b9581d773ec187 (patch)
tree367a712100c3c302a784273ef977a6fa8795095a /src
parentf2972b6083aef8bd57c2e1ff60d357c5b1ff7f88 (diff)
downloadsqlite-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.c22
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;