/// <summary> /// Initialize database /// </summary> public async Task OpenAsync() { LOG("start initializing", "ENGINE"); try { // open async stream if (_stream is IAsyncInitialize s) { await s.InitializeAsync(); } // initialize disk service (will create database if needed) _disk = await DiskService.CreateAsync(_stream, _collation, MEMORY_SEGMENT_SIZES, MAX_EXTENDS); // get header page from disk service _header = _disk.Header; // test for same collation if (_collation.ToString() != _header.Pragmas.Collation.ToString()) { throw new LiteException(0, $"Datafile collation '{_header.Pragmas.Collation}' is different from engine settings. Use Rebuild database to change collation."); } // initialize wal-index service _walIndex = new WalIndexService(_disk); // restore wal index references, if exists await _walIndex.RestoreIndex(_header); // register system collections // this.InitializeSystemCollections(); _disposed = false; LOG("initialization completed", "ENGINE"); } catch (Exception ex) { LOG(ex.Message, "ERROR"); // explicit dispose (but do not run shutdown operation) await this.DisposeAsync(); throw; } }