From: drh Date: Wed, 14 Jun 2006 23:43:31 +0000 (+0000) Subject: Changes to test8.c to support UPDATE operations on xUpdate. (CVS 3250) X-Git-Tag: version-3.6.10~2917 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5aec042e275dee61ceee172e7ec9d32c2d881bd4;p=thirdparty%2Fsqlite.git Changes to test8.c to support UPDATE operations on xUpdate. (CVS 3250) FossilOrigin-Name: 9e96511f83476e489fa62a05241393a851cbac5c --- diff --git a/manifest b/manifest index 642ddcc3db..79db0f9184 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Bug\sfixes\sin\sthe\sMATCH\sand\sORDER\sBY\sprocessing\sof\svirtual\stables.\s(CVS\s3249) -D 2006-06-14T22:07:11 +C Changes\sto\stest8.c\sto\ssupport\sUPDATE\soperations\son\sxUpdate.\s(CVS\s3250) +D 2006-06-14T23:43:31 F Makefile.in 200f6dc376ecfd9b01e5359c4e0c10c02f649b34 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -84,7 +84,7 @@ F src/test4.c 8b784cd82de158a2317cb4ac4bc86f91ad315e25 F src/test5.c 7162f8526affb771c4ed256826eee7bb9eca265f F src/test6.c 60a02961ceb7b3edc25f5dc5c1ac2556622a76de F src/test7.c 03fa8d787f6aebc6d1f72504d52f33013ad2c8e3 -F src/test8.c e923b74e2e627d5d53413b3d69fc89b621eb8253 +F src/test8.c 2f38a6c295f15dd9dbb3db954be21aa8ea3c284b F src/test_async.c e3deaedd4d86a56391b81808fde9e44fbd92f1d3 F src/test_loadext.c 22065d601a18878e5542191001f0eaa5d77c0ed8 F src/test_md5.c 6c42bc0a3c0b54be34623ff77a0eec32b2fa96e3 @@ -366,7 +366,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P 32c97b884b104d120db3c0a87f5eab28f36851f8 -R 343eac0ed8ef0f1713e901c87b91ee1c +P c996185a9e0671e46bed06e5803b1ca3b42d61e2 +R ee3ad5273671026614072c99f84a0525 U drh -Z 8a0af575be32f8c2cbffbf5691e9cf94 +Z bbafadf19467cae14bf8a8d2edcf9481 diff --git a/manifest.uuid b/manifest.uuid index ddb18854d1..c7b1c9268c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c996185a9e0671e46bed06e5803b1ca3b42d61e2 \ No newline at end of file +9e96511f83476e489fa62a05241393a851cbac5c \ No newline at end of file diff --git a/src/test8.c b/src/test8.c index 61f3404dd2..7742216350 100644 --- a/src/test8.c +++ b/src/test8.c @@ -13,7 +13,7 @@ ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** -** $Id: test8.c,v 1.18 2006/06/14 22:07:11 drh Exp $ +** $Id: test8.c,v 1.19 2006/06/14 23:43:31 drh Exp $ */ #include "sqliteInt.h" #include "tcl.h" @@ -486,6 +486,69 @@ int echoUpdate(sqlite3_vtab *tab, int nData, sqlite3_value **apData){ assert( nData==pVtab->nCol+2 || nData==1 ); + /* If apData[0] is an integer and nData>1 then do an UPDATE */ + if( nData>1 && sqlite3_value_type(apData[0])==SQLITE_INTEGER ){ + char *zUpdate = sqlite3_mprintf("UPDATE %Q", pVtab->zTableName); + char *zSep = " SET"; + char *zTemp; + int i, j; + sqlite3_stmt *pStmt; + + if( apData[1] && sqlite3_value_type(apData[1]) && + sqlite3_value_int64(apData[0])!=sqlite3_value_int64(apData[1]) ){ + zTemp = sqlite3_mprintf("%s SET rowid=%lld", zUpdate, zSep, + sqlite3_value_int64(apData[1])); + sqlite3_free(zUpdate); + zUpdate = zTemp; + zSep = ","; + } + for(i=2; iaCol[i-2]); + sqlite3_free(zUpdate); + zUpdate = zTemp; + zSep = ","; + } + zTemp = sqlite3_mprintf("%s WHERE rowid=%lld", zUpdate, + sqlite3_value_int64(apData[0])); + sqlite3_free(zUpdate); + zUpdate = zTemp; + rc = sqlite3_prepare(db, zUpdate, -1, &pStmt, 0); + assert( rc!=SQLITE_OK || pStmt ); + if( rc ) return rc; + for(i=2, j=1; i