/// <summary> /// Initialize connection string parsing string in "key1=value1;key2=value2;...." format or only "filename" as default (when no ; char found) /// </summary> public ConnectionString(string connectionString) : this() { if (string.IsNullOrEmpty(connectionString)) { throw new ArgumentNullException(nameof(connectionString)); } // create a dictionary from string name=value collection if (connectionString.Contains("=")) { _values.ParseKeyValue(connectionString); } else { _values["filename"] = connectionString; } // setting values to properties this.Connection = _values.GetValue("connection", this.Connection); this.Filename = _values.GetValue("filename", this.Filename).Trim(); this.Password = _values.GetValue("password", this.Password); this.InitialSize = _values.GetFileSize(@"initial size", this.InitialSize); this.ReadOnly = _values.GetValue("readonly", this.ReadOnly); this.Upgrade = _values.GetValue("upgrade", this.Upgrade); }
private void SetUI(GameObject button, int index) { DisplayButton displayButton = button.GetComponent <DisplayButton>(); UpgradeOption upgradeOption = upgradeManager.GetUpgradeOptions()[index]; displayButton.InitializeButton(upgradeOption.displayName, upgradeOption.icon, upgradeOption.dataCost, dataCostIcon, dataCostIconColor); }
void AdvanceLevel(int newLevel) { charLevel = newLevel; Map.Game.Log($"<#448622>You are now level {charLevel}!</color>"); health.Hitpoints = health.MaxHitpoints; // present some advancement options // let's try this decision panel thing upgradesOnDeck.Enqueue(UpgradeOption.GenerateUpgradeOptions(this, newLevel)); }
/// <summary> /// Fill current database with data inside file reader - run inside a transacion /// </summary> internal void RebuildContent(IFileReader reader, UpgradeOption upgrade = UpgradeOption.True) { // begin transaction and get TransactionID var transaction = _monitor.GetTransaction(true, false, out _); try { foreach (var collection in reader.GetCollections()) { if (upgrade != UpgradeOption.DataOnly) { // first create all user indexes (exclude _id index) foreach (var index in reader.GetIndexes(collection)) { this.EnsureIndex(collection, index.Name, BsonExpression.Create(index.Expression), index.Unique); } } // get all documents from current collection var docs = reader.GetDocuments(collection); // get snapshot, indexer and data services var snapshot = transaction.CreateSnapshot(LockMode.Write, collection, true); var indexer = new IndexService(snapshot, _header.Pragmas.Collation); var data = new DataService(snapshot); // insert one-by-one foreach (var doc in docs) { transaction.Safepoint(); this.InsertDocument(snapshot, doc, BsonAutoId.ObjectId, indexer, data); } } transaction.Commit(); } catch (Exception) { _walIndex.Clear(); throw; } finally { _monitor.ReleaseTransaction(transaction); } }
/// <summary> /// Upgrade old version of LiteDB into new LiteDB file structure. Returns true if database was completed converted /// If database already in current version just return false /// </summary> public static bool Upgrade(string filename, string password = null, UpgradeOption upgrade = UpgradeOption.True) { if (filename.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(filename)); } if (!File.Exists(filename)) { return(false); } var settings = new EngineSettings { Filename = filename, Password = password }; var backup = FileHelper.GetSufixFile(filename, "-backup", true); settings.Filename = FileHelper.GetSufixFile(filename, "-temp", true); var buffer = new byte[PAGE_SIZE * 2]; IFileReader reader; using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) { // read first 16k stream.Read(buffer, 0, buffer.Length); // checks if v8 plain data or encrypted (first byte = 1) if ((Encoding.UTF8.GetString(buffer, HeaderPage.P_HEADER_INFO, HeaderPage.HEADER_INFO.Length) == HeaderPage.HEADER_INFO && buffer[HeaderPage.P_FILE_VERSION] == HeaderPage.FILE_VERSION) || buffer[0] == 1) { return(false); } // checks if v7 (plain or encrypted) if (Encoding.UTF8.GetString(buffer, 25, HeaderPage.HEADER_INFO.Length) == HeaderPage.HEADER_INFO && buffer[52] == 7) { reader = new FileReaderV7(stream, password); } else { throw new LiteException(0, "Invalid data file format to upgrade"); } using (var engine = new LiteEngine(settings)) { // copy all database to new Log file with NO checkpoint during all rebuild engine.Pragma(Pragmas.CHECKPOINT, 0); engine.RebuildContent(reader, upgrade); // after rebuild, copy log bytes into data file engine.Checkpoint(); } } // rename source filename to backup name File.Move(filename, backup); // rename temp file into filename File.Move(settings.Filename, filename); return(true); }