MCPcopy Create free account
hub / github.com/ElementsProject/lightning / db_sqlite3_setup

Function db_sqlite3_setup

db/db_sqlite3.c:99–223  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

97}
98
99static bool db_sqlite3_setup(struct db *db, bool create)
100{
101 char *filename;
102 char *sep;
103 char *backup_filename = NULL;
104 sqlite3_stmt *stmt;
105 sqlite3 *sql;
106 int err, flags;
107 struct db_sqlite3 *wrapper;
108
109 if (!strstarts(db->filename, "sqlite3://") || strlen(db->filename) < 10)
110 db_fatal(db, "Could not parse the wallet DSN: %s", db->filename);
111
112 flags = SQLITE_OPEN_READWRITE;
113 if (create)
114 flags |= SQLITE_OPEN_CREATE;
115
116 /* Strip the scheme from the dsn. */
117 filename = db->filename + strlen("sqlite3://");
118 /* Look for a replica specification. */
119 sep = strchr(filename, ':');
120 if (sep) {
121 /* Split at ':'. */
122 filename = tal_strndup(db, filename, sep - filename);
123 backup_filename = tal_strdup(db, sep + 1);
124 }
125
126 wrapper = tal(db, struct db_sqlite3);
127 db->conn = wrapper;
128
129 err = sqlite3_open_v2(filename, &sql, flags, NULL);
130 if (err != SQLITE_OK) {
131 /* Note: even on error, the sql connection is allocated! */
132 sqlite3_close(sql);
133 if (!create)
134 return false;
135 db_fatal(db, "failed to open database %s: %s", filename,
136 sqlite3_errstr(err));
137 }
138 wrapper->conn = sql;
139
140 err = sqlite3_extended_result_codes(wrapper->conn, 1);
141 if (err != SQLITE_OK) {
142 db_fatal(db, "failed to enable extended result codes: %s",
143 sqlite3_errstr(err));
144 }
145
146 if (!backup_filename)
147 wrapper->backup_conn = NULL;
148 else {
149 err = sqlite3_open_v2(backup_filename,
150 &wrapper->backup_conn,
151 flags, NULL);
152 if (err != SQLITE_OK) {
153 db_fatal(db, "failed to open backup database %s: %s",
154 backup_filename,
155 sqlite3_errstr(err));
156 }

Callers

nothing calls this directly

Calls 3

db_fatalFunction · 0.85
have_same_data_versionFunction · 0.85
conn2sqlFunction · 0.85

Tested by

no test coverage detected