diff options
author | drh <> | 2022-04-06 10:37:44 +0000 |
---|---|---|
committer | drh <> | 2022-04-06 10:37:44 +0000 |
commit | f8ef2dbd7be8df555ce63e8dc8edbb680d6f0e70 (patch) | |
tree | ef418de3ccb82764c5bb725710968b26665ebc11 /src/treeview.c | |
parent | 7d2c1d24b0a331590ec2c8fd53bc9bf569b54300 (diff) | |
download | sqlite-f8ef2dbd7be8df555ce63e8dc8edbb680d6f0e70.tar.gz sqlite-f8ef2dbd7be8df555ce63e8dc8edbb680d6f0e70.zip |
Add additional tree display routines for DELETE and UPDATE. No changes
to deliverable code.
FossilOrigin-Name: fbd288ff3d4ea47cd324b5952e7754a465901844f2d950f0860d4488d5b6eb9f
Diffstat (limited to 'src/treeview.c')
-rw-r--r-- | src/treeview.c | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/src/treeview.c b/src/treeview.c index a2ae32069..bb7187ee6 100644 --- a/src/treeview.c +++ b/src/treeview.c @@ -882,6 +882,54 @@ void sqlite3TreeViewUpsert( /* ** 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. */ void sqlite3TreeViewInsert( @@ -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 */ |