diff options
author | drh <drh@noemail.net> | 2013-01-01 13:55:31 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2013-01-01 13:55:31 +0000 |
commit | 384b7fe221bf460a55ae48e623de4ce15433e1f6 (patch) | |
tree | b5647c7d18890356803d5646dc188ee4485def82 /src | |
parent | 25846af3be9e648b0ecf2cd6e4dca0dc802781df (diff) | |
download | sqlite-384b7fe221bf460a55ae48e623de4ce15433e1f6.tar.gz sqlite-384b7fe221bf460a55ae48e623de4ce15433e1f6.zip |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/pragma.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/pragma.c b/src/pragma.c index 0f92769a9..7e8b59b8e 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); } } |