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