Test cases.  Minor problems fixed.  All appears to work now.

FossilOrigin-Name: 9a431362dccbc9b8f93375f30a3b8955903cca79
diff --git a/manifest b/manifest
index d7ec4d4..1b21bff 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C First\sattempt\sat\senhancing\sthe\s"PRAGMA\scache_spill"\sstatement\sto\saccept\sa\ncache\sthreashold\ssize.
-D 2015-11-12T14:57:19.268
+C Test\scases.\s\sMinor\sproblems\sfixed.\s\sAll\sappears\sto\swork\snow.
+D 2015-11-12T15:47:48.274
 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc e928e68168df69b353300ac87c10105206653a03
@@ -329,10 +329,10 @@
 F src/pager.c 18341e2b759b447cbc82fb9215d08d9c5864e92e
 F src/pager.h 87c4118a71ba3965184148b379a6d93179071091
 F src/parse.y 8a364a7a692e517dea8711b3c7f0d07fe32727d8
-F src/pcache.c f72f19956f8182ecd97cf9b7b0faa201711225b8
+F src/pcache.c 73895411fa6b7bd6f0091212feabbe833b358d23
 F src/pcache.h 1ff11adce609ba7de139b6abfabaf9a2bac947b5
 F src/pcache1.c 902e1bc7bdaa81b40f8543407c5e2ac8ef4dc035
-F src/pragma.c 26a612db31748a23dc17b97296e521cf2ef42081
+F src/pragma.c 0e91830e5cea31771121eb8967e8c110f7e8216a
 F src/pragma.h 31b110aaecb5603829c97747b99abfe491df5fa0
 F src/prepare.c 82e5db1013846a819f198336fed72c44c974e7b1
 F src/printf.c 0c4bcdd1c2e2521024f0a69cb5eb334f86b3652a
@@ -931,7 +931,7 @@
 F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff
 F test/permutations.test 4ea119731c62d2f7d0aa86dd5b184cbb61ca411b
 F test/pragma.test a44253f911e7d50127d4a08f927f47c861a4c772
-F test/pragma2.test 93ef4f24fb97a59d935859daf26078384b265c12
+F test/pragma2.test a8e11a7a38e2a5053fe4b807fc806c937d9a7469
 F test/pragma3.test 6f849ccffeee7e496d2f2b5e74152306c0b8757c
 F test/printf.test b3ff34e73d59124140eaf89f7672e21bc2ca5fcc
 F test/printf2.test 0b61566dd1c0f0b802f59dffa228c5dc5aa6b054
@@ -1402,10 +1402,7 @@
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 2518d5c971c4b32d9227b3bb7259162e3e27b00b
-R 337aa604616b296340bdf382cbd4b435
-T *branch * cache_spill=N
-T *sym-cache_spill=N *
-T -sym-trunk *
+P 549d42be0dac87dc04c3eeccfdc60615c3a6ad3f
+R 675bbffc41ae7c4e7c58162bf39590a3
 U drh
-Z e21337491dfb1b39176b63de38883141
+Z 4ec2916143a078881954f66921bb963f
diff --git a/manifest.uuid b/manifest.uuid
index a425302..27ce563 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-549d42be0dac87dc04c3eeccfdc60615c3a6ad3f
\ No newline at end of file
+9a431362dccbc9b8f93375f30a3b8955903cca79
\ No newline at end of file
diff --git a/src/pcache.c b/src/pcache.c
index ddcb0bcc4..5ac9d34 100644
--- a/src/pcache.c
+++ b/src/pcache.c
@@ -652,7 +652,7 @@
   assert( p->pCache!=0 );
   if( mxPage ){
     if( mxPage<0 ){
-      mxPage = (int)((-1024*(i64)p->szCache)/(p->szPage+p->szExtra));
+      mxPage = (int)((-1024*(i64)mxPage)/(p->szPage+p->szExtra));
     }
     p->szSpill = mxPage;
   }
diff --git a/src/pragma.c b/src/pragma.c
index 85693cd..7754e26 100644
--- a/src/pragma.c
+++ b/src/pragma.c
@@ -769,7 +769,6 @@
   ** not just the schema specified.
   */
   case PragTyp_CACHE_SPILL: {
-    int size;
     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
     if( !zRight ){
       if( sqlite3ReadSchema(pParse) ) goto pragma_out;
@@ -777,14 +776,16 @@
          (db->flags & SQLITE_CacheSpill)==0 ? 0 : 
             sqlite3BtreeSetSpillSize(pDb->pBt,0));
     }else{
+      int size = 1;
       if( sqlite3GetInt32(zRight, &size) ){
         sqlite3BtreeSetSpillSize(pDb->pBt, size);
       }
-      if( sqlite3GetBoolean(zRight, 0) ){
+      if( sqlite3GetBoolean(zRight, size!=0) ){
         db->flags |= SQLITE_CacheSpill;
       }else{
         db->flags &= ~SQLITE_CacheSpill;
       }
+      setAllPagerFlags(db);
     }
     break;
   }
diff --git a/test/pragma2.test b/test/pragma2.test
index c0b4f23..9cb31fa 100644
--- a/test/pragma2.test
+++ b/test/pragma2.test
@@ -197,16 +197,27 @@
     UPDATE t1 SET c=c+1;
     PRAGMA lock_status;
   }
-} {100000 main reserved temp unknown}   ;# Large cache spill threshold
+} {100000 main reserved temp unknown}   ;# Big spill threshold -> no excl lock
 do_test pragma2-4.5.3 {
   db eval {
     ROLLBACK;
     PRAGMA cache_spill=25;
+    PRAGMA main.cache_spill;
     BEGIN;
     UPDATE t1 SET c=c+1;
     PRAGMA lock_status;
   }
-} {main exclusive temp unknown}   ;# Large cache spill, so no exclusive lock
+} {50 main exclusive temp unknown}   ;# Small cache spill -> exclusive lock
+do_test pragma2-4.5.4 {
+  db eval {
+    ROLLBACK;
+    PRAGMA cache_spill(-25);
+    PRAGMA main.cache_spill;
+    BEGIN;
+    UPDATE t1 SET c=c+1;
+    PRAGMA lock_status;
+  }
+} {50 main exclusive temp unknown}   ;# Small cache spill -> exclusive lock
 
 
 # Verify that newly attached databases inherit the cache_spill=OFF
@@ -231,6 +242,26 @@
   UPDATE t2 SET c=c-1;
   PRAGMA lock_status;
 } {main unlocked temp unknown aux1 exclusive}
+db close
+forcedelete test.db
+sqlite3 db test.db
+
+breakpoint
+do_execsql_test pragma2-5.1 {
+  PRAGMA page_size=16384;
+  CREATE TABLE t1(x);
+  PRAGMA cache_size=2;
+  PRAGMA cache_spill=YES;
+  PRAGMA cache_spill;
+} {2}
+do_execsql_test pragma2-5.2 {
+  PRAGMA cache_spill=NO;
+  PRAGMA cache_spill;
+} {0}
+do_execsql_test pragma2-5.3 {
+  PRAGMA cache_spill(-51);
+  PRAGMA cache_spill;
+} {3}
    
 test_restore_config_pagecache
 finish_test