]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
(no comment)
authordan <dan@noemail.net>
Wed, 15 Aug 2018 20:28:39 +0000 (20:28 +0000)
committerdan <dan@noemail.net>
Wed, 15 Aug 2018 20:28:39 +0000 (20:28 +0000)
FossilOrigin-Name: e272dc2b1c0edab59a40f32c77c81a3e636937280524161eff5669cb0046ad84

manifest
manifest.uuid
src/alter.c
src/expr.c
src/parse.y
src/sqliteInt.h
src/trigger.c
test/altercol.test

index 0c22ccf95e8c7b18fbf00d53a454fa8ca4aedf99..071c01ee2b2b7e6f124f707ae802d7a37c75662a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sproblem\swhen\srenaming\san\sIPK\scolumn\sthat\sis\salso\spart\sof\sa\schild\skey.
-D 2018-08-14T21:05:35.866
+C (no\scomment)
+D 2018-08-15T20:28:39.044
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 0a3a6c81e6fcb969ff9106e882f0a08547014ba463cb6beca4c4efaecc924ee6
@@ -432,7 +432,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca
 F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
 F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
-F src/alter.c e1f3a71924a5248fb105baba9b9099b2187c20ebf5af5cb0992cc271b22def46
+F src/alter.c 1452a35d1660b0c9786f93d6e5e6db3fe28ef6ec5bbeb1f51d116ac984f65cab
 F src/analyze.c 3dc6b98cf007b005af89df165c966baaa48e8124f38c87b4d2b276fe7f0b9eb9
 F src/attach.c 4bd5b92633671d3e8ce431153ebb1893b50335818423b5373f3f27969f79769a
 F src/auth.c 32a5bbe3b755169ab6c66311c5225a3cd4f75a46c041f7fb117e0cbb68055114
@@ -450,7 +450,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957
 F src/dbpage.c 4aa7f26198934dbd002e69418220eae3dbc71b010bbac32bd78faf86b52ce6c3
 F src/dbstat.c edabb82611143727511a45ca0859b8cd037851ebe756ae3db289859dd18b6f91
 F src/delete.c 107e28d3ef8bd72fd11953374ca9107cd74e8b09c3ded076a6048742d26ce7d2
-F src/expr.c 4a555ff68084360c133c5b9d985ae05d2cf914125d4c8e5614496dc071d318dd
+F src/expr.c 4c1e40cdb1717b42e848835caf3e2b881f748cdcfabe3498e83634d1d2db5e26
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c f59253c0be4b1e9dfcb073b6d6d6ab83090ae50c08b5c113b76013c4b157cd6a
 F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f
@@ -487,7 +487,7 @@ F src/os_win.c 070cdbb400097c6cda54aa005356095afdc2f3ee691d17192c54724ef146a971
 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
 F src/pager.c 76d29b8a960dcb8b67210f095899d91e4a90673a6674ea58cfd1115b705a7fb9
 F src/pager.h c571b064df842ec8f2e90855dead9acf4cbe0d1b2c05afe0ef0d0145f7fd0388
-F src/parse.y 1cdfb5179649b0cde2459d0e76b5acb7007bb10f4744ae804b2326ed98c52060
+F src/parse.y 57f533353a4945370a60f66aa7be284c8a627509baa02d707982f906e4851f7d
 F src/pcache.c 135ef0bc6fb2e3b7178d49ab5c9176254c8a691832c1bceb1156b2fbdd0869bd
 F src/pcache.h 072f94d29281cffd99e46c1539849f248c4b56ae7684c1f36626797fee375170
 F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880
@@ -503,7 +503,7 @@ F src/shell.c.in 6e0aad854be738a5d0368940459399be211e9ac43aebe92bb9ed46cfe38d0e1
 F src/sqlite.h.in c6451bb876adced3aba5b1682c6317d215c5eceaba21a6ce979e71a0b8d0bf95
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 9887b27e69c01e79c2cbe74ef73bf01af5b5703d6a7f0a4371e386d7249cb1c7
-F src/sqliteInt.h c3bca346f053c0d2fe08f0813b0521597bbab11ff8195348372005606c309f84
+F src/sqliteInt.h 78e9b483adbdf928923a175f2c8470da89024b973b4b790486b6e8736b4c876f
 F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b
 F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e
 F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
@@ -563,7 +563,7 @@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
 F src/tokenize.c fe35cb947ec54fe9a96895359b777a9305356c2f3c2917a1d83a57603108e66c
 F src/treeview.c e7a7f90552bb418533cdd0309b5eb71d4effa50165b880fc8c2001e613577e5f
-F src/trigger.c f3ba315cd590a3db88fdfd259c8084e567746f6e0614efb3c806b205d7122276
+F src/trigger.c f6760d78be400164c95732b4aabccab27072ec66e9db2ee33baf70e65e467af0
 F src/update.c 345ce35eb1332eb4829857aa8b1f65a614b07dae91d0346c0dc2baacafbcc51b
 F src/upsert.c 47edd408cc73f8d3c00a140550d1ad180b407c146285947969dd09874802bf88
 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5
@@ -599,7 +599,7 @@ F test/alter.test b820ab9dcf85f8e3a65bc8326accb2f0c7be64ef
 F test/alter2.test 7ea05c7d92ac99349a802ef7ada17294dd647060
 F test/alter3.test 4d79934d812eaeacc6f22781a080f8cfe012fdc3
 F test/alter4.test b6d7b86860111864f6cddb54af313f5862dda23b
-F test/altercol.test a0b57120e68c7aedad302fd9fd515d7c69c7d3547eccc95a846351dc55296981
+F test/altercol.test c57633752895b10b2ca488de648b415e95c45272f37e05e4ad110f7b787c83eb
 F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc
 F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
 F test/analyze.test b3a9c67d00e1df7588a5b7be9a0292899f94fe8cac1f94a017277474ca2e59df
@@ -1756,7 +1756,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 7a45802dafaed3c058f59d1487fe8091e1f309cc5f0a5bcf2579f0bdd8e92d89 ad15486022209205c65fb5ffdbe30a7b99379170451e6aff4bab6e90b549d6c7
-R 1d8b409ed4f5c3f244c9277896b51070
+P 6e6a2bfdbbfd4ffc14be88962ff97bf3c626fef9d1a337715d2a4be1a657fb0d
+R 50934f42996c56e5e11553d2ba6b9958
 U dan
-Z 642c2e3d8e8cc78036c1fba818a3d8b0
+Z 5c4bbda1010d90157de824a7c5d29ecd
index 0249abf0f9cfa3455839c3bd5b34c4a7a35f0260..98b330ff905ed1a2ffa36c4a7f68a34484f3baca 100644 (file)
@@ -1 +1 @@
-6e6a2bfdbbfd4ffc14be88962ff97bf3c626fef9d1a337715d2a4be1a657fb0d
\ No newline at end of file
+e272dc2b1c0edab59a40f32c77c81a3e636937280524161eff5669cb0046ad84
\ No newline at end of file
index 89be503fc11896b2d3c85692bdf93b49fcf8ee46..c0696400f500043b489292613a815efb7e4730de 100644 (file)
@@ -982,6 +982,10 @@ static int renameColumnSelectCb(Walker *pWalker, Select *p){
 */
 static int renameColumnExprCb(Walker *pWalker, Expr *pExpr){
   RenameCtx *p = pWalker->u.pRename;
+  if( pExpr->op==TK_TRIGGER && pExpr->iColumn==p->iCol ){
+    renameTokenFind(pWalker->pParse, p, (void*)pExpr);
+  }else
+
   if( p->zOld && pExpr->op==TK_DOT ){
     Expr *pLeft = pExpr->pLeft;
     Expr *pRight = pExpr->pRight;
@@ -1145,7 +1149,7 @@ static void renameColumnFunc(
       if( rc==SQLITE_OK ){
         sqlite3WalkSelect(&sWalker, pSelect);
       }else if( rc==SQLITE_ERROR ){
-        /* Failed to resolve all symboles in the view. This is not an 
+        /* Failed to resolve all symbols in the view. This is not an 
         ** error, but it will not be edited. */
         sqlite3DbFree(db, sParse.zErrMsg);
         sParse.zErrMsg = 0;
@@ -1187,9 +1191,69 @@ static void renameColumnFunc(
     sqlite3WalkExprList(&sWalker, sParse.pNewIndex->aColExpr);
     sqlite3WalkExpr(&sWalker, sParse.pNewIndex->pPartIdxWhere);
   }else{
-    sCtx.zOld = zOld;
-    sqlite3WalkExpr(&sWalker, sParse.pNewTrigger->pWhen);
-    if( sParse.pNewTrigger->pColumns ){
+    /* A trigger */
+    TriggerStep *pStep;
+    NameContext sNC;
+    memset(&sNC, 0, sizeof(sNC));
+    sNC.pParse = &sParse;
+    sParse.pTriggerTab = pTab;
+    sParse.eTriggerOp = sParse.pNewTrigger->op;
+
+      /* Resolve symbols in WHEN clause */
+    if( sParse.pTriggerTab==pTab && sParse.pNewTrigger->pWhen ){
+      rc = sqlite3ResolveExprNames(&sNC, sParse.pNewTrigger->pWhen);
+    }
+
+    for(pStep=sParse.pNewTrigger->step_list; 
+        rc==SQLITE_OK && pStep; 
+        pStep=pStep->pNext
+    ){
+      if( pStep->pSelect ) sqlite3SelectPrep(&sParse, pStep->pSelect, &sNC);
+      if( pStep->zTarget ){ 
+        Table *pTarget = sqlite3FindTable(db, pStep->zTarget, zDb);
+        if( pTarget==0 ){
+          rc = SQLITE_ERROR;
+        }else{
+          SrcList sSrc;
+          memset(&sSrc, 0, sizeof(sSrc));
+          sSrc.nSrc = 1;
+          sSrc.a[0].zName = pStep->zTarget;
+          sSrc.a[0].pTab = pTarget;
+          sNC.pSrcList = &sSrc;
+          if( pStep->pWhere ){
+            rc = sqlite3ResolveExprNames(&sNC, pStep->pWhere);
+          }
+          if( rc==SQLITE_OK ){
+            rc = sqlite3ResolveExprListNames(&sNC, pStep->pExprList);
+          }
+
+          if( rc==SQLITE_OK && pTarget==pTab ){
+            if( pStep->pIdList ){
+              for(i=0; i<pStep->pIdList->nId; i++){
+                char *zName = pStep->pIdList->a[i].zName;
+                if( 0==sqlite3_stricmp(zName, zOld) ){
+                  renameTokenFind(&sParse, &sCtx, (void*)zName);
+                }
+              }
+            }
+            if( pStep->op==TK_UPDATE ){
+              assert( pStep->pExprList );
+              for(i=0; i<pStep->pExprList->nExpr; i++){
+                char *zName = pStep->pExprList->a[i].zName;
+                if( 0==sqlite3_stricmp(zName, zOld) ){
+                  renameTokenFind(&sParse, &sCtx, (void*)zName);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+
+    if( rc!=SQLITE_OK ) goto renameColumnFunc_done;
+
+    /* Find tokens to edit in UPDATE OF clause */
+    if( sParse.pTriggerTab==pTab && sParse.pNewTrigger->pColumns ){
       for(i=0; i<sParse.pNewTrigger->pColumns->nId; i++){
         char *zName = sParse.pNewTrigger->pColumns->a[i].zName;
         if( 0==sqlite3_stricmp(zName, zOld) ){
@@ -1197,6 +1261,16 @@ static void renameColumnFunc(
         }
       }
     }
+
+    /* Find tokens to edit in WHEN clause */
+    sqlite3WalkExpr(&sWalker, sParse.pNewTrigger->pWhen);
+
+    /* Find tokens to edit in trigger steps */
+    for(pStep=sParse.pNewTrigger->step_list; pStep; pStep=pStep->pNext){
+      sqlite3WalkSelect(&sWalker, pStep->pSelect);
+      sqlite3WalkExpr(&sWalker, pStep->pWhere);
+      sqlite3WalkExprList(&sWalker, pStep->pExprList);
+    }
   }
 
   assert( rc==SQLITE_OK );
index 769d198c22f5f03a55fbf8f5a95e6628bc885a17..e9b63cba8353eeaca16267206f4613f7471bdf15 100644 (file)
@@ -1666,6 +1666,9 @@ void sqlite3ExprListSetName(
     assert( pItem->zName==0 );
     pItem->zName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n);
     if( dequote ) sqlite3Dequote(pItem->zName);
+    if( IN_RENAME_COLUMN ){
+      sqlite3RenameToken(pParse, (void*)pItem->zName, pName);
+    }
   }
 }
 
index 76e966a4dacec731cd48330eba289f2e93f233c5..50bbd0207f8737e7daa204afd6edba2d4fb1f66b 100644 (file)
@@ -1451,16 +1451,16 @@ tridxby ::= NOT INDEXED. {
 // UPDATE 
 trigger_cmd(A) ::=
    UPDATE(B) orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z) scanpt(E).  
-   {A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R, B.z, E);}
+   {A = sqlite3TriggerUpdateStep(pParse, &X, Y, Z, R, B.z, E);}
 
 // INSERT
 trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO
                       trnm(X) idlist_opt(F) select(S) upsert(U) scanpt(Z). {
-   A = sqlite3TriggerInsertStep(pParse->db,&X,F,S,R,U,B,Z);/*A-overwrites-R*/
+   A = sqlite3TriggerInsertStep(pParse,&X,F,S,R,U,B,Z);/*A-overwrites-R*/
 }
 // DELETE
 trigger_cmd(A) ::= DELETE(B) FROM trnm(X) tridxby where_opt(Y) scanpt(E).
-   {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y, B.z, E);}
+   {A = sqlite3TriggerDeleteStep(pParse, &X, Y, B.z, E);}
 
 // SELECT
 trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E).
index f2e6121de8919b4673c011c36b4e14faef6b0e22..9158a4ca36c9506afa598c94156c6d28b3c7f5bc 100644 (file)
@@ -4049,12 +4049,12 @@ void sqlite3MaterializeView(Parse*, Table*, Expr*, ExprList*,Expr*,int);
   void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*);
   TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*,
                                         const char*,const char*);
-  TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*,
+  TriggerStep *sqlite3TriggerInsertStep(Parse*,Token*, IdList*,
                                         Select*,u8,Upsert*,
                                         const char*,const char*);
-  TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8,
+  TriggerStep *sqlite3TriggerUpdateStep(Parse*,Token*,ExprList*, Expr*, u8,
                                         const char*,const char*);
-  TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*,
+  TriggerStep *sqlite3TriggerDeleteStep(Parse*,Token*, Expr*,
                                         const char*,const char*);
   void sqlite3DeleteTrigger(sqlite3*, Trigger*);
   void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*);
index 1df88fd809255d73a442e62d96327876b1fa20d2..330e14ea72236bd1197f034120d98126e3758cb7 100644 (file)
@@ -428,7 +428,7 @@ static TriggerStep *triggerStepAllocate(
 ** body of a trigger.
 */
 TriggerStep *sqlite3TriggerInsertStep(
-  sqlite3 *db,        /* The database connection */
+  Parse *pParse,      /* Parser */
   Token *pTableName,  /* Name of the table into which we insert */
   IdList *pColumn,    /* List of columns in pTableName to insert into */
   Select *pSelect,    /* A SELECT statement that supplies values */
@@ -437,13 +437,19 @@ TriggerStep *sqlite3TriggerInsertStep(
   const char *zStart, /* Start of SQL text */
   const char *zEnd    /* End of SQL text */
 ){
+  sqlite3 *db = pParse->db;
   TriggerStep *pTriggerStep;
 
   assert(pSelect != 0 || db->mallocFailed);
 
   pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName, zStart, zEnd);
   if( pTriggerStep ){
-    pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
+    if( IN_RENAME_COLUMN ){
+      pTriggerStep->pSelect = pSelect;
+      pSelect = 0;
+    }else{
+      pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
+    }
     pTriggerStep->pIdList = pColumn;
     pTriggerStep->pUpsert = pUpsert;
     pTriggerStep->orconf = orconf;
@@ -464,7 +470,7 @@ TriggerStep *sqlite3TriggerInsertStep(
 ** sees an UPDATE statement inside the body of a CREATE TRIGGER.
 */
 TriggerStep *sqlite3TriggerUpdateStep(
-  sqlite3 *db,         /* The database connection */
+  Parse *pParse,          /* Parser */
   Token *pTableName,   /* Name of the table to be updated */
   ExprList *pEList,    /* The SET clause: list of column and new values */
   Expr *pWhere,        /* The WHERE clause */
@@ -472,12 +478,20 @@ TriggerStep *sqlite3TriggerUpdateStep(
   const char *zStart,  /* Start of SQL text */
   const char *zEnd     /* End of SQL text */
 ){
+  sqlite3 *db = pParse->db;
   TriggerStep *pTriggerStep;
 
   pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName, zStart, zEnd);
   if( pTriggerStep ){
-    pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
-    pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
+    if( IN_RENAME_COLUMN ){
+      pTriggerStep->pExprList = pEList;
+      pTriggerStep->pWhere = pWhere;
+      pEList = 0;
+      pWhere = 0;
+    }else{
+      pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
+      pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
+    }
     pTriggerStep->orconf = orconf;
   }
   sqlite3ExprListDelete(db, pEList);
@@ -491,17 +505,23 @@ TriggerStep *sqlite3TriggerUpdateStep(
 ** sees a DELETE statement inside the body of a CREATE TRIGGER.
 */
 TriggerStep *sqlite3TriggerDeleteStep(
-  sqlite3 *db,            /* Database connection */
+  Parse *pParse,          /* Parser */
   Token *pTableName,      /* The table from which rows are deleted */
   Expr *pWhere,           /* The WHERE clause */
   const char *zStart,     /* Start of SQL text */
   const char *zEnd        /* End of SQL text */
 ){
+  sqlite3 *db = pParse->db;
   TriggerStep *pTriggerStep;
 
   pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName, zStart, zEnd);
   if( pTriggerStep ){
-    pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
+    if( IN_RENAME_COLUMN ){
+      pTriggerStep->pWhere = pWhere;
+      pWhere = 0;
+    }else{
+      pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
+    }
     pTriggerStep->orconf = OE_Default;
   }
   sqlite3ExprDelete(db, pWhere);
index f6ead99244e8b5b67f056a12f8164e9c316f3d60..d5fc8f150554c21e94b871c0925f9e9166dd6b8d 100644 (file)
@@ -125,25 +125,35 @@ do_execsql_test -db db2 2.3 { SELECT biglongname FROM t3 }
 do_execsql_test 3.0 {
   CREATE TABLE t4(x, y, z);
   CREATE TRIGGER ttt AFTER INSERT ON t4 WHEN new.y<0 BEGIN
-    SELECT 1, 2, 3, 4;
+    SELECT x, y, z FROM t4;
+    DELETE FROM t4 WHERE y=32;
+    UPDATE t4 SET x=y+1, y=0 WHERE y=32;
+    INSERT INTO t4(x, y, z) SELECT 4, 5, 6 WHERE 0;
   END;
   INSERT INTO t4 VALUES(3, 2, 1);
 }
 
+breakpoint
 do_execsql_test 3.1 {
   ALTER TABLE t4 RENAME y TO abc;
   SELECT sql FROM sqlite_master WHERE name='t4';
 } {{CREATE TABLE t4(x, abc, z)}}
 
-db close
-sqlite3 db test.db
-
 do_execsql_test 3.2 {
   SELECT * FROM t4;
 } {3 2 1}
 
 do_execsql_test 3.3 { INSERT INTO t4 VALUES(6, 5, 4); } {}
 
+do_execsql_test 3.4 { SELECT sql FROM sqlite_master WHERE type='trigger' } {
+{CREATE TRIGGER ttt AFTER INSERT ON t4 WHEN new.abc<0 BEGIN
+    SELECT x, abc, z FROM t4;
+    DELETE FROM t4 WHERE abc=32;
+    UPDATE t4 SET x=abc+1, abc=0 WHERE abc=32;
+    INSERT INTO t4(x, abc, z) SELECT 4, 5, 6 WHERE 0;
+  END}
+}
+
 #-------------------------------------------------------------------------
 #
 do_execsql_test 4.0 {
@@ -233,17 +243,17 @@ do_execsql_test 7.0 {
   END;
 }
 
-do_execsql_test 7.1 {
+do_execsql_test 7.1.1 {
   INSERT INTO t6 VALUES(0, 0, 0);
   UPDATE t6 SET "col c" = 1;
   SELECT * FROM c;
 } {1}
 
-do_execsql_test 7.2 {
+do_execsql_test 7.1.2 {
   ALTER TABLE t6 RENAME "col c" TO "col 3";
 }
 
-do_execsql_test 7.3 {
+do_execsql_test 7.1.3 {
   UPDATE t6 SET "col 3" = 0;
   SELECT * FROM c;
 } {2}