]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Test that the binary record "0x01 0x00" is interpreted by OP_Column as a vector of...
authordan <dan@noemail.net>
Mon, 26 Oct 2015 16:31:18 +0000 (16:31 +0000)
committerdan <dan@noemail.net>
Mon, 26 Oct 2015 16:31:18 +0000 (16:31 +0000)
FossilOrigin-Name: 5bdc3c82bd10f924c12568eb0fa7a07393fc864f

manifest
manifest.uuid
src/test3.c
test/fordelete.test

index 6617a2ff55d55f72ae1d44d2c3244b7bb8bf35f6..afc30e4aa57bfca5e8ae68d83af2c083da139580 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\san\sunused\s#define\sfrom\swhereInt.h.\sAdd\scomments\sdescribing\sthe\snew\ssqlite3BtreeCursor()\sflags.
-D 2015-10-23T11:50:23.745
+C Test\sthat\sthe\sbinary\srecord\s"0x01\s0x00"\sis\sinterpreted\sby\sOP_Column\sas\sa\svector\sof\sNULL\s(or\sdefault)\svalues.
+D 2015-10-26T16:31:18.909
 F Makefile.in 2ea961bc09e441874eb3d1bf7398e04feb24f3ee
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 702d3e98f3afc6587a78481257f3c4c900efc3a4
@@ -350,7 +350,7 @@ F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
 F src/tclsqlite.c d9439b6a910985b7fff43ba6756bcef00de22649
 F src/test1.c 8fff9c5aa63d6490f516d018b70c12a9cb9a4d8a
 F src/test2.c 577961fe48961b2f2e5c8b56ee50c3f459d3359d
-F src/test3.c 11b13d561846e5d1ffd29653be340d2f4b59a723
+F src/test3.c 5d5e771bee407b2a8bee1602228eca167f8f649a
 F src/test4.c d168f83cc78d02e8d35567bb5630e40dcd85ac1e
 F src/test5.c 5a34feec76d9b3a86aab30fd4f6cc9c48cbab4c1
 F src/test6.c 41cacf3b0dd180823919bf9e1fbab287c9266723
@@ -628,7 +628,7 @@ F test/fkey6.test abb59f866c1b44926fd02d1fdd217d831fe04f48
 F test/fkey7.test 72e915890ee4a005daaf3002cb208e8fe973ac13
 F test/fkey8.test 8f08203458321e6c19a263829de4cfc936274ab0
 F test/fkey_malloc.test 594a7ea1fbab553c036c70813cd8bd9407d63749
-F test/fordelete.test a30de567eb69a377e0c3ab1a8be4d74588de2a33
+F test/fordelete.test ba12ec1d27cc34a4c23db4446029126d773f3849
 F test/format4.test 1f0cac8ff3895e9359ed87e41aaabee982a812eb
 F test/fts-9fd058691.test 78b887e30ae6816df0e1fed6259de4b5a64ad33c
 F test/fts1a.test 46090311f85da51bb33bd5ce84f7948359c6d8d7
@@ -1392,7 +1392,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P cdc92919e600007cae5eb61223684f48a65babc0
-R 372ed0826353f0987c018dd56c7ed9e6
+P 4c0ba8be43bb7c7100456bd8cd6921c164be31e1
+R 034dc33437dfb21294c759656e936af8
 U dan
-Z 7d97368360f9df42d106befc4db01e49
+Z d7a6f95ed6a65ff4ab5499c664dec3c3
index cd45c7b9d43c5f4870ac34ea8b2713ef65dc57fa..aadca6e500f0ee050817c89e08263fed23dae129 100644 (file)
@@ -1 +1 @@
-4c0ba8be43bb7c7100456bd8cd6921c164be31e1
\ No newline at end of file
+5bdc3c82bd10f924c12568eb0fa7a07393fc864f
\ No newline at end of file
index 7cb29bedcb19219fd5d1150752193486b9d652ec..da3296022ab235077a768a8e67ed7f14ba28ce48 100644 (file)
@@ -219,7 +219,7 @@ static int btree_cursor(
   memset(pCur, 0, sqlite3BtreeCursorSize());
   sqlite3BtreeEnter(pBt);
 #ifndef SQLITE_OMIT_SHARED_CACHE
-  rc = sqlite3BtreeLockTable(pBt, iTable, wrFlag);
+  rc = sqlite3BtreeLockTable(pBt, iTable, !!wrFlag);
 #endif
   if( rc==SQLITE_OK ){
     rc = sqlite3BtreeCursor(pBt, iTable, wrFlag, 0, pCur);
@@ -599,6 +599,51 @@ static int btree_set_cache_size(
   return TCL_OK;
 }      
 
+/*
+** usage:   btree_insert CSR ?KEY? VALUE
+**
+** Set the size of the cache used by btree $ID.
+*/
+static int btree_insert(
+  ClientData clientData,
+  Tcl_Interp *interp,
+  int objc,
+  Tcl_Obj *const objv[]
+){
+  BtCursor *pCur;
+  int rc;
+  int bIntkey = 0;
+  void *pKey = 0;
+  int nKey = 0;
+  void *pData = 0;
+  int nData = 0;
+
+  if( objc!=4 && objc!=3 ){
+    Tcl_WrongNumArgs(interp, 1, objv, "?-intkey? CSR KEY VALUE");
+    return TCL_ERROR;
+  }
+
+  if( objc==4 ){
+    if( Tcl_GetIntFromObj(interp, objv[2], &nKey) ) return TCL_ERROR;
+    pData = (void*)Tcl_GetByteArrayFromObj(objv[3], &nData);
+  }else{
+    pKey = (void*)Tcl_GetByteArrayFromObj(objv[2], &nKey);
+  }
+  pCur = (BtCursor*)sqlite3TestTextToPtr(Tcl_GetString(objv[1]));
+
+  sqlite3BtreeEnter(pCur->pBtree);
+  if( rc==SQLITE_OK ){
+    rc = sqlite3BtreeInsert(pCur, pKey, nKey, pData, nData, 0, 0, 0);
+  }
+  sqlite3BtreeLeave(pCur->pBtree);
+
+  Tcl_ResetResult(interp);
+  if( rc ){
+    Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
+    return TCL_ERROR;
+  }
+  return TCL_OK;
+}
 
 
 /*
@@ -630,5 +675,7 @@ int Sqlitetest3_Init(Tcl_Interp *interp){
     Tcl_CreateCommand(interp, aCmd[i].zName, aCmd[i].xProc, 0, 0);
   }
 
+  Tcl_CreateObjCommand(interp, "btree_insert", btree_insert, 0, 0);
+
   return TCL_OK;
 }
index dd0f953310fa55979292ac28294e92006d84d0f4..1e860e8867cc26c9a7c55290fa03a982a17fb81a 100644 (file)
@@ -76,5 +76,55 @@ foreach {tn sql res} {
 } {
   do_adp_test 2.$tn $sql $res
 }
+
+#-------------------------------------------------------------------------
+# Test that a record that consists of the bytes:
+#
+#   0x01 0x00
+#
+# is interpreted by OP_Column as a vector of NULL values (assuming the 
+# default column values are NULL). Also test that:
+#
+#   0x00
+#
+# is handled in the same way.
+#
+do_execsql_test 3.0 {
+  CREATE TABLE x1(a INTEGER PRIMARY KEY, b, c, d);
+  CREATE TABLE x2(a INTEGER PRIMARY KEY, b, c, d);
+}
+
+do_test 3.1 {
+  set root [db one { SELECT rootpage FROM sqlite_master WHERE name = 'x1' }]
+  db eval { 
+    BEGIN IMMEDIATE;
+  }
+  set bt [btree_from_db db]
+  set csr [btree_cursor $bt $root 1]
+  btree_insert $csr 5 "\000"
+  btree_close_cursor $csr
+  db eval { COMMIT }
+
+  db eval {
+    SELECT * FROM x1;
+  }
+} {5 {} {} {}}
+
+do_test 3.2 {
+  set root [db one { SELECT rootpage FROM sqlite_master WHERE name = 'x2' }]
+  db eval { 
+    BEGIN IMMEDIATE;
+  }
+  set bt [btree_from_db db]
+  set csr [btree_cursor $bt $root 1]
+  btree_insert $csr 6 "\000"
+  btree_close_cursor $csr
+  db eval { COMMIT }
+
+  db eval {
+    SELECT * FROM x2;
+  }
+} {6 {} {} {}}
+
 finish_test
+