1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-15 11:41:13 +03:00

Change 'pragma foreign_key_list' to return some extra information. (CVS 5795)

FossilOrigin-Name: 3bb33cf59da49f13201c0226e964cda067a4e780
This commit is contained in:
danielk1977
2008-10-10 17:47:21 +00:00
parent 1b67f3caf2
commit 50af3e1d2d
6 changed files with 72 additions and 21 deletions

View File

@@ -11,7 +11,7 @@
*************************************************************************
** This file contains code used to implement the PRAGMA command.
**
** $Id: pragma.c,v 1.188 2008/09/26 21:08:08 drh Exp $
** $Id: pragma.c,v 1.189 2008/10/10 17:47:21 danielk1977 Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
@@ -221,6 +221,16 @@ static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){
}
#endif /* SQLITE_OMIT_FLAG_PRAGMAS */
static const char *actionName(u8 action){
switch( action ){
case OE_SetNull: return "SET NULL";
case OE_SetDflt: return "SET DEFAULT";
case OE_Restrict: return "RESTRICT";
case OE_Cascade: return "CASCADE";
}
return "";
}
/*
** Process a pragma statement.
**
@@ -873,24 +883,32 @@ void sqlite3Pragma(
pFK = pTab->pFKey;
if( pFK ){
int i = 0;
sqlite3VdbeSetNumCols(v, 5);
pParse->nMem = 5;
sqlite3VdbeSetNumCols(v, 8);
pParse->nMem = 8;
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "id", P4_STATIC);
sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "seq", P4_STATIC);
sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "table", P4_STATIC);
sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "from", P4_STATIC);
sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "to", P4_STATIC);
sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "on_update", P4_STATIC);
sqlite3VdbeSetColName(v, 6, COLNAME_NAME, "on_delete", P4_STATIC);
sqlite3VdbeSetColName(v, 7, COLNAME_NAME, "match", P4_STATIC);
while(pFK){
int j;
for(j=0; j<pFK->nCol; j++){
char *zCol = pFK->aCol[j].zCol;
char *zOnUpdate = (char *)actionName(pFK->updateConf);
char *zOnDelete = (char *)actionName(pFK->deleteConf);
sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
sqlite3VdbeAddOp2(v, OP_Integer, j, 2);
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pFK->zTo, 0);
sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0,
pTab->aCol[pFK->aCol[j].iFrom].zName, 0);
sqlite3VdbeAddOp4(v, zCol ? OP_String8 : OP_Null, 0, 5, 0, zCol, 0);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 5);
sqlite3VdbeAddOp4(v, OP_String8, 0, 6, 0, zOnUpdate, 0);
sqlite3VdbeAddOp4(v, OP_String8, 0, 7, 0, zOnDelete, 0);
sqlite3VdbeAddOp4(v, OP_String8, 0, 8, 0, "NONE", 0);
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 8);
}
++i;
pFK = pFK->pNextFrom;