From: drh Date: Tue, 1 Jan 2013 13:55:31 +0000 (+0000) Subject: Enhance the table_info pragma so that the pk column shows the order of the X-Git-Tag: version-3.7.16~89 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=384b7fe221bf460a55ae48e623de4ce15433e1f6;p=thirdparty%2Fsqlite.git Enhance the table_info pragma so that the pk column shows the order of the columns in a multi-column primary key. FossilOrigin-Name: 3076a89015071e9b40e728bd55160e3a6ed98820 --- diff --git a/manifest b/manifest index 6dbf08a9e1..eafc99d925 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C More\stest\scases\sfor\sthe\sREGEXP\soperator.\s\sFix\sminor\sbugs\suncovered\sby\sthese\ntest\scases. -D 2012-12-31T20:16:35.189 +C Enhance\sthe\stable_info\spragma\sso\sthat\sthe\spk\scolumn\sshows\sthe\sorder\sof\sthe\ncolumns\sin\sa\smulti-column\sprimary\skey. +D 2013-01-01T13:55:31.529 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in a48faa9e7dd7d556d84f5456eabe5825dd8a6282 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -168,7 +168,7 @@ F src/parse.y 5d5e12772845805fdfeb889163516b84fbb9ae95 F src/pcache.c f8043b433a57aba85384a531e3937a804432a346 F src/pcache.h 1b5dcc3dc8103d03e625b177023ee67764fa6b7c F src/pcache1.c 9fd22671c270b35131ef480bbc00392b8b5f8ab9 -F src/pragma.c 1ff115f620d9496fe5018306b644ab9ef7e26a3c +F src/pragma.c 8907c559d3127729d3bcedb1fe5c59fc196d3a17 F src/prepare.c 931ad0d852a0df48f79adcba6ce79ca5f475625c F src/printf.c 4a9f882f1c1787a8b494a2987765acf9d97ac21f F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 @@ -654,7 +654,7 @@ F test/pagesize.test 1dd51367e752e742f58e861e65ed7390603827a0 F test/pcache.test 065aa286e722ab24f2e51792c1f093bf60656b16 F test/pcache2.test a83efe2dec0d392f814bfc998def1d1833942025 F test/permutations.test 360b92859c0af814b3fe10b68746936389606501 -F test/pragma.test a62f73293b0f0d79b0c87f8dd32d46fe53b0bd17 +F test/pragma.test 5ce333cae37d86cfe9b3add840906e375e2272b0 F test/pragma2.test 3a55f82b954242c642f8342b17dffc8b47472947 F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552 F test/progress.test 5b075c3c790c7b2a61419bc199db87aaf48b8301 @@ -1030,7 +1030,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 46c8c01b751c1ea7fc02cc35e3b5bb99dbe46c4b -R 6e56302eb044cc0fb37d40997bea4520 +P a611c75061c8e821cb266fcb09759100d4a646b0 +R e68c4dd2b29a4a981e4da04205873c7d U drh -Z d62b4f1d3e09d5165b99ff6799092c00 +Z 9a369736ae7dc5da841cecf2065e7d10 diff --git a/manifest.uuid b/manifest.uuid index 90255ae0e2..59765437da 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a611c75061c8e821cb266fcb09759100d4a646b0 \ No newline at end of file +3076a89015071e9b40e728bd55160e3a6ed98820 \ No newline at end of file diff --git a/src/pragma.c b/src/pragma.c index 0f92769a9f..7e8b59b8e4 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -948,9 +948,11 @@ void sqlite3Pragma( if( sqlite3ReadSchema(pParse) ) goto pragma_out; pTab = sqlite3FindTable(db, zRight, zDb); if( pTab ){ - int i; + int i, k; int nHidden = 0; Column *pCol; + Index *pPk; + for(pPk=pTab->pIndex; pPk && pPk->autoIndex!=2; pPk=pPk->pNext){} sqlite3VdbeSetNumCols(v, 6); pParse->nMem = 6; sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cid", SQLITE_STATIC); @@ -975,8 +977,14 @@ void sqlite3Pragma( }else{ sqlite3VdbeAddOp2(v, OP_Null, 0, 5); } - sqlite3VdbeAddOp2(v, OP_Integer, - (pCol->colFlags&COLFLAG_PRIMKEY)!=0, 6); + if( (pCol->colFlags & COLFLAG_PRIMKEY)==0 ){ + k = 0; + }else if( pPk==0 ){ + k = 1; + }else{ + for(k=1; ALWAYS(k<=pTab->nCol) && pPk->aiColumn[k-1]!=i; k++){} + } + sqlite3VdbeAddOp2(v, OP_Integer, k, 6); sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 6); } } diff --git a/test/pragma.test b/test/pragma.test index 3c8d23a1fc..db6271c033 100644 --- a/test/pragma.test +++ b/test/pragma.test @@ -534,12 +534,20 @@ do_test pragma-6.2.2 { b DEFAULT (5+3), c TEXT, d INTEGER DEFAULT NULL, - e TEXT DEFAULT '' + e TEXT DEFAULT '', + UNIQUE(b,c,d), + PRIMARY KEY(e,b,c) ); PRAGMA table_info(t5); } -} {0 a TEXT 0 CURRENT_TIMESTAMP 0 1 b {} 0 5+3 0 2 c TEXT 0 <> 0 3 d INTEGER 0 NULL 0 4 e TEXT 0 '' 0} +} {0 a TEXT 0 CURRENT_TIMESTAMP 0 1 b {} 0 5+3 2 2 c TEXT 0 <> 3 3 d INTEGER 0 NULL 0 4 e TEXT 0 '' 1} db nullvalue {} +do_test pragma-6.2.3 { + execsql { + CREATE TABLE t2_3(a,b INTEGER PRIMARY KEY,c); + pragma table_info(t2_3) + } +} {0 a {} 0 {} 0 1 b INTEGER 0 {} 1 2 c {} 0 {} 0} ifcapable {foreignkey} { do_test pragma-6.3.1 { execsql { @@ -1619,5 +1627,3 @@ do_test 22.4.3 { } {ok} finish_test - -