Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | The TCL interface responds correctly to "break", "continue", and "return" inside of the script of an eval statement. (CVS 1958) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
dd62224ae8d1047db388acdc4b91eb56 |
User & Date: | drh 2004-09-13 13:16:32.000 |
Context
2004-09-13
| ||
13:46 | Remove the encode/decode from the version 3.0 source tree. (CVS 1959) (check-in: c1f1320be5 user: drh tags: trunk) | |
13:16 | The TCL interface responds correctly to "break", "continue", and "return" inside of the script of an eval statement. (CVS 1958) (check-in: dd62224ae8 user: drh tags: trunk) | |
13:13 | Fix an uninitialized variable bug in nullif(). Ticket #898. (CVS 1957) (check-in: ee335b501c user: drh tags: trunk) | |
Changes
Changes to src/tclsqlite.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* ** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** A TCL Interface to SQLite ** | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* ** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** A TCL Interface to SQLite ** ** $Id: tclsqlite.c,v 1.106 2004/09/13 13:16:32 drh Exp $ */ #ifndef NO_TCL /* Omit this whole file if TCL is unavailable */ #include "sqliteInt.h" #include "hash.h" #include "tcl.h" #include <stdlib.h> |
︙ | ︙ | |||
660 661 662 663 664 665 666 | pArray = objv[3]; if( Tcl_GetString(pArray)[0]==0 ) pArray = 0; pScript = objv[4]; } Tcl_IncrRefCount(objv[2]); zSql = Tcl_GetStringFromObj(objv[2], 0); | | | 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 | pArray = objv[3]; if( Tcl_GetString(pArray)[0]==0 ) pArray = 0; pScript = objv[4]; } Tcl_IncrRefCount(objv[2]); zSql = Tcl_GetStringFromObj(objv[2], 0); while( rc==TCL_OK && zSql[0] ){ int i; /* Loop counter */ int nVar; /* Number of wildcards in the SQL */ int nCol; /* Number of columns in the result set */ Tcl_Obj **apColName = 0; /* Array of column names */ /* Compile a single SQL statement */ if( SQLITE_OK!=sqlite3_prepare(pDb->db, zSql, -1, &pStmt, &zLeft) ){ |
︙ | ︙ | |||
748 749 750 751 752 753 754 | Tcl_ListObjAppendElement(interp, pColList, apColName[i]); } Tcl_ObjSetVar2(interp, pArray, Tcl_NewStringObj("*",-1), pColList,0); } /* Execute the SQL */ | | | 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 | Tcl_ListObjAppendElement(interp, pColList, apColName[i]); } Tcl_ObjSetVar2(interp, pArray, Tcl_NewStringObj("*",-1), pColList,0); } /* Execute the SQL */ while( rc==TCL_OK && pStmt && SQLITE_ROW==sqlite3_step(pStmt) ){ for(i=0; i<nCol; i++){ Tcl_Obj *pVal; /* Set pVal to contain the i'th column of this row. */ switch( sqlite3_column_type(pStmt, i) ){ case SQLITE_BLOB: { int bytes = sqlite3_column_bytes(pStmt, i); |
︙ | ︙ | |||
790 791 792 793 794 795 796 | Tcl_ObjSetVar2(interp, pArray, apColName[i], pVal, 0); } }else if( choice==DB_ONECOLUMN ){ if( pRet==0 ){ pRet = pVal; Tcl_IncrRefCount(pRet); } | | > | | | > > | > | 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 | Tcl_ObjSetVar2(interp, pArray, apColName[i], pVal, 0); } }else if( choice==DB_ONECOLUMN ){ if( pRet==0 ){ pRet = pVal; Tcl_IncrRefCount(pRet); } rc = TCL_BREAK; }else{ Tcl_ListObjAppendElement(interp, pRet, pVal); } } if( pScript ){ rc = Tcl_EvalObjEx(interp, pScript, 0); if( rc==TCL_CONTINUE ){ rc = TCL_OK; } } } if( rc==TCL_BREAK ){ rc = TCL_OK; } /* Free the column name objects */ if( pScript ){ for(i=0; i<nCol; i++){ Tcl_DecrRefCount(apColName[i]); } Tcl_Free((char*)apColName); |
︙ | ︙ | |||
842 843 844 845 846 847 848 | if( pRet ){ if( rc==TCL_OK ){ Tcl_SetObjResult(interp, pRet); } Tcl_DecrRefCount(pRet); } | < | 846 847 848 849 850 851 852 853 854 855 856 857 858 859 | if( pRet ){ if( rc==TCL_OK ){ Tcl_SetObjResult(interp, pRet); } Tcl_DecrRefCount(pRet); } break; } /* ** $db function NAME SCRIPT ** ** Create a new SQL function called NAME. Whenever that function is |
︙ | ︙ |