]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add to the foreign_key_check pragma an extra output column "parent" that
authordrh <drh@noemail.net>
Mon, 17 Dec 2012 20:57:15 +0000 (20:57 +0000)
committerdrh <drh@noemail.net>
Mon, 17 Dec 2012 20:57:15 +0000 (20:57 +0000)
contains the name of the parent table for the constraint that failed.

FossilOrigin-Name: 97f7f7377259ecf562019f62ebed0897cfae236e

manifest
manifest.uuid
src/pragma.c
test/fkey_malloc.test

index 7dfdfb2ad378ebc79238f31e44a6466dc57bfa69..afed8ed5855ba4b4294486aa799a55d1f9b4d789 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Enhance\sthe\serror\smessage\sfor\s"foreign\skey\smismatch"\sto\sinclude\sthe\snames\sof\nthe\schild\sand\sparent\stables.\s\sBegin\sadding\stest\scases\sfor\s\nPRAGMA\sforeign_key_check.\s\sMake\ssure\sPRAGMA\sforeign_key_check\sgets\sall\nnecessary\stable\slocks.
-D 2012-12-17T20:40:39.698
+C Add\sto\sthe\sforeign_key_check\spragma\san\sextra\soutput\scolumn\s"parent"\sthat\ncontains\sthe\sname\sof\sthe\sparent\stable\sfor\sthe\sconstraint\sthat\sfailed.
+D 2012-12-17T20:57:15.968
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 690d441a758cbffd13e814dc2724a721a6ebd400
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -168,7 +168,7 @@ F src/parse.y c2b4a6454ad77299b1443e2c483a560a9f16e724
 F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
 F src/pcache.h 1b5dcc3dc8103d03e625b177023ee67764fa6b7c
 F src/pcache1.c 9fd22671c270b35131ef480bbc00392b8b5f8ab9
-F src/pragma.c 5cc87af77dd57e037258410e0ee5a9dab51a8a5a
+F src/pragma.c c6e9ed9de9a4019cf2a049c78833b58c9a535fae
 F src/prepare.c 931ad0d852a0df48f79adcba6ce79ca5f475625c
 F src/printf.c 4a9f882f1c1787a8b494a2987765acf9d97ac21f
 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
@@ -412,7 +412,7 @@ F test/fkey1.test 01c7de578e11747e720c2d9aeef27f239853c4da
 F test/fkey2.test 5aa44e7153928a1f002803f94aaab4c76a7ceac2
 F test/fkey3.test 5ec899d12b13bcf1e9ef40eff7fb692fdb91392e
 F test/fkey4.test c6c8f9f9be885f95c85c7bceb26f243ad906fd49
-F test/fkey_malloc.test c3a12acd053c976de09036498eef09b83afa4a80
+F test/fkey_malloc.test bb74c9cb8f8fceed03b58f8a7ef2df98520bbd51
 F test/format4.test 1f0cac8ff3895e9359ed87e41aaabee982a812eb
 F test/fts-9fd058691.test 78b887e30ae6816df0e1fed6259de4b5a64ad33c
 F test/fts1a.test 46090311f85da51bb33bd5ce84f7948359c6d8d7
@@ -1025,7 +1025,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
-P 57d47423a65d183cb1efcb95b28cb143e788b953
-R 48149676f68d877f18e0c8a269ce004d
+P 0f9963526c299757ff95c153fb05a67cddb6af28
+R 09c7edec1884f69df7657ebe62d33418
 U drh
-Z 4108a840f9ef999ff91109d05e04ab7d
+Z bca5ca1c6b7b99510bae2f63ea5f8e69
index 02f0c8f087636d74c877aa1bd26d67864b8b7117..8fe083b23b4018083f47ad8303114f82a3807b1e 100644 (file)
@@ -1 +1 @@
-0f9963526c299757ff95c153fb05a67cddb6af28
\ No newline at end of file
+97f7f7377259ecf562019f62ebed0897cfae236e
\ No newline at end of file
index 60e91e6733d8832ff17203112170343b91f582aa..a34ececddbd264ad065d72d31966df505a78fa8c 100644 (file)
@@ -1132,14 +1132,15 @@ void sqlite3Pragma(
 
     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
     regResult = pParse->nMem+1;
-    pParse->nMem += 3;
+    pParse->nMem += 4;
     regKey = ++pParse->nMem;
     regRow = ++pParse->nMem;
     v = sqlite3GetVdbe(pParse);
-    sqlite3VdbeSetNumCols(v, 3);
+    sqlite3VdbeSetNumCols(v, 4);
     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "table", SQLITE_STATIC);
     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "rowid", SQLITE_STATIC);
-    sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "fkid", SQLITE_STATIC);
+    sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "parent", SQLITE_STATIC);
+    sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "fkid", SQLITE_STATIC);
     sqlite3CodeVerifySchema(pParse, iDb);
     k = sqliteHashFirst(&db->aDb[iDb].pSchema->tblHash);
     while( k ){
@@ -1211,8 +1212,10 @@ void sqlite3Pragma(
           sqlite3VdbeAddOp4Int(v, OP_Found, i, addrOk, regKey, 0);
         }
         sqlite3VdbeAddOp2(v, OP_Rowid, 0, regResult+1);
-        sqlite3VdbeAddOp2(v, OP_Integer, i-1, regResult+2);
-        sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, 3);
+        sqlite3VdbeAddOp4(v, OP_String8, 0, regResult+2, 0, 
+                          pFK->zTo, P4_TRANSIENT);
+        sqlite3VdbeAddOp2(v, OP_Integer, i-1, regResult+3);
+        sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, 4);
         sqlite3VdbeResolveLabel(v, addrOk);
       }
       sqlite3VdbeAddOp2(v, OP_Next, 0, addrTop+1);
index 4a36f5f321b08331bbf42476ec3437f37b8e246b..b4b5b4eed7d056aabbe668ad881a3e747db9bb67 100644 (file)
@@ -29,6 +29,7 @@ do_malloc_test fkey_malloc-1 -sqlprep {
   INSERT INTO t2 VALUES('aaa');
   UPDATE t1 SET a = 'bbb';
   DELETE FROM t1;
+  PRAGMA foreign_key_check;
 }
 
 do_malloc_test fkey_malloc-2 -sqlprep {
@@ -128,5 +129,3 @@ do_malloc_test fkey_malloc-7 -sqlprep {
 }
 
 finish_test
-
-