public void test_blob_read_with_byte_array_offset() { using (sqlite3 db = ugly.open(":memory:")) { const int len = 100; db.exec("CREATE TABLE foo (b blob);"); db.exec("INSERT INTO foo (b) VALUES (zeroblob(?))", len); long rowid = db.last_insert_rowid(); byte[] blob = db.query_scalar <byte[]>("SELECT b FROM foo;"); Assert.AreEqual(blob.Length, len); using (sqlite3_blob bh = db.blob_open("main", "foo", "b", rowid, 0)) { int len2 = bh.bytes(); Assert.AreEqual(len, len2); byte[] blob2 = new byte[len]; for (int i = 0; i < len; i++) { blob2[i] = 73; } bh.read(blob2, 40, 20, 40); for (int i = 0; i < 40; i++) { Assert.AreEqual(blob2[i], 73); } for (int i = 40; i < 60; i++) { Assert.AreEqual(blob2[i], 0); } for (int i = 60; i < 100; i++) { Assert.AreEqual(blob2[i], 73); } } } }
public void test_blob_read() { using (sqlite3 db = ugly.open(":memory:")) { const int len = 100; db.exec("CREATE TABLE foo (b blob);"); db.exec("INSERT INTO foo (b) VALUES (randomblob(?))", len); long rowid = db.last_insert_rowid(); byte[] blob = db.query_scalar <byte[]>("SELECT b FROM foo;"); Assert.AreEqual(blob.Length, len); using (sqlite3_blob bh = db.blob_open("main", "foo", "b", rowid, 0)) { int len2 = bh.bytes(); Assert.AreEqual(len, len2); int passes = 10; Assert.AreEqual(len % passes, 0); int sublen = len / passes; byte[] buf = new byte[sublen]; for (int q = 0; q < passes; q++) { bh.read(buf, q * sublen); for (int i = 0; i < sublen; i++) { Assert.AreEqual(blob[q * sublen + i], buf[i]); } } } } }