MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / Open

Method Open

tensorflow/core/lib/db/sqlite.cc:113–154  ·  view source on GitHub ↗

static */

Source from the content-addressed store, hash-verified

111
112/* static */
113Status Sqlite::Open(const string& path, int flags, Sqlite** db) {
114 flags |= SQLITE_OPEN_PRIVATECACHE;
115 flags |= SQLITE_OPEN_URI;
116 sqlite3* sqlite = nullptr;
117 int rc = sqlite3_open_v2(path.c_str(), &sqlite, flags, nullptr);
118 if (rc != SQLITE_OK) {
119 *db = nullptr;
120 return PrintfStatus(rc, "Sqlite::Open(%s) failed: %s", path.c_str(),
121 sqlite3_errstr(rc));
122 }
123 CHECK_EQ(SQLITE_OK, sqlite3_extended_result_codes(sqlite, 1));
124 CHECK_EQ(SQLITE_OK, sqlite3_snapfn_init(sqlite, nullptr, nullptr));
125 // Prepare these tiny privileged statements for SqliteTransaction
126 // so it can do less work, particularly in its constructor, per
127 // Google C++ Style.
128 sqlite3_stmt* begin = PrepareRawOrDie(sqlite, "BEGIN");
129 sqlite3_stmt* commit = PrepareRawOrDie(sqlite, "COMMIT");
130 sqlite3_stmt* rollback = PrepareRawOrDie(sqlite, "ROLLBACK");
131 *db = new Sqlite(sqlite, begin, commit, rollback);
132 Status s = Status::OK();
133 // Up until 2016 the default SQLite page_size was 1024. This ensures
134 // the new default regardless of linkage unless configured otherwise.
135 s.Update(SetPragma(*db, "page_size", "4096"));
136 // TensorFlow is designed to work well in all SQLite modes. However
137 // users might find tuning some these pragmas rewarding, depending on
138 // various considerations. Pragmas are set on a best-effort basis and
139 // might be ignored.
140 s.Update(EnvPragma(*db, "secure_delete", "TF_SQLITE_SECURE_DELETE"));
141 s.Update(EnvPragma(*db, "page_size", "TF_SQLITE_PAGE_SIZE"));
142 s.Update(EnvPragma(*db, "journal_mode", "TF_SQLITE_JOURNAL_MODE"));
143 s.Update(EnvPragma(*db, "synchronous", "TF_SQLITE_SYNCHRONOUS"));
144 s.Update(EnvPragma(*db, "mmap_size", "TF_SQLITE_MMAP_SIZE"));
145 s.Update(EnvPragma(*db, "locking_mode", "TF_SQLITE_LOCKING_MODE"));
146 s.Update(EnvPragma(*db, "cache_size", "TF_SQLITE_CACHE_SIZE"));
147 s.Update(EnvPragma(*db, "auto_vacuum", "TF_SQLITE_AUTO_VACUUM"));
148 DCHECK((*db)->RefCountIsOne());
149 if (!s.ok()) {
150 (*db)->Unref();
151 *db = nullptr;
152 }
153 return s;
154}
155
156Sqlite::~Sqlite() {
157 sqlite3_finalize(rollback_);

Callers

nothing calls this directly

Calls 10

PrintfStatusFunction · 0.85
sqlite3_snapfn_initFunction · 0.85
PrepareRawOrDieFunction · 0.85
SetPragmaFunction · 0.85
EnvPragmaFunction · 0.85
c_strMethod · 0.80
UpdateMethod · 0.45
RefCountIsOneMethod · 0.45
okMethod · 0.45
UnrefMethod · 0.45

Tested by

no test coverage detected