1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Update the TCL wrapper to provide a non-NULL objProc pointer to the

Tcl_NRCreateCommand() interface.  The TCL gurus say this is needed to
support legacy TCL extensions.

FossilOrigin-Name: 1b3cfa01dd7fb9a48f0008f5afd974db61c30cff
This commit is contained in:
drh
2009-10-13 18:38:34 +00:00
parent ccd62aa0e3
commit a2c8a95b1c
5 changed files with 66 additions and 13 deletions

View File

@ -1,8 +1,8 @@
-----BEGIN PGP SIGNED MESSAGE----- -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1 Hash: SHA1
C Add\sa\stest\scase\sto\sverify\sthat\sticket\s[5ee23731f15]\shas\sbeen\sfixed. C Update\sthe\sTCL\swrapper\sto\sprovide\sa\snon-NULL\sobjProc\spointer\sto\sthe\nTcl_NRCreateCommand()\sinterface.\s\sThe\sTCL\sgurus\ssay\sthis\sis\sneeded\sto\nsupport\slegacy\sTCL\sextensions.
D 2009-10-13T15:42:49 D 2009-10-13T18:38:34
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -171,8 +171,8 @@ F src/sqliteInt.h 44cded4d6b78fe5fb5339454c44e51c64b7d8ed8
F src/sqliteLimit.h 38b2fffcd01faeaeaadea71b2b47695a81580c8b F src/sqliteLimit.h 38b2fffcd01faeaeaadea71b2b47695a81580c8b
F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76 F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76
F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d
F src/tclsqlite.c 868d62910bc6b41c49554482bdcc1590efc01f3c F src/tclsqlite.c b91a03d52d39eda4392931ac4ebd421b9234c2be
F src/test1.c 9bd64834314b67345855c314dc479bc12596a9b7 F src/test1.c 4da992ff460cba2167e67df3ba28ad66afebfe91
F src/test2.c 0de743ec8890ca4f09e0bce5d6d5a681f5957fec F src/test2.c 0de743ec8890ca4f09e0bce5d6d5a681f5957fec
F src/test3.c 2445c2beb5e7a0c91fd8136dc1339ec369a24898 F src/test3.c 2445c2beb5e7a0c91fd8136dc1339ec369a24898
F src/test4.c b5fd530f02a6a0dbffb23be202168a690985dedd F src/test4.c b5fd530f02a6a0dbffb23be202168a690985dedd
@ -574,7 +574,7 @@ F test/substr.test 18f57c4ca8a598805c4d64e304c418734d843c1a
F test/sync.test ded6b39d8d8ca3c0c5518516c6371b3316d3e3a3 F test/sync.test ded6b39d8d8ca3c0c5518516c6371b3316d3e3a3
F test/table.test bf102a5669c4db7a41330802f24a4a81a4204f83 F test/table.test bf102a5669c4db7a41330802f24a4a81a4204f83
F test/tableapi.test 7262a8cbaa9965d429f1cbd2747edc185fa56516 F test/tableapi.test 7262a8cbaa9965d429f1cbd2747edc185fa56516
F test/tclsqlite.test 8b1150d0486c4848c70d96422513a91c5342be0e F test/tclsqlite.test bf4227eb236a4c097aa7974a2bf7d3225acf34be
F test/tempdb.test 1bf52da28a9c24e29717362a87722dff08feb72b F test/tempdb.test 1bf52da28a9c24e29717362a87722dff08feb72b
F test/temptable.test f42121a0d29a62f00f93274464164177ab1cc24a F test/temptable.test f42121a0d29a62f00f93274464164177ab1cc24a
F test/temptrigger.test b0273db072ce5f37cf19140ceb1f0d524bbe9f05 F test/temptrigger.test b0273db072ce5f37cf19140ceb1f0d524bbe9f05
@ -760,14 +760,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
P bc1101179abb4577417c971a7e4fbacde50e19a2 P f894ebf86d6bafcd1461f104f5f677b3b6a3aa1a
R cf79a35faaf03c97023abaa3e5d4feea R 78a04730a8c7b7cebc1d3f47c09f5bfa
U drh U drh
Z 47b9b31e4d3789db641a51e6b331e60b Z 3c7266f38200d8f31bd2e5d5281dbd3f
-----BEGIN PGP SIGNATURE----- -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux) Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFK1J/8oxKgR168RlERAuH0AJ9TgUqhzQCMtbf9WjHdu/bdlto6igCcCET5 iD8DBQFK1MktoxKgR168RlERAgM/AJ4tDelhAOqaGTX4bLzzaDCACDLesACgirtD
2WPnZ+F+7rlkdtMtAJR9Ka8= K1/iBwAIRLX5JOdd5czm15s=
=MjzV =ULek
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----

View File

@ -1 +1 @@
f894ebf86d6bafcd1461f104f5f677b3b6a3aa1a 1b3cfa01dd7fb9a48f0008f5afd974db61c30cff

View File

@ -1415,6 +1415,7 @@ static Tcl_Obj *dbEvalColumnValue(DbEvalContext *p, int iCol){
** This allows stubs-enabled builds to be used with older Tcl libraries. ** This allows stubs-enabled builds to be used with older Tcl libraries.
*/ */
#if TCL_MAJOR_VERSION>8 || (TCL_MAJOR_VERSION==8 && TCL_MINOR_VERSION>=6) #if TCL_MAJOR_VERSION>8 || (TCL_MAJOR_VERSION==8 && TCL_MINOR_VERSION>=6)
# define SQLITE_TCL_NRE 1
static int DbUseNre(void){ static int DbUseNre(void){
int major, minor; int major, minor;
Tcl_GetVersion(&major, &minor, 0, 0); Tcl_GetVersion(&major, &minor, 0, 0);
@ -1430,6 +1431,7 @@ static int DbUseNre(void){
** **
** if( DbUseNre() ) { ... } ** if( DbUseNre() ) { ... }
*/ */
# define SQLITE_TCL_NRE 0
# define DbUseNre() 0 # define DbUseNre() 0
# define Tcl_NRAddCallback(a,b,c,d,e,f) 0 # define Tcl_NRAddCallback(a,b,c,d,e,f) 0
# define Tcl_NREvalObj(a,b,c) 0 # define Tcl_NREvalObj(a,b,c) 0
@ -2764,6 +2766,21 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
return rc; return rc;
} }
#if SQLITE_TCL_NRE
/*
** Adaptor that provides an objCmd interface to the NRE-enabled
** interface implementation.
*/
static int DbObjCmdAdaptor(
void *cd,
Tcl_Interp *interp,
int objc,
Tcl_Obj *const*objv
){
return Tcl_NRCallObjProc(interp, DbObjCmd, cd, objc, objv);
}
#endif /* SQLITE_TCL_NRE */
/* /*
** sqlite3 DBNAME FILENAME ?-vfs VFSNAME? ?-key KEY? ?-readonly BOOLEAN? ** sqlite3 DBNAME FILENAME ?-vfs VFSNAME? ?-key KEY? ?-readonly BOOLEAN?
** ?-create BOOLEAN? ?-nomutex BOOLEAN? ** ?-create BOOLEAN? ?-nomutex BOOLEAN?
@ -2907,7 +2924,8 @@ static int DbMain(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
p->interp = interp; p->interp = interp;
zArg = Tcl_GetStringFromObj(objv[1], 0); zArg = Tcl_GetStringFromObj(objv[1], 0);
if( DbUseNre() ){ if( DbUseNre() ){
Tcl_NRCreateCommand(interp, zArg, 0, DbObjCmd, (char*)p, DbDeleteCmd); Tcl_NRCreateCommand(interp, zArg, DbObjCmdAdaptor, DbObjCmd,
(char*)p, DbDeleteCmd);
}else{ }else{
Tcl_CreateObjCommand(interp, zArg, DbObjCmd, (char*)p, DbDeleteCmd); Tcl_CreateObjCommand(interp, zArg, DbObjCmd, (char*)p, DbDeleteCmd);
} }

View File

@ -4868,6 +4868,37 @@ static int test_unlock_notify(
#endif #endif
/*
** tcl_objproc COMMANDNAME ARGS...
**
** Run a TCL command using its objProc interface. Throw an error if
** the command has no objProc interface.
*/
static int runAsObjProc(
void * clientData,
Tcl_Interp *interp,
int objc,
Tcl_Obj *CONST objv[]
){
Tcl_CmdInfo cmdInfo;
if( objc<2 ){
Tcl_WrongNumArgs(interp, 1, objv, "COMMAND ...");
return TCL_ERROR;
}
if( !Tcl_GetCommandInfo(interp, Tcl_GetString(objv[1]), &cmdInfo) ){
Tcl_AppendResult(interp, "command not found: ",
Tcl_GetString(objv[1]), (char*)0);
return TCL_ERROR;
}
if( cmdInfo.objProc==0 ){
Tcl_AppendResult(interp, "command has no objProc: ",
Tcl_GetString(objv[1]), (char*)0);
return TCL_ERROR;
}
return cmdInfo.objProc(cmdInfo.objClientData, interp, objc-1, objv+1);
}
/* /*
** Register commands with the TCL interpreter. ** Register commands with the TCL interpreter.
*/ */
@ -4984,6 +5015,7 @@ int Sqlitetest1_Init(Tcl_Interp *interp){
{ "save_prng_state", save_prng_state, 0 }, { "save_prng_state", save_prng_state, 0 },
{ "restore_prng_state", restore_prng_state, 0 }, { "restore_prng_state", restore_prng_state, 0 },
{ "reset_prng_state", reset_prng_state, 0 }, { "reset_prng_state", reset_prng_state, 0 },
{ "tcl_objproc", runAsObjProc, 0 },
/* sqlite3_column_*() API */ /* sqlite3_column_*() API */
{ "sqlite3_column_count", test_column_count ,0 }, { "sqlite3_column_count", test_column_count ,0 },

View File

@ -569,6 +569,9 @@ do_test tcl-11.2 {
do_test tcl-11.3 { do_test tcl-11.3 {
db exists {SELECT 1 FROM t4 WHERE x==8} db exists {SELECT 1 FROM t4 WHERE x==8}
} {0} } {0}
do_test tcl-11.3.1 {
tcl_objproc db exists {SELECT 1 FROM t4 WHERE x==8}
} {0}
do_test tcl-12.1 { do_test tcl-12.1 {
unset -nocomplain a b c version unset -nocomplain a b c version