1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-12 13:01:09 +03:00

Add additional tree display routines for DELETE and UPDATE. No changes

to deliverable code.

FossilOrigin-Name: fbd288ff3d4ea47cd324b5952e7754a465901844f2d950f0860d4488d5b6eb9f
This commit is contained in:
drh
2022-04-06 10:37:44 +00:00
parent 7d2c1d24b0
commit f8ef2dbd7b
7 changed files with 148 additions and 12 deletions

View File

@@ -880,6 +880,54 @@ void sqlite3TreeViewUpsert(
sqlite3TreeViewPop(pView);
}
/*
** Generate a human-readable diagram of the data structure that go
** into generating an DELETE statement.
*/
void sqlite3TreeViewDelete(
TreeView *pView,
const With *pWith,
const SrcList *pTabList,
const Expr *pWhere,
const ExprList *pOrderBy,
const Expr *pLimit
){
int n = 0;
sqlite3TreeViewLine(pView, "DELETE");
pView = sqlite3TreeViewPush(pView, 0);
if( pWith ) n++;
if( pTabList ) n++;
if( pWhere ) n++;
if( pOrderBy ) n++;
if( pLimit ) n++;
if( pWith ){
pView = sqlite3TreeViewPush(pView, (--n)>0);
sqlite3TreeViewWith(pView, pWith, 0);
sqlite3TreeViewPop(pView);
}
if( pTabList ){
pView = sqlite3TreeViewPush(pView, (--n)>0);
sqlite3TreeViewLine(pView, "FROM");
sqlite3TreeViewSrcList(pView, pTabList);
sqlite3TreeViewPop(pView);
}
if( pWhere ){
pView = sqlite3TreeViewPush(pView, (--n)>0);
sqlite3TreeViewLine(pView, "WHERE");
sqlite3TreeViewExpr(pView, pWhere, 0);
sqlite3TreeViewPop(pView);
}
if( pOrderBy ){
sqlite3TreeViewExprList(pView, pOrderBy, (--n)>0, "ORDER-BY");
}
if( pLimit ){
pView = sqlite3TreeViewPush(pView, (--n)>0);
sqlite3TreeViewLine(pView, "LIMIT");
sqlite3TreeViewExpr(pView, pLimit, 0);
sqlite3TreeViewPop(pView);
}
}
/*
** Generate a human-readable diagram of the data structure that go
** into generating an INSERT statement.
@@ -937,4 +985,74 @@ void sqlite3TreeViewInsert(
}
}
/*
** Generate a human-readable diagram of the data structure that go
** into generating an UPDATE statement.
*/
void sqlite3TreeViewUpdate(
TreeView *pView,
const With *pWith,
const SrcList *pTabList,
const ExprList *pChanges,
const Expr *pWhere,
int onError,
const ExprList *pOrderBy,
const Expr *pLimit,
const Upsert *pUpsert
){
int n = 0;
const char *zLabel = "UPDATE";
switch( onError ){
case OE_Replace: zLabel = "UPDATE OR REPLACE"; break;
case OE_Ignore: zLabel = "UPDATE OR IGNORE"; break;
case OE_Rollback: zLabel = "UPDATE OR ROLLBACK"; break;
case OE_Abort: zLabel = "UPDATE OR ABORT"; break;
case OE_Fail: zLabel = "UPDATE OR FAIL"; break;
}
sqlite3TreeViewLine(pView, zLabel);
pView = sqlite3TreeViewPush(pView, 0);
if( pWith ) n++;
if( pTabList ) n++;
if( pChanges ) n++;
if( pWhere ) n++;
if( pOrderBy ) n++;
if( pLimit ) n++;
if( pUpsert ) n++;
if( pWith ){
pView = sqlite3TreeViewPush(pView, (--n)>0);
sqlite3TreeViewWith(pView, pWith, 0);
sqlite3TreeViewPop(pView);
}
if( pTabList ){
pView = sqlite3TreeViewPush(pView, (--n)>0);
sqlite3TreeViewLine(pView, "FROM");
sqlite3TreeViewSrcList(pView, pTabList);
sqlite3TreeViewPop(pView);
}
if( pChanges ){
sqlite3TreeViewExprList(pView, pChanges, (--n)>0, "SET");
}
if( pWhere ){
pView = sqlite3TreeViewPush(pView, (--n)>0);
sqlite3TreeViewLine(pView, "WHERE");
sqlite3TreeViewExpr(pView, pWhere, 0);
sqlite3TreeViewPop(pView);
}
if( pOrderBy ){
sqlite3TreeViewExprList(pView, pOrderBy, (--n)>0, "ORDER-BY");
}
if( pLimit ){
pView = sqlite3TreeViewPush(pView, (--n)>0);
sqlite3TreeViewLine(pView, "LIMIT");
sqlite3TreeViewExpr(pView, pLimit, 0);
sqlite3TreeViewPop(pView);
}
if( pUpsert ){
pView = sqlite3TreeViewPush(pView, (--n)>0);
sqlite3TreeViewLine(pView, "UPSERT");
sqlite3TreeViewUpsert(pView, pUpsert, 0);
sqlite3TreeViewPop(pView);
}
}
#endif /* SQLITE_DEBUG */