mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Move TCL interface for sqlite3_release_memory() and sqlite3_soft_heap_limit()
out of tclsqlite.c and into test1.c. Update the TCL interface documention to describe the "exists" method. (CVS 2862) FossilOrigin-Name: 98194a45cc60cb9942847f773bc797fb5463bd10
This commit is contained in:
24
manifest
24
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Fix\sfor\sticket\s#1582\s(Double\sdelete\sof\sinvalid\sLIMIT\sclause\sExpr*\sapplied\sto\sa\sUNION\sALL\squery).\s(CVS\s2861)
|
C Move\sTCL\sinterface\sfor\ssqlite3_release_memory()\sand\ssqlite3_soft_heap_limit()\nout\sof\stclsqlite.c\sand\sinto\stest1.c.\s\sUpdate\sthe\sTCL\sinterface\sdocumention\nto\sdescribe\sthe\s"exists"\smethod.\s(CVS\s2862)
|
||||||
D 2006-01-05T14:22:34
|
D 2006-01-05T15:50:07
|
||||||
F Makefile.in e3c6b3a38d734d41574c04f2fc90d18de2b87102
|
F Makefile.in e3c6b3a38d734d41574c04f2fc90d18de2b87102
|
||||||
F Makefile.linux-gcc aee18d8a05546dcf1888bd4547e442008a49a092
|
F Makefile.linux-gcc aee18d8a05546dcf1888bd4547e442008a49a092
|
||||||
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
||||||
@@ -71,8 +71,8 @@ F src/shell.c 66b073375efbdee19045e7e0cd38b85f9aff71da
|
|||||||
F src/sqlite.h.in ba3a29daa6a16e054191ccb384a981964e882a1d
|
F src/sqlite.h.in ba3a29daa6a16e054191ccb384a981964e882a1d
|
||||||
F src/sqliteInt.h 6f29c97703b1a1e032916b0bab83efe9b2734984
|
F src/sqliteInt.h 6f29c97703b1a1e032916b0bab83efe9b2734984
|
||||||
F src/table.c 486dcfce532685b53b5a2b5da8bba0ded6fb2316
|
F src/table.c 486dcfce532685b53b5a2b5da8bba0ded6fb2316
|
||||||
F src/tclsqlite.c 0386460a4c017d49d729d44cdcb3fb3ffb2503e0
|
F src/tclsqlite.c 351ae47649ac7119d772ab74ed7091f5e400041e
|
||||||
F src/test1.c 988dbac66c3ca92d69fbe0283d77e86cd6f73ce8
|
F src/test1.c 89e25646feceaf09e55c11ecba03ddcfd7cf7c0a
|
||||||
F src/test2.c 36390cdfc70c08e5ee0b466d0654a117f398bbff
|
F src/test2.c 36390cdfc70c08e5ee0b466d0654a117f398bbff
|
||||||
F src/test3.c 9742aa146eb750cab81c1d5605286c3a0eb88054
|
F src/test3.c 9742aa146eb750cab81c1d5605286c3a0eb88054
|
||||||
F src/test4.c a8fd681e139e1c61f22a77d07fc3a99cb28fff3f
|
F src/test4.c a8fd681e139e1c61f22a77d07fc3a99cb28fff3f
|
||||||
@@ -187,7 +187,7 @@ F test/malloc.test a5ed721cf7d1b12602ede4f98c11b65ab1582cc0
|
|||||||
F test/malloc2.test e6e321db96d6c94cb18bf82ad7215070c41e624e
|
F test/malloc2.test e6e321db96d6c94cb18bf82ad7215070c41e624e
|
||||||
F test/malloc3.test 9797d39eca7087a1022bcc0eb0b22215475c9698
|
F test/malloc3.test 9797d39eca7087a1022bcc0eb0b22215475c9698
|
||||||
F test/malloc4.test 2e29d155eb4b4808019ef47eeedfcbe9e09e0f05
|
F test/malloc4.test 2e29d155eb4b4808019ef47eeedfcbe9e09e0f05
|
||||||
F test/malloc5.test cd31d7be49690abc6845baa1f83bfd7b789ee187
|
F test/malloc5.test 4ebf827a8173e1429480a6b276d37e89c6ab96f0
|
||||||
F test/manydb.test d81debbf5871242e3b5df1d3bb5e14c50431b6f8
|
F test/manydb.test d81debbf5871242e3b5df1d3bb5e14c50431b6f8
|
||||||
F test/memdb.test 1860e060be810bf0775bc57408a5b7c4954bcaea
|
F test/memdb.test 1860e060be810bf0775bc57408a5b7c4954bcaea
|
||||||
F test/memleak.test df2b2b96e77f8ba159a332299535b1e5f18e49ac
|
F test/memleak.test df2b2b96e77f8ba159a332299535b1e5f18e49ac
|
||||||
@@ -228,7 +228,7 @@ F test/subselect.test 2d13fb7f450db3595adcdd24079a0dd1d2d6abc2
|
|||||||
F test/sync.test 6e8b885cec5ccba2090e92c90f747a7142f53c88
|
F test/sync.test 6e8b885cec5ccba2090e92c90f747a7142f53c88
|
||||||
F test/table.test 6dc0dfa44dd429520e0e5a0c5e55025f730e9403
|
F test/table.test 6dc0dfa44dd429520e0e5a0c5e55025f730e9403
|
||||||
F test/tableapi.test 6a66d58b37d46dc0f2b3c7d4bd2617d209399bd1
|
F test/tableapi.test 6a66d58b37d46dc0f2b3c7d4bd2617d209399bd1
|
||||||
F test/tclsqlite.test 19578d32a7692311918caf0ae3521d19525bcb62
|
F test/tclsqlite.test 2c4b5fb2f21e6740479463c263f3020f08e472d7
|
||||||
F test/temptable.test 7927261befdbc7b0a7ffebb85ecc70a74fa7b15b
|
F test/temptable.test 7927261befdbc7b0a7ffebb85ecc70a74fa7b15b
|
||||||
F test/tester.tcl 58dcfde5265c3c46e05ae2af4accaa29f0b44d91
|
F test/tester.tcl 58dcfde5265c3c46e05ae2af4accaa29f0b44d91
|
||||||
F test/thread1.test 776c9e459b75ba905193b351926ac4019b049f35
|
F test/thread1.test 776c9e459b75ba905193b351926ac4019b049f35
|
||||||
@@ -294,7 +294,7 @@ F www/autoinc.tcl b357f5ba954b046ee35392ce0f884a2fcfcdea06
|
|||||||
F www/c_interface.tcl b51b08591554c16a0c3ef718364a508ac25abc7e
|
F www/c_interface.tcl b51b08591554c16a0c3ef718364a508ac25abc7e
|
||||||
F www/capi3.tcl 7a7cc225fe02eb7ab861a6019b08baa0014409e1
|
F www/capi3.tcl 7a7cc225fe02eb7ab861a6019b08baa0014409e1
|
||||||
F www/capi3ref.tcl c4bf23a0110ad0ffdf4fe6b74d464965116dcea4
|
F www/capi3ref.tcl c4bf23a0110ad0ffdf4fe6b74d464965116dcea4
|
||||||
F www/changes.tcl ef5874a59698da63ec914cbfbd64b4033892ddc4
|
F www/changes.tcl 567069a3dc7d066f3687fe3697be62e6dd19e671
|
||||||
F www/common.tcl 14d121c28532ad20c3e349caa4db708b0b822083
|
F www/common.tcl 14d121c28532ad20c3e349caa4db708b0b822083
|
||||||
F www/compile.tcl 276546d7eb445add5a867193bbd80f6919a6b084
|
F www/compile.tcl 276546d7eb445add5a867193bbd80f6919a6b084
|
||||||
F www/conflict.tcl cdd0f4b59b0ba6d61f67e6a38f3ae45853bacb30
|
F www/conflict.tcl cdd0f4b59b0ba6d61f67e6a38f3ae45853bacb30
|
||||||
@@ -332,11 +332,11 @@ F www/speed.tcl 656ed5be8cc9d536353e1a96927b925634a62933
|
|||||||
F www/sqlite.tcl a883ed7b47371d31d471e6aea5ed1f972ae8e1be
|
F www/sqlite.tcl a883ed7b47371d31d471e6aea5ed1f972ae8e1be
|
||||||
F www/support.tcl 7961ce16290692578d783bb11f0dc8391a9be9c3
|
F www/support.tcl 7961ce16290692578d783bb11f0dc8391a9be9c3
|
||||||
F www/table-ex1b2.gif a588d21a2d88bb2a2ef0431fcc5ed5aa48c0bbc5
|
F www/table-ex1b2.gif a588d21a2d88bb2a2ef0431fcc5ed5aa48c0bbc5
|
||||||
F www/tclsqlite.tcl ddcf912ea48695603c8ed7efb29f0812ef8d1b49
|
F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
|
||||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||||
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
|
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
|
||||||
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
|
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
|
||||||
P 6fdbb8b771e490f0d791326689245302c4fe18f5
|
P 5dec3a392ba3c249bbca899c12e99c26cc1b8cdb
|
||||||
R b489dd3c565f674bf68347d5b31f3b83
|
R 6ce19bb1451171f34823f6ee27789bdd
|
||||||
U danielk1977
|
U drh
|
||||||
Z 74556dd90bea6451105d7798d9757184
|
Z 920e9b3cd2f7e8da26bd87500adce907
|
||||||
|
@@ -1 +1 @@
|
|||||||
5dec3a392ba3c249bbca899c12e99c26cc1b8cdb
|
98194a45cc60cb9942847f773bc797fb5463bd10
|
@@ -11,7 +11,7 @@
|
|||||||
*************************************************************************
|
*************************************************************************
|
||||||
** A TCL Interface to SQLite
|
** A TCL Interface to SQLite
|
||||||
**
|
**
|
||||||
** $Id: tclsqlite.c,v 1.144 2006/01/04 18:13:26 drh Exp $
|
** $Id: tclsqlite.c,v 1.145 2006/01/05 15:50:07 drh Exp $
|
||||||
*/
|
*/
|
||||||
#ifndef NO_TCL /* Omit this whole file if TCL is unavailable */
|
#ifndef NO_TCL /* Omit this whole file if TCL is unavailable */
|
||||||
|
|
||||||
@@ -666,9 +666,9 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
|
|||||||
"exists", "function", "last_insert_rowid",
|
"exists", "function", "last_insert_rowid",
|
||||||
"nullvalue", "onecolumn", "profile",
|
"nullvalue", "onecolumn", "profile",
|
||||||
"progress", "rekey", "rollback_hook",
|
"progress", "rekey", "rollback_hook",
|
||||||
"release_memory", "soft_heap_limit", "timeout",
|
"timeout", "total_changes", "trace",
|
||||||
"total_changes", "trace", "transaction",
|
"transaction", "update_hook", "version",
|
||||||
"update_hook", "version", 0
|
0
|
||||||
};
|
};
|
||||||
enum DB_enum {
|
enum DB_enum {
|
||||||
DB_AUTHORIZER, DB_BUSY, DB_CACHE,
|
DB_AUTHORIZER, DB_BUSY, DB_CACHE,
|
||||||
@@ -678,9 +678,8 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
|
|||||||
DB_EXISTS, DB_FUNCTION, DB_LAST_INSERT_ROWID,
|
DB_EXISTS, DB_FUNCTION, DB_LAST_INSERT_ROWID,
|
||||||
DB_NULLVALUE, DB_ONECOLUMN, DB_PROFILE,
|
DB_NULLVALUE, DB_ONECOLUMN, DB_PROFILE,
|
||||||
DB_PROGRESS, DB_REKEY, DB_ROLLBACK_HOOK,
|
DB_PROGRESS, DB_REKEY, DB_ROLLBACK_HOOK,
|
||||||
DB_RELEASE_MEMORY, DB_SOFT_HEAP_LIMIT, DB_TIMEOUT,
|
DB_TIMEOUT, DB_TOTAL_CHANGES, DB_TRACE,
|
||||||
DB_TOTAL_CHANGES, DB_TRACE, DB_TRANSACTION,
|
DB_TRANSACTION, DB_UPDATE_HOOK, DB_VERSION
|
||||||
DB_UPDATE_HOOK, DB_VERSION
|
|
||||||
};
|
};
|
||||||
/* don't leave trailing commas on DB_enum, it confuses the AIX xlc compiler */
|
/* don't leave trailing commas on DB_enum, it confuses the AIX xlc compiler */
|
||||||
|
|
||||||
@@ -1752,57 +1751,6 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
|
|||||||
sqlite3_busy_timeout(pDb->db, ms);
|
sqlite3_busy_timeout(pDb->db, ms);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
** $db soft_heap_limit N
|
|
||||||
**
|
|
||||||
** Set the soft-heap-limit for this thread. Note that the limit is
|
|
||||||
** per-thread, not per-database. The previous limit is returned.
|
|
||||||
*/
|
|
||||||
case DB_SOFT_HEAP_LIMIT: {
|
|
||||||
#ifndef SQLITE_OMIT_MEMORY_MANAGEMENT
|
|
||||||
int n;
|
|
||||||
int ret;
|
|
||||||
if( objc!=3 ){
|
|
||||||
Tcl_WrongNumArgs(interp, 2, objv, "BYTES");
|
|
||||||
return TCL_ERROR;
|
|
||||||
}
|
|
||||||
if( Tcl_GetIntFromObj(interp, objv[2], &n) ){
|
|
||||||
return TCL_ERROR;
|
|
||||||
}
|
|
||||||
ret = sqlite3Tsd()->nSoftHeapLimit;
|
|
||||||
sqlite3_soft_heap_limit(n);
|
|
||||||
Tcl_SetObjResult(interp, Tcl_NewIntObj(ret));
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** $db release_memory ?N?
|
|
||||||
**
|
|
||||||
** Try to release memory currently held (but not really required) by
|
|
||||||
** SQLite database connections opened by the current thread. If an
|
|
||||||
** integer argument is supplied, then SQLite stops trying to free memory
|
|
||||||
** after N bytes have been freed.
|
|
||||||
**
|
|
||||||
** The value returned is the number of bytes actually freed.
|
|
||||||
**/
|
|
||||||
case DB_RELEASE_MEMORY: {
|
|
||||||
int nRelease = 0;
|
|
||||||
int N = -1;
|
|
||||||
if( objc!=2 && objc!=3 ){
|
|
||||||
Tcl_WrongNumArgs(interp, 2, objv, "?N?");
|
|
||||||
return TCL_ERROR;
|
|
||||||
}
|
|
||||||
#ifndef SQLITE_OMIT_MEMORY_MANAGEMENT
|
|
||||||
if( objc==3 && TCL_OK!=Tcl_GetIntFromObj(interp, objv[2], &N) ){
|
|
||||||
return TCL_ERROR;
|
|
||||||
}
|
|
||||||
nRelease = sqlite3_release_memory(N);
|
|
||||||
#endif
|
|
||||||
Tcl_SetObjResult(interp, Tcl_NewIntObj(nRelease));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** $db total_changes
|
** $db total_changes
|
||||||
|
72
src/test1.c
72
src/test1.c
@@ -13,7 +13,7 @@
|
|||||||
** is not included in the SQLite library. It is used for automated
|
** is not included in the SQLite library. It is used for automated
|
||||||
** testing of the SQLite library.
|
** testing of the SQLite library.
|
||||||
**
|
**
|
||||||
** $Id: test1.c,v 1.179 2006/01/03 00:33:50 drh Exp $
|
** $Id: test1.c,v 1.180 2006/01/05 15:50:07 drh Exp $
|
||||||
*/
|
*/
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
#include "tcl.h"
|
#include "tcl.h"
|
||||||
@@ -2938,6 +2938,67 @@ static int tcl_variable_type(
|
|||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Usage: sqlite3_release_memory ?N?
|
||||||
|
**
|
||||||
|
** Attempt to release memory currently held but not actually required.
|
||||||
|
** The integer N is the number of bytes we are trying to release. The
|
||||||
|
** return value is the amount of memory actually released.
|
||||||
|
*/
|
||||||
|
static int test_release_memory(
|
||||||
|
void * clientData,
|
||||||
|
Tcl_Interp *interp,
|
||||||
|
int objc,
|
||||||
|
Tcl_Obj *CONST objv[]
|
||||||
|
){
|
||||||
|
#ifndef SQLITE_OMIT_MEMORY_MANAGEMENT
|
||||||
|
int N;
|
||||||
|
int amt;
|
||||||
|
if( objc!=1 && objc!=2 ){
|
||||||
|
Tcl_WrongNumArgs(interp, 1, objv, "?N?");
|
||||||
|
return TCL_ERROR;
|
||||||
|
}
|
||||||
|
if( objc==2 ){
|
||||||
|
if( Tcl_GetIntFromObj(interp, objv[1], &N) ) return TCL_ERROR;
|
||||||
|
}else{
|
||||||
|
N = -1;
|
||||||
|
}
|
||||||
|
amt = sqlite3_release_memory(N);
|
||||||
|
Tcl_SetObjResult(interp, Tcl_NewIntObj(amt));
|
||||||
|
#endif
|
||||||
|
return TCL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Usage: sqlite3_soft_heap_limit ?N?
|
||||||
|
**
|
||||||
|
** Query or set the soft heap limit for the current thread. The
|
||||||
|
** limit is only changed if the N is present. The previous limit
|
||||||
|
** is returned.
|
||||||
|
*/
|
||||||
|
static int test_soft_heap_limit(
|
||||||
|
void * clientData,
|
||||||
|
Tcl_Interp *interp,
|
||||||
|
int objc,
|
||||||
|
Tcl_Obj *CONST objv[]
|
||||||
|
){
|
||||||
|
#ifndef SQLITE_OMIT_MEMORY_MANAGEMENT
|
||||||
|
int amt;
|
||||||
|
if( objc!=1 && objc!=2 ){
|
||||||
|
Tcl_WrongNumArgs(interp, 1, objv, "?N?");
|
||||||
|
return TCL_ERROR;
|
||||||
|
}
|
||||||
|
amt = sqlite3Tsd()->nSoftHeapLimit;
|
||||||
|
if( objc==2 ){
|
||||||
|
int N;
|
||||||
|
if( Tcl_GetIntFromObj(interp, objv[1], &N) ) return TCL_ERROR;
|
||||||
|
sqlite3_soft_heap_limit(N);
|
||||||
|
}
|
||||||
|
Tcl_SetObjResult(interp, Tcl_NewIntObj(amt));
|
||||||
|
#endif
|
||||||
|
return TCL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This routine sets entries in the global ::sqlite_options() array variable
|
** This routine sets entries in the global ::sqlite_options() array variable
|
||||||
** according to the compile-time configuration of the database. Test
|
** according to the compile-time configuration of the database. Test
|
||||||
@@ -3099,6 +3160,12 @@ static void set_options(Tcl_Interp *interp){
|
|||||||
Tcl_SetVar2(interp, "sqlite_options", "memorydb", "1", TCL_GLOBAL_ONLY);
|
Tcl_SetVar2(interp, "sqlite_options", "memorydb", "1", TCL_GLOBAL_ONLY);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SQLITE_OMIT_MEMORY_MANAGEMENT
|
||||||
|
Tcl_SetVar2(interp, "sqlite_options", "memorymanage", "0", TCL_GLOBAL_ONLY);
|
||||||
|
#else
|
||||||
|
Tcl_SetVar2(interp, "sqlite_options", "memorymanage", "1", TCL_GLOBAL_ONLY);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef SQLITE_OMIT_OR_OPTIMIZATION
|
#ifdef SQLITE_OMIT_OR_OPTIMIZATION
|
||||||
Tcl_SetVar2(interp, "sqlite_options", "or_opt", "0", TCL_GLOBAL_ONLY);
|
Tcl_SetVar2(interp, "sqlite_options", "or_opt", "0", TCL_GLOBAL_ONLY);
|
||||||
#else
|
#else
|
||||||
@@ -3291,6 +3358,9 @@ int Sqlitetest1_Init(Tcl_Interp *interp){
|
|||||||
{ "sqlite3_changes", test_changes ,0 },
|
{ "sqlite3_changes", test_changes ,0 },
|
||||||
{ "sqlite3_step", test_step ,0 },
|
{ "sqlite3_step", test_step ,0 },
|
||||||
|
|
||||||
|
{ "sqlite3_release_memory", test_release_memory, 0},
|
||||||
|
{ "sqlite3_soft_heap_limit", test_soft_heap_limit, 0},
|
||||||
|
|
||||||
/* sqlite3_column_*() API */
|
/* sqlite3_column_*() API */
|
||||||
{ "sqlite3_column_count", test_column_count ,0 },
|
{ "sqlite3_column_count", test_column_count ,0 },
|
||||||
{ "sqlite3_data_count", test_data_count ,0 },
|
{ "sqlite3_data_count", test_data_count ,0 },
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
# This file contains test cases focused on the two memory-management APIs,
|
# This file contains test cases focused on the two memory-management APIs,
|
||||||
# sqlite3_soft_heap_limit() and sqlite3_release_memory().
|
# sqlite3_soft_heap_limit() and sqlite3_release_memory().
|
||||||
#
|
#
|
||||||
# $Id: malloc5.test,v 1.3 2005/12/30 16:28:02 danielk1977 Exp $
|
# $Id: malloc5.test,v 1.4 2006/01/05 15:50:07 drh Exp $
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# NOTES ON EXPECTED BEHAVIOUR
|
# NOTES ON EXPECTED BEHAVIOUR
|
||||||
@@ -30,7 +30,7 @@ if {[info command sqlite_malloc_stat]==""} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
do_test malloc5-1.1 {
|
do_test malloc5-1.1 {
|
||||||
# Simplest possible test. Call [db release_memory] when there is exactly
|
# Simplest possible test. Call sqlite3_release_memory when there is exactly
|
||||||
# one unused page in a single pager cache. This test case set's the
|
# one unused page in a single pager cache. This test case set's the
|
||||||
# value of the ::pgalloc variable, which is used in subsequent tests.
|
# value of the ::pgalloc variable, which is used in subsequent tests.
|
||||||
#
|
#
|
||||||
@@ -42,7 +42,7 @@ do_test malloc5-1.1 {
|
|||||||
BEGIN;
|
BEGIN;
|
||||||
CREATE TABLE abc(a, b, c);
|
CREATE TABLE abc(a, b, c);
|
||||||
}
|
}
|
||||||
set ::pgalloc [db release_memory]
|
set ::pgalloc [sqlite3_release_memory]
|
||||||
expr $::pgalloc > 0
|
expr $::pgalloc > 0
|
||||||
} {1}
|
} {1}
|
||||||
do_test malloc5-1.2 {
|
do_test malloc5-1.2 {
|
||||||
@@ -56,7 +56,7 @@ do_test malloc5-1.2 {
|
|||||||
} db2
|
} db2
|
||||||
} {1 {database is locked}}
|
} {1 {database is locked}}
|
||||||
do_test malloc5-1.3 {
|
do_test malloc5-1.3 {
|
||||||
# Again call [db release_memory] when there is exactly one unused page
|
# Again call [sqlite3_release_memory] when there is exactly one unused page
|
||||||
# in the cache. The same amount of memory is required, but no journal-sync
|
# in the cache. The same amount of memory is required, but no journal-sync
|
||||||
# or exclusive lock should be established.
|
# or exclusive lock should be established.
|
||||||
execsql {
|
execsql {
|
||||||
@@ -64,7 +64,7 @@ do_test malloc5-1.3 {
|
|||||||
BEGIN;
|
BEGIN;
|
||||||
SELECT * FROM abc;
|
SELECT * FROM abc;
|
||||||
}
|
}
|
||||||
db release_memory
|
sqlite3_release_memory
|
||||||
} $::pgalloc
|
} $::pgalloc
|
||||||
do_test malloc5-1.4 {
|
do_test malloc5-1.4 {
|
||||||
# Database should not be locked this time.
|
# Database should not be locked this time.
|
||||||
@@ -79,7 +79,7 @@ do_test malloc5-1.5 {
|
|||||||
SELECT * FROM abc;
|
SELECT * FROM abc;
|
||||||
CREATE TABLE def(d, e, f);
|
CREATE TABLE def(d, e, f);
|
||||||
}
|
}
|
||||||
db release_memory 500
|
sqlite3_release_memory 500
|
||||||
} $::pgalloc
|
} $::pgalloc
|
||||||
do_test malloc5-1.6 {
|
do_test malloc5-1.6 {
|
||||||
# Database should not be locked this time. The above test case only
|
# Database should not be locked this time. The above test case only
|
||||||
@@ -92,7 +92,7 @@ do_test malloc5-1.6 {
|
|||||||
do_test malloc5-1.7 {
|
do_test malloc5-1.7 {
|
||||||
# Release another 500 bytes of memory. This time we require a sync(),
|
# Release another 500 bytes of memory. This time we require a sync(),
|
||||||
# so the database file will be locked afterwards.
|
# so the database file will be locked afterwards.
|
||||||
db release_memory 500
|
sqlite3_release_memory 500
|
||||||
} $::pgalloc
|
} $::pgalloc
|
||||||
do_test malloc5-1.8 {
|
do_test malloc5-1.8 {
|
||||||
catchsql {
|
catchsql {
|
||||||
@@ -127,7 +127,7 @@ do_test malloc5-2.2 {
|
|||||||
}
|
}
|
||||||
set data [list]
|
set data [list]
|
||||||
db eval {SELECT * FROM abc} {
|
db eval {SELECT * FROM abc} {
|
||||||
incr nRelease [db release_memory]
|
incr nRelease [sqlite3_release_memory]
|
||||||
lappend data $a $b $c
|
lappend data $a $b $c
|
||||||
}
|
}
|
||||||
execsql {
|
execsql {
|
||||||
@@ -149,7 +149,7 @@ do_test malloc5-3.1 {
|
|||||||
BEGIN;
|
BEGIN;
|
||||||
SELECT * FROM def;
|
SELECT * FROM def;
|
||||||
} db2
|
} db2
|
||||||
db release_memory
|
sqlite3_release_memory
|
||||||
} [expr $::pgalloc * 2]
|
} [expr $::pgalloc * 2]
|
||||||
do_test malloc5-3.2 {
|
do_test malloc5-3.2 {
|
||||||
concat \
|
concat \
|
||||||
@@ -173,7 +173,7 @@ sqlite_malloc_outstanding -clearmaxbytes
|
|||||||
# limit in variable ::soft_limit. The original value is restored after
|
# limit in variable ::soft_limit. The original value is restored after
|
||||||
# running the tests.
|
# running the tests.
|
||||||
#
|
#
|
||||||
set ::soft_limit [db soft_heap_limit -1]
|
set ::soft_limit [sqlite3_soft_heap_limit -1]
|
||||||
do_test malloc5-4.1 {
|
do_test malloc5-4.1 {
|
||||||
execsql {BEGIN;}
|
execsql {BEGIN;}
|
||||||
execsql {DELETE FROM abc;}
|
execsql {DELETE FROM abc;}
|
||||||
@@ -185,9 +185,9 @@ do_test malloc5-4.1 {
|
|||||||
expr $::nMaxBytes > 1000000
|
expr $::nMaxBytes > 1000000
|
||||||
} {1}
|
} {1}
|
||||||
do_test malloc5-4.2 {
|
do_test malloc5-4.2 {
|
||||||
db release_memory
|
sqlite3_release_memory
|
||||||
sqlite_malloc_outstanding -clearmaxbytes
|
sqlite_malloc_outstanding -clearmaxbytes
|
||||||
db soft_heap_limit 100000
|
sqlite3_soft_heap_limit 100000
|
||||||
execsql {BEGIN;}
|
execsql {BEGIN;}
|
||||||
for {set i 0} {$i < 10000} {incr i} {
|
for {set i 0} {$i < 10000} {incr i} {
|
||||||
execsql "INSERT INTO abc VALUES($i, $i, '[string repeat X 100]');"
|
execsql "INSERT INTO abc VALUES($i, $i, '[string repeat X 100]');"
|
||||||
@@ -204,8 +204,6 @@ do_test malloc5-4.3 {
|
|||||||
} [list 20000 [expr int(20000.0 * 4999.5)] [expr int(20000.0 * 4999.5)]]
|
} [list 20000 [expr int(20000.0 * 4999.5)] [expr int(20000.0 * 4999.5)]]
|
||||||
|
|
||||||
# Restore the soft heap limit.
|
# Restore the soft heap limit.
|
||||||
db soft_heap_limit $::soft_limit
|
sqlite3_soft_heap_limit $::soft_limit
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
# interface is pretty well tested. This file contains some addition
|
# interface is pretty well tested. This file contains some addition
|
||||||
# tests for fringe issues that the main test suite does not cover.
|
# tests for fringe issues that the main test suite does not cover.
|
||||||
#
|
#
|
||||||
# $Id: tclsqlite.test,v 1.48 2005/12/20 09:19:38 danielk1977 Exp $
|
# $Id: tclsqlite.test,v 1.49 2006/01/05 15:50:07 drh Exp $
|
||||||
|
|
||||||
set testdir [file dirname $argv0]
|
set testdir [file dirname $argv0]
|
||||||
source $testdir/tester.tcl
|
source $testdir/tester.tcl
|
||||||
@@ -34,7 +34,7 @@ do_test tcl-1.1 {
|
|||||||
do_test tcl-1.2 {
|
do_test tcl-1.2 {
|
||||||
set v [catch {db bogus} msg]
|
set v [catch {db bogus} msg]
|
||||||
lappend v $msg
|
lappend v $msg
|
||||||
} {1 {bad option "bogus": must be authorizer, busy, cache, changes, close, collate, collation_needed, commit_hook, complete, copy, errorcode, eval, exists, function, last_insert_rowid, nullvalue, onecolumn, profile, progress, rekey, rollback_hook, release_memory, soft_heap_limit, timeout, total_changes, trace, transaction, update_hook, or version}}
|
} {1 {bad option "bogus": must be authorizer, busy, cache, changes, close, collate, collation_needed, commit_hook, complete, copy, errorcode, eval, exists, function, last_insert_rowid, nullvalue, onecolumn, profile, progress, rekey, rollback_hook, timeout, total_changes, trace, transaction, update_hook, or version}}
|
||||||
do_test tcl-1.3 {
|
do_test tcl-1.3 {
|
||||||
execsql {CREATE TABLE t1(a int, b int)}
|
execsql {CREATE TABLE t1(a int, b int)}
|
||||||
execsql {INSERT INTO t1 VALUES(10,20)}
|
execsql {INSERT INTO t1 VALUES(10,20)}
|
||||||
|
@@ -25,6 +25,20 @@ proc chng {date desc} {
|
|||||||
puts "<DD><P><UL>$desc</UL></P></DD>"
|
puts "<DD><P><UL>$desc</UL></P></DD>"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
chng {2006 January ? (3.3.0)} {
|
||||||
|
<li>CHECK constraints</li>
|
||||||
|
<li>IF EXISTS and IF NOT EXISTS clauses on CREATE/DROP TABLE/INDEX.</li>
|
||||||
|
<li>DESC indices</li>
|
||||||
|
<li>More efficient encoding of boolean values resulting in smaller database
|
||||||
|
files</li>
|
||||||
|
<li>More aggressive SQLITE_OMIT_FLOATING_POINT<li>
|
||||||
|
<li>Separate INTEGER and REAL affinity</li>
|
||||||
|
<li>Add a virtual function layer for the OS interface</li>
|
||||||
|
<li>"exists" method added to the TCL interface</li>
|
||||||
|
<li>Improved response to out-of-memory errors</li>
|
||||||
|
<li>Database cached shared between connections in the same thread</li>
|
||||||
|
}
|
||||||
|
|
||||||
chng {2005 December 19 (3.2.8)} {
|
chng {2005 December 19 (3.2.8)} {
|
||||||
<li>Fix an obscure bug that can cause database corruption under the
|
<li>Fix an obscure bug that can cause database corruption under the
|
||||||
following unusual circumstances: A large INSERT or UPDATE statement which
|
following unusual circumstances: A large INSERT or UPDATE statement which
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Run this Tcl script to generate the tclsqlite.html file.
|
# Run this Tcl script to generate the tclsqlite.html file.
|
||||||
#
|
#
|
||||||
set rcsid {$Id: tclsqlite.tcl,v 1.15 2005/09/13 07:00:06 drh Exp $}
|
set rcsid {$Id: tclsqlite.tcl,v 1.16 2006/01/05 15:50:07 drh Exp $}
|
||||||
source common.tcl
|
source common.tcl
|
||||||
header {The Tcl interface to the SQLite library}
|
header {The Tcl interface to the SQLite library}
|
||||||
proc METHOD {name text} {
|
proc METHOD {name text} {
|
||||||
@@ -71,6 +71,7 @@ foreach m [lsort {
|
|||||||
copy
|
copy
|
||||||
errorcode
|
errorcode
|
||||||
eval
|
eval
|
||||||
|
exists
|
||||||
function
|
function
|
||||||
last_insert_rowid
|
last_insert_rowid
|
||||||
nullvalue
|
nullvalue
|
||||||
@@ -418,6 +419,28 @@ return "0" if it wants SQLite to try again to open the database and
|
|||||||
should return "1" if it wants SQLite to abandon the current operation.
|
should return "1" if it wants SQLite to abandon the current operation.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
METHOD exists {
|
||||||
|
|
||||||
|
<p>The "exists" method is similar to "onecolumn" and "eval" in that
|
||||||
|
it executes SQL statements. The difference is that the "exists" method
|
||||||
|
always returns a boolean value which is TRUE if a query in the SQL
|
||||||
|
statement it executes returns one or more rows and FALSE if the SQL
|
||||||
|
returns an empty set.</p>
|
||||||
|
|
||||||
|
<p>The "exists" method is often used to test for the existance of
|
||||||
|
rows in a table. For example:</p>
|
||||||
|
|
||||||
|
<blockquote><b>
|
||||||
|
if {[db exists {SELECT 1 FROM table1 WHERE user=$user}]} {<br>
|
||||||
|
# Processing if $user exists<br>
|
||||||
|
} else {<br>
|
||||||
|
# Processing if $user does not exist<br>
|
||||||
|
}
|
||||||
|
</b></blockquote>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
METHOD last_insert_rowid {
|
METHOD last_insert_rowid {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user