/ Check-in [73ba841a]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Honor the SQLITE_OPEN_READONLY flag even on a :memory: or temporary database, even though such a database is pointless. Ticket #3908. (CVS 6748)
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:73ba841ac1ed39fb09b3917bafe0ce349e88eb04
User & Date: drh 2009-06-11 17:32:45
Context
2009-06-12
02:27
Modifications to the parser to eliminate unreachable code. (CVS 6749) check-in: 457e0b24 user: drh tags: trunk
2009-06-11
17:32
Honor the SQLITE_OPEN_READONLY flag even on a :memory: or temporary database, even though such a database is pointless. Ticket #3908. (CVS 6748) check-in: 73ba841a user: drh tags: trunk
17:04
Add an ALWAYS() to a conditional in where.c. (CVS 6747) check-in: 1fdb3e1e user: drh tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to src/pager.c.

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
....
3269
3270
3271
3272
3273
3274
3275

3276
3277
3278
3279
3280
3281
3282
** The pager is used to access a database disk file.  It implements
** atomic commit and rollback through the use of a journal file that
** is separate from the database file.  The pager also implements file
** locking to prevent two processes from writing the same database
** file simultaneously, or one process from reading the database while
** another is writing.
**
** @(#) $Id: pager.c,v 1.592 2009/06/11 00:47:21 drh Exp $
*/
#ifndef SQLITE_OMIT_DISKIO
#include "sqliteInt.h"

/*
** Macros for troubleshooting.  Normally turned off
*/
................................................................................
    **
    ** This branch is also run for an in-memory database. An in-memory
    ** database is the same as a temp-file that is never written out to
    ** disk and uses an in-memory rollback journal.
    */ 
    tempFile = 1;
    pPager->state = PAGER_EXCLUSIVE;

  }

  /* The following call to PagerSetPagesize() serves to set the value of 
  ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer.
  */
  if( rc==SQLITE_OK ){
    assert( pPager->memDb==0 );







|







 







>







14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
....
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
** The pager is used to access a database disk file.  It implements
** atomic commit and rollback through the use of a journal file that
** is separate from the database file.  The pager also implements file
** locking to prevent two processes from writing the same database
** file simultaneously, or one process from reading the database while
** another is writing.
**
** @(#) $Id: pager.c,v 1.593 2009/06/11 17:32:45 drh Exp $
*/
#ifndef SQLITE_OMIT_DISKIO
#include "sqliteInt.h"

/*
** Macros for troubleshooting.  Normally turned off
*/
................................................................................
    **
    ** This branch is also run for an in-memory database. An in-memory
    ** database is the same as a temp-file that is never written out to
    ** disk and uses an in-memory rollback journal.
    */ 
    tempFile = 1;
    pPager->state = PAGER_EXCLUSIVE;
    readOnly = (vfsFlags&SQLITE_OPEN_READONLY);
  }

  /* The following call to PagerSetPagesize() serves to set the value of 
  ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer.
  */
  if( rc==SQLITE_OK ){
    assert( pPager->memDb==0 );

Changes to test/openv2.test.

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
..
33
34
35
36
37
38
39
40














41
#    May you find forgiveness for yourself and forgive others.
#    May you share freely, never taking more than you give.
#
#***********************************************************************
#
# Tests on the sqlite3_open_v2() interface.
#
# $Id: openv2.test,v 1.1 2007/09/03 15:19:36 drh Exp $

set testdir [file dirname $argv0]
source $testdir/tester.tcl

db close
file delete -force test.db test.db-journal
do_test openv2-1.1 {
................................................................................
  db eval {SELECT name FROM sqlite_master}
} {t1}
do_test openv2-1.4 {
  catchsql {
    INSERT INTO t1 VALUES(123)
  }
} {1 {attempt to write a readonly database}}















finish_test







|







 








>
>
>
>
>
>
>
>
>
>
>
>
>
>

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
..
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#    May you find forgiveness for yourself and forgive others.
#    May you share freely, never taking more than you give.
#
#***********************************************************************
#
# Tests on the sqlite3_open_v2() interface.
#
# $Id: openv2.test,v 1.2 2009/06/11 17:32:45 drh Exp $

set testdir [file dirname $argv0]
source $testdir/tester.tcl

db close
file delete -force test.db test.db-journal
do_test openv2-1.1 {
................................................................................
  db eval {SELECT name FROM sqlite_master}
} {t1}
do_test openv2-1.4 {
  catchsql {
    INSERT INTO t1 VALUES(123)
  }
} {1 {attempt to write a readonly database}}

# Ticket #3908
# Honor SQLITE_OPEN_READONLY even on an in-memory database, even though
# this is pointless.
#
do_test openv2-2.1 {
  db close
  sqlite3 db :memory: -readonly 1
  db eval {SELECT * FROM sqlite_master}
} {}
do_test openv2-2.2 {
  catchsql {CREATE TABLE t1(x)}
} {1 {attempt to write a readonly database}}


finish_test