Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add the mode=memory option to URI filenames, which when present forces the database to be an in-memory database. This enables named in-memory databases. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
651520fa84ee0c488bef660bab986550 |
User & Date: | drh 2012-05-28 13:58:00.304 |
Context
2012-05-28
| ||
15:32 | Fix Makefile.in so that it works with the new unicode tokenizer of FTS3/4. Update the version number to 3.7.13. (check-in: b8720d0416 user: drh tags: trunk) | |
13:58 | Add the mode=memory option to URI filenames, which when present forces the database to be an in-memory database. This enables named in-memory databases. (check-in: 651520fa84 user: drh tags: trunk) | |
12:22 | Omit the fts3 unicode character class routines from the build if fts3/4 is disabled. (check-in: c00bb5d460 user: drh tags: trunk) | |
Changes
Changes to src/btree.c.
︙ | ︙ | |||
1717 1718 1719 1720 1721 1722 1723 | /* Set the variable isMemdb to true for an in-memory database, or ** false for a file-based database. */ #ifdef SQLITE_OMIT_MEMORYDB const int isMemdb = 0; #else const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0) | | > | 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 | /* Set the variable isMemdb to true for an in-memory database, or ** false for a file-based database. */ #ifdef SQLITE_OMIT_MEMORYDB const int isMemdb = 0; #else const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0) || (isTempDb && sqlite3TempInMemory(db)) || (vfsFlags & SQLITE_OPEN_MEMORY)!=0; #endif assert( db!=0 ); assert( pVfs!=0 ); assert( sqlite3_mutex_held(db->mutex) ); assert( (flags&0xff)==flags ); /* flags fit in 8 bits */ |
︙ | ︙ |
Changes to src/main.c.
︙ | ︙ | |||
2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 | zModeType = "cache"; } if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){ static struct OpenMode aOpenMode[] = { { "ro", SQLITE_OPEN_READONLY }, { "rw", SQLITE_OPEN_READWRITE }, { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE }, { 0, 0 } }; | > > > | > | | 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 | zModeType = "cache"; } if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){ static struct OpenMode aOpenMode[] = { { "ro", SQLITE_OPEN_READONLY }, { "rw", SQLITE_OPEN_READWRITE }, { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE }, { "memory", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MEMORY }, { 0, 0 } }; mask = SQLITE_OPEN_READONLY | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MEMORY; aMode = aOpenMode; limit = mask & flags; zModeType = "access"; } if( aMode ){ int i; int mode = 0; for(i=0; aMode[i].z; i++){ const char *z = aMode[i].z; if( nVal==sqlite3Strlen30(z) && 0==memcmp(zVal, z, nVal) ){ mode = aMode[i].mode; break; } } if( mode==0 ){ *pzErrMsg = sqlite3_mprintf("no such %s mode: %s", zModeType, zVal); rc = SQLITE_ERROR; goto parse_uri_out; } if( (mode & ~SQLITE_OPEN_MEMORY)>limit ){ *pzErrMsg = sqlite3_mprintf("%s mode not allowed: %s", zModeType, zVal); rc = SQLITE_PERM; goto parse_uri_out; } flags = (flags & ~mask) | mode; } |
︙ | ︙ |
Changes to src/sqlite.h.in.
︙ | ︙ | |||
469 470 471 472 473 474 475 476 477 478 479 480 481 482 | #define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */ #define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS only */ #define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS only */ #define SQLITE_OPEN_URI 0x00000040 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS only */ #define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS only */ #define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS only */ #define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 /* VFS only */ #define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 /* VFS only */ #define SQLITE_OPEN_SUBJOURNAL 0x00002000 /* VFS only */ #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS only */ | > | 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 | #define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */ #define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS only */ #define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS only */ #define SQLITE_OPEN_URI 0x00000040 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_MEMORY 0x00000080 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS only */ #define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS only */ #define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS only */ #define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 /* VFS only */ #define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 /* VFS only */ #define SQLITE_OPEN_SUBJOURNAL 0x00002000 /* VFS only */ #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS only */ |
︙ | ︙ |
Changes to test/e_uri.test.
︙ | ︙ | |||
250 251 252 253 254 255 256 257 258 259 260 261 262 263 | foreach {tn uri error} " 1 {file:test.db?mode=ro} {not an error} 2 {file:test.db?mode=rw} {not an error} 3 {file:test.db?mode=rwc} {not an error} 4 {file:test.db?mode=Ro} {no such access mode: Ro} 5 {file:test.db?mode=Rw} {no such access mode: Rw} 6 {file:test.db?mode=Rwc} {no such access mode: Rwc} " { do_test 7.$tn { open_uri_error $uri } $error } # EVIDENCE-OF: R-09651-31805 If "ro" is specified, then the database is # opened for read-only access, just as if the SQLITE_OPEN_READONLY flag | > > | 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 | foreach {tn uri error} " 1 {file:test.db?mode=ro} {not an error} 2 {file:test.db?mode=rw} {not an error} 3 {file:test.db?mode=rwc} {not an error} 4 {file:test.db?mode=Ro} {no such access mode: Ro} 5 {file:test.db?mode=Rw} {no such access mode: Rw} 6 {file:test.db?mode=Rwc} {no such access mode: Rwc} 7 {file:test.db?mode=memory} {not an error} 8 {file:test.db?mode=MEMORY} {no such access mode: MEMORY} " { do_test 7.$tn { open_uri_error $uri } $error } # EVIDENCE-OF: R-09651-31805 If "ro" is specified, then the database is # opened for read-only access, just as if the SQLITE_OPEN_READONLY flag |
︙ | ︙ |
Changes to test/shared.test.
︙ | ︙ | |||
1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 | db1 eval { CREATE TABLE t1(x); INSERT INTO t1 VALUES(4),(5),(6); } catchsql { SELECT * FROM t1; } db2 } {1 {no such table: t1}} db1 close db2 close } ;# end of autovacuum on/off loop sqlite3_enable_shared_cache $::enable_shared_cache finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 | db1 eval { CREATE TABLE t1(x); INSERT INTO t1 VALUES(4),(5),(6); } catchsql { SELECT * FROM t1; } db2 } {1 {no such table: t1}} # Shared cache on named memory databases. # do_test shared-$av-16.4 { db1 close db2 close forcedelete test.db test.db-wal test.db-journal sqlite3 db1 file:test.db?mode=memory -uri 1 sqlite3 db2 file:test.db?mode=memory -uri 1 db1 eval { CREATE TABLE t1(x); INSERT INTO t1 VALUES(1),(2),(3); } db2 eval { SELECT x FROM t1 ORDER BY x; } } {1 2 3} do_test shared-$av-16.5 { db2 eval { INSERT INTO t1 VALUES(99); DELETE FROM t1 WHERE x=2; } db1 eval { SELECT x FROM t1 ORDER BY x; } } {1 3 99} do_test shared-$av-16.6 { file exists test.db } {0} ;# Verify that the database is in-memory # Shared cache on named memory databases with different names. # do_test shared-$av-16.7 { db1 close db2 close forcedelete test1.db test2.db sqlite3 db1 file:test1.db?mode=memory -uri 1 sqlite3 db2 file:test2.db?mode=memory -uri 1 db1 eval { CREATE TABLE t1(x); INSERT INTO t1 VALUES(1),(2),(3); } catchsql { SELECT x FROM t1 ORDER BY x; } db2 } {1 {no such table: t1}} do_test shared-$av-16.8 { file exists test1.db } {0} ;# Verify that the database is in-memory db1 close db2 close } ;# end of autovacuum on/off loop sqlite3_enable_shared_cache $::enable_shared_cache finish_test |