1--- sqlite3.c.orig 2013-09-04 00:26:22.000000000 +0200 2+++ sqlite3.c 2013-11-09 12:39:57.315522927 +0100 3@@ -94739,6 +94739,60 @@ 4 5 #ifndef SQLITE_OMIT_SCHEMA_PRAGMAS 6 /* 7+ ** PRAGMA proc_list 8+ ** 9+ ** Return a single row for each procedure, the returned data set are: 10+ ** 11+ ** name: Procedure name 12+ ** is_aggregate: True is procedure is an aggregate 13+ ** nargs: Number of arguments of the procedure, or -1 if unlimited 14+ ** spe_name: Specific name (unique procedure name) 15+ */ 16+ if( sqlite3StrICmp(zLeft, "proc_list")==0 ){ 17+ if( sqlite3ReadSchema(pParse) ) goto pragma_out; 18+ 19+ sqlite3VdbeSetNumCols(v, 4); 20+ pParse->nMem = 4; 21+ sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "name", SQLITE_STATIC); 22+ sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "is_aggregate", SQLITE_STATIC); 23+ sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "nargs", SQLITE_STATIC); 24+ sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "spe_name", SQLITE_STATIC); 25+ int j; 26+ for(j=0; j<ArraySize(db->aFunc.a); j++){ 27+ FuncDef *func; 28+ for (func =db->aFunc.a[j]; func; func = func->pNext) { 29+ char *sname; 30+ int size; 31+ size = strlen (func->zName) + 25; 32+ sname = sqlite3_malloc (sizeof (char) * size); 33+ snprintf (sname, size-1, "%s_%d_%d", func->zName, func->nArg, func->iPrefEnc); 34+ sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, func->zName, 0); 35+ sqlite3VdbeAddOp2(v, OP_Integer, func->xFinalize ? 1 : 0, 2); 36+ sqlite3VdbeAddOp2(v, OP_Integer, func->nArg, 3); 37+ sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0, sname, 0); 38+ sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 4); 39+ sqlite3_free (sname); 40+ } 41+ } 42+ for(j=0; j<ArraySize(sqlite3GlobalFunctions.a); j++){ 43+ FuncDef *func; 44+ for (func =sqlite3GlobalFunctions.a[j]; func; func = func->pNext) { 45+ char *sname; 46+ int size; 47+ size = strlen (func->zName) + 25; 48+ sname = sqlite3_malloc (sizeof (char) * size); 49+ snprintf (sname, size-1, "%s_%d_%d", func->zName, func->nArg, func->iPrefEnc); 50+ sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, func->zName, 0); 51+ sqlite3VdbeAddOp2(v, OP_Integer, func->xFinalize ? 1 : 0, 2); 52+ sqlite3VdbeAddOp2(v, OP_Integer, func->nArg, 3); 53+ sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0, sname, 0); 54+ sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 4); 55+ sqlite3_free (sname); 56+ } 57+ } 58+ }else 59+ 60+ /* 61 ** PRAGMA table_info(<table>) 62 ** 63 ** Return a single row for each column of the named table. The columns of 64