{
php_stream_sqlite3_data *sqlite3_stream = (php_stream_sqlite3_data *) stream->abstract;
- if (sqlite3_stream->flags == 0) {
+ if (sqlite3_stream->flags & SQLITE_OPEN_READONLY) {
php_error_docref(NULL, E_WARNING, "Can't write to blob stream: is open as read only");
return 0;
}
zval *object = getThis();
char *table, *column, *dbname = "main", *mode = "rb";
size_t table_len, column_len, dbname_len;
- zend_long rowid, flags = 0;
+ zend_long rowid, flags = SQLITE_OPEN_READONLY, sqlite_flags = 0;
sqlite3_blob *blob = NULL;
php_stream_sqlite3_data *sqlite3_stream;
php_stream *stream;
return;
}
- if (sqlite3_blob_open(db_obj->db, dbname, table, column, rowid, flags, &blob) != SQLITE_OK) {
+ sqlite_flags = (flags & SQLITE_OPEN_READWRITE) ? 1 : 0;
+
+ if (sqlite3_blob_open(db_obj->db, dbname, table, column, rowid, sqlite_flags, &blob) != SQLITE_OK) {
php_sqlite3_error(db_obj, "Unable to open blob: %s", sqlite3_errmsg(db_obj->db));
RETURN_FALSE;
}
sqlite3_stream->position = 0;
sqlite3_stream->size = sqlite3_blob_bytes(blob);
- if (flags != 0) {
+ if (sqlite_flags != 0) {
mode = "r+b";
}
var_dump($stream);
echo "Stream Contents\n";
var_dump(stream_get_contents($stream));
+echo "Writing to read-only stream\n";
+var_dump(fwrite($stream, 'ABCD'));
echo "Closing Stream\n";
var_dump(fclose($stream));
echo "Opening stream in write mode\n";
-$stream = $db->openBlob('test', 'data', 1, 'main', 1);
+$stream = $db->openBlob('test', 'data', 1, 'main', SQLITE3_OPEN_READWRITE);
var_dump($stream);
echo "Writing to blob\n";
var_dump(fwrite($stream, 'ABCD'));
echo "Stream Contents\n";
fseek($stream, 0);
var_dump(stream_get_contents($stream));
+echo "Expanding blob size\n";
+var_dump(fwrite($stream, 'ABCD ABCD ABCD'));
echo "Closing Stream\n";
var_dump(fclose($stream));
echo "Closing database\n";
resource(%d) of type (stream)
Stream Contents
string(9) "TEST TEST"
+Writing to read-only stream
+
+Warning: fwrite(): Can't write to blob stream: is open as read only in %s on line %d
+int(0)
Closing Stream
bool(true)
Opening stream in write mode
int(4)
Stream Contents
string(9) "ABCD TEST"
+Expanding blob size
+
+Warning: fwrite(): It is not possible to increase the size of a BLOB in %s on line %d
+int(0)
Closing Stream
bool(true)
Closing database