protected override int OnInsert(SQLiteConnection db, int?key, DesignInfo value) { if (key.HasValue) { throw new ArgumentOutOfRangeException(nameof(key), "Design insertion does not permit explicit specification of an ID."); } if (ScriptHost.AllowConsole) { if (value.DesignSections == null || value.DesignSections.Length == 0) { throw new InvalidDataException("DesignInfo does not supply any DesignSections."); } } else { RowCache <int, DesignInfo> .Warn(string.Format("DesignsCache.OnInsert: DesignInfo does not supply any DesignSections (player={0}, stationType={1}, stationLevel={2})", (object)value.PlayerID, (object)value.StationType.ToString(), (object)value.StationLevel.ToString())); } value.HackValidateRole(); int num = db.ExecuteIntegerQuery(string.Format(Queries.InsertDesign, (object)value.PlayerID.ToOneBasedSQLiteValue(), (object)value.Name.ToSQLiteValue(), (object)value.Armour.ToSQLiteValue(), (object)value.Structure.ToSQLiteValue(), (object)value.NumTurrets.ToSQLiteValue(), (object)value.Mass.ToSQLiteValue(), (object)0.ToSQLiteValue(), (object)value.Acceleration.ToSQLiteValue(), (object)value.TopSpeed.ToSQLiteValue(), (object)value.SavingsCost.ToSQLiteValue(), (object)value.ProductionCost.ToSQLiteValue(), (object)((int)value.Class).ToSQLiteValue(), (object)value.CrewAvailable.ToSQLiteValue(), (object)value.PowerAvailable.ToSQLiteValue(), (object)value.SupplyAvailable.ToSQLiteValue(), (object)value.CrewRequired.ToSQLiteValue(), (object)value.PowerRequired.ToSQLiteValue(), (object)value.SupplyRequired.ToSQLiteValue(), (object)GameDatabase.GetTurnCount(db).ToSQLiteValue(), (object)((int)value.Role).ToSQLiteValue(), (object)((int)value.WeaponRole).ToSQLiteValue(), (object)value.isPrototyped.ToSQLiteValue(), (object)value.isAttributesDiscovered.ToSQLiteValue(), (object)((int)value.StationType).ToSQLiteValue(), (object)value.StationLevel.ToSQLiteValue(), (object)value.PriorityWeaponName.ToSQLiteValue(), (object)value.RetrofitBaseID.ToOneBasedSQLiteValue())); value.ID = num; foreach (DesignSectionInfo designSection in value.DesignSections) { designSection.DesignInfo = value; int designSectionId = db.ExecuteIntegerQuery(string.Format(Queries.InsertDesignSection.ToSQLiteValue(), (object)num.ToSQLiteValue(), (object)designSection.FilePath.ToSQLiteValue())); designSection.ID = designSectionId; if (designSection.WeaponBanks == null) { designSection.WeaponBanks = new List <WeaponBankInfo>(); } foreach (WeaponBankInfo weaponBank in designSection.WeaponBanks) { weaponBank.ID = DesignsCache.InsertWeaponBank(db, designSectionId, weaponBank); } if (designSection.Modules == null) { designSection.Modules = new List <DesignModuleInfo>(); } foreach (DesignModuleInfo module in designSection.Modules) { module.DesignSectionInfo = designSection; module.ID = DesignsCache.InsertDesignModuleInfo(db, module); } if (designSection.Techs == null) { designSection.Techs = new List <int>(); } foreach (int tech in designSection.Techs) { db.ExecuteIntegerQuery(string.Format(Queries.InsertDesignSectionTech, (object)designSectionId.ToSQLiteValue(), (object)tech.ToSQLiteValue())); } } return(num); }
protected void SynchronizeWithDatabase() { if (!this.syncfromdb) { return; } if (this.syncall) { if (ScriptHost.AllowConsole) { RowCache <TRowKey, TRowObject> .Trace(string.Format("{0}: Synchronizing all objects", (object)this.GetType().Name)); } foreach (KeyValuePair <TRowKey, TRowObject> keyValuePair in this.OnSynchronizeWithDatabase(this.db, (IEnumerable <TRowKey>)null)) { this.items.Add(keyValuePair.Key, keyValuePair.Value); } } else { List <TRowKey> rowKeyList = (List <TRowKey>)null; if (ScriptHost.AllowConsole) { rowKeyList = new List <TRowKey>(); } foreach (KeyValuePair <TRowKey, TRowObject> keyValuePair in this.OnSynchronizeWithDatabase(this.db, (IEnumerable <TRowKey>) this.staleItems)) { this.items[keyValuePair.Key] = keyValuePair.Value; rowKeyList?.Add(keyValuePair.Key); } if (ScriptHost.AllowConsole) { foreach (TRowKey rowKey in rowKeyList) { RowCache <TRowKey, TRowObject> .Trace(string.Format("{0}: Synchronized object for key {1}", (object)this.GetType().Name, (object)rowKey)); } } } this.staleItems.Clear(); this.syncall = false; this.syncfromdb = false; }