aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/delete.c10
-rw-r--r--src/fkey.c2
-rw-r--r--src/parse.y8
-rw-r--r--src/resolve.c5
-rw-r--r--src/sqliteInt.h7
-rw-r--r--src/trigger.c4
-rw-r--r--src/update.c10
7 files changed, 22 insertions, 24 deletions
diff --git a/src/delete.c b/src/delete.c
index 0d8737756..5c96fdfb8 100644
--- a/src/delete.c
+++ b/src/delete.c
@@ -224,13 +224,13 @@ Expr *sqlite3LimitWhere(
** \________/ \________________/
** pTabList pWhere
*/
-void sqlite3DeleteFromLimit(
+void sqlite3DeleteFrom(
Parse *pParse, /* The parser context */
SrcList *pTabList, /* The table from which we should delete things */
Expr *pWhere, /* The WHERE clause. May be null */
- ExprList *pOrderBy,
- Expr *pLimit,
- Expr *pOffset
+ ExprList *pOrderBy, /* ORDER BY clause. May be null */
+ Expr *pLimit, /* LIMIT clause. May be null */
+ Expr *pOffset /* OFFSET clause. May be null */
){
Vdbe *v; /* The virtual database engine */
Table *pTab; /* The table from which records will be deleted */
@@ -606,9 +606,11 @@ delete_from_cleanup:
sqlite3AuthContextPop(&sContext);
sqlite3SrcListDelete(db, pTabList);
sqlite3ExprDelete(db, pWhere);
+#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
sqlite3ExprListDelete(db, pOrderBy);
sqlite3ExprDelete(db, pLimit);
sqlite3ExprDelete(db, pOffset);
+#endif
sqlite3DbFree(db, aToOpen);
return;
}
diff --git a/src/fkey.c b/src/fkey.c
index 0012768a3..44ef3c7c7 100644
--- a/src/fkey.c
+++ b/src/fkey.c
@@ -725,7 +725,7 @@ void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTab){
}
pParse->disableTriggers = 1;
- sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0);
+ sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0, 0, 0, 0);
pParse->disableTriggers = 0;
/* If the DELETE has generated immediate foreign key constraint
diff --git a/src/parse.y b/src/parse.y
index 2a536b0a8..18f587c05 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -753,14 +753,14 @@ cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W)
orderby_opt(O) limit_opt(L). {
sqlite3WithPush(pParse, C, 1);
sqlite3SrcListIndexedBy(pParse, X, &I);
- sqlite3DeleteFromLimit(pParse,X,W,O,L.pLimit,L.pOffset);
+ sqlite3DeleteFrom(pParse,X,W,O,L.pLimit,L.pOffset);
}
%endif
%ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W). {
sqlite3WithPush(pParse, C, 1);
sqlite3SrcListIndexedBy(pParse, X, &I);
- sqlite3DeleteFrom(pParse,X,W);
+ sqlite3DeleteFrom(pParse,X,W,0,0,0);
}
%endif
@@ -778,7 +778,7 @@ cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y)
sqlite3WithPush(pParse, C, 1);
sqlite3SrcListIndexedBy(pParse, X, &I);
sqlite3ExprListCheckLength(pParse,Y,"set list");
- sqlite3UpdateLimit(pParse,X,Y,W,R,O,L.pLimit,L.pOffset);
+ sqlite3Update(pParse,X,Y,W,R,O,L.pLimit,L.pOffset);
}
%endif
%ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
@@ -787,7 +787,7 @@ cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y)
sqlite3WithPush(pParse, C, 1);
sqlite3SrcListIndexedBy(pParse, X, &I);
sqlite3ExprListCheckLength(pParse,Y,"set list");
- sqlite3Update(pParse,X,Y,W,R);
+ sqlite3Update(pParse,X,Y,W,R,0,0,0);
}
%endif
diff --git a/src/resolve.c b/src/resolve.c
index 945654ead..17dbbccfc 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -597,10 +597,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
struct SrcList_item *pItem;
assert( pSrcList && pSrcList->nSrc==1 );
pItem = pSrcList->a;
- if( !HasRowid(pItem->pTab) || pItem->pTab->pSelect!=0 ){
- sqlite3ErrorMsg(pParse, "ORDER BY and LIMIT not support for table %s",
- pItem->pTab->zName);
- }
+ assert( HasRowid(pItem->pTab) && pItem->pTab->pSelect==0 );
pExpr->op = TK_COLUMN;
pExpr->pTab = pItem->pTab;
pExpr->iTable = pItem->iCursor;
diff --git a/src/sqliteInt.h b/src/sqliteInt.h
index d3c412e22..95a66b4fe 100644
--- a/src/sqliteInt.h
+++ b/src/sqliteInt.h
@@ -3764,11 +3764,8 @@ void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
Expr *sqlite3LimitWhere(Parse*,SrcList*,Expr*,ExprList*,Expr*,Expr*,char*);
#endif
-void sqlite3DeleteFromLimit(Parse*, SrcList*, Expr*, ExprList*, Expr*, Expr*);
-#define sqlite3DeleteFrom(x,y,z) sqlite3DeleteFromLimit(x,y,z,0,0,0)
-void sqlite3UpdateLimit(Parse*, SrcList*, ExprList*, Expr*, int,
- ExprList*,Expr*,Expr*);
-#define sqlite3Update(v,w,x,y,z) sqlite3UpdateLimit(v,w,x,y,z,0,0,0)
+void sqlite3DeleteFrom(Parse*, SrcList*, Expr*, ExprList*, Expr*, Expr*);
+void sqlite3Update(Parse*, SrcList*, ExprList*,Expr*,int,ExprList*,Expr*,Expr*);
WhereInfo *sqlite3WhereBegin(Parse*,SrcList*,Expr*,ExprList*,ExprList*,u16,int);
void sqlite3WhereEnd(WhereInfo*);
LogEst sqlite3WhereOutputRowCount(WhereInfo*);
diff --git a/src/trigger.c b/src/trigger.c
index 2a4fdd8ed..a17769ae9 100644
--- a/src/trigger.c
+++ b/src/trigger.c
@@ -711,7 +711,7 @@ static int codeTriggerProgram(
targetSrcList(pParse, pStep),
sqlite3ExprListDup(db, pStep->pExprList, 0),
sqlite3ExprDup(db, pStep->pWhere, 0),
- pParse->eOrconf
+ pParse->eOrconf, 0, 0, 0
);
break;
}
@@ -727,7 +727,7 @@ static int codeTriggerProgram(
case TK_DELETE: {
sqlite3DeleteFrom(pParse,
targetSrcList(pParse, pStep),
- sqlite3ExprDup(db, pStep->pWhere, 0)
+ sqlite3ExprDup(db, pStep->pWhere, 0), 0, 0, 0
);
break;
}
diff --git a/src/update.c b/src/update.c
index f63a9ffe8..4cfa4019e 100644
--- a/src/update.c
+++ b/src/update.c
@@ -86,15 +86,15 @@ void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){
** \_______/ \________/ \______/ \________________/
* onError pTabList pChanges pWhere
*/
-void sqlite3UpdateLimit(
+void sqlite3Update(
Parse *pParse, /* The parser context */
SrcList *pTabList, /* The table in which we should change things */
ExprList *pChanges, /* Things to be changed */
Expr *pWhere, /* The WHERE clause. May be null */
int onError, /* How to handle constraint errors */
- ExprList *pOrderBy,
- Expr *pLimit,
- Expr *pOffset
+ ExprList *pOrderBy, /* ORDER BY clause. May be null */
+ Expr *pLimit, /* LIMIT clause. May be null */
+ Expr *pOffset /* OFFSET clause. May be null */
){
int i, j; /* Loop counters */
Table *pTab; /* The table to be updated */
@@ -745,9 +745,11 @@ update_cleanup:
sqlite3SrcListDelete(db, pTabList);
sqlite3ExprListDelete(db, pChanges);
sqlite3ExprDelete(db, pWhere);
+#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
sqlite3ExprListDelete(db, pOrderBy);
sqlite3ExprDelete(db, pLimit);
sqlite3ExprDelete(db, pOffset);
+#endif
return;
}
/* Make sure "isView" and other macros defined above are undefined. Otherwise