NewSqlite returns a new SQLite3 instance attached to filename.
(filename string)
| 94 | |
| 95 | // NewSqlite returns a new SQLite3 instance attached to filename. |
| 96 | func NewSqlite(filename string) (s *SQLite3, err error) { |
| 97 | var ( |
| 98 | instance = &SQLite3{filename: filename} |
| 99 | shmRODSN string |
| 100 | privRODSN string |
| 101 | shmRWDSN string |
| 102 | dsn *storage.DSN |
| 103 | ) |
| 104 | |
| 105 | if dsn, err = storage.NewDSN(filename); err != nil { |
| 106 | return |
| 107 | } |
| 108 | |
| 109 | dsnRO := dsn.Clone() |
| 110 | dsnRO.AddParam("_journal_mode", "WAL") |
| 111 | dsnRO.AddParam("_query_only", "on") |
| 112 | dsnRO.AddParam("cache", "shared") |
| 113 | shmRODSN = dsnRO.Format() |
| 114 | |
| 115 | dsnPrivRO := dsn.Clone() |
| 116 | dsnPrivRO.AddParam("_journal_mode", "WAL") |
| 117 | dsnPrivRO.AddParam("_query_only", "on") |
| 118 | privRODSN = dsnPrivRO.Format() |
| 119 | |
| 120 | dsnSHMRW := dsn.Clone() |
| 121 | dsnSHMRW.AddParam("_journal_mode", "WAL") |
| 122 | dsnSHMRW.AddParam("cache", "shared") |
| 123 | shmRWDSN = dsnSHMRW.Format() |
| 124 | |
| 125 | if instance.dirtyReader, err = sql.Open(dirtyReadDriver, shmRODSN); err != nil { |
| 126 | return |
| 127 | } |
| 128 | if instance.reader, err = sql.Open(serializableDriver, privRODSN); err != nil { |
| 129 | return |
| 130 | } |
| 131 | if instance.writer, err = sql.Open(serializableDriver, shmRWDSN); err != nil { |
| 132 | return |
| 133 | } |
| 134 | s = instance |
| 135 | return |
| 136 | } |
| 137 | |
| 138 | // DirtyReader implements DirtyReader method of the xenomint/interfaces.Storage interface. |
| 139 | func (s *SQLite3) DirtyReader() *sql.DB { |