private void UpdateTo_3_4_0(CruiseDatastore db) { var curVersion = db.DatabaseVersion; var targetVersion = "3.4.0"; var fKeys = db.ExecuteScalar <string>("PRAGMA foreign_keys;"); db.Execute("PRAGMA foreign_keys=OFF;"); db.BeginTransaction(); try { RebuildTable(db, new CruiseTableDefinition_3_4_0(), customFieldMaps: new KeyValuePair <string, string>[] { new KeyValuePair <string, string>( "SaleNumber", "(SELECT SaleNumber FROM Sale WHERE cruise.SaleID = sale.SaleID)") }); if (fKeys == "ON") { var keyCheck = db.QueryGeneric("PRAGMA foreign_key_check;"); if (keyCheck.Any()) { throw new SchemaException("Foreign Key Check failed"); } } db.Execute("CREATE INDEX NIX_TreeDefaultValue_PrimaryProduct ON TreeDefaultValue ('PrimaryProduct');"); var tree_tdvViewDef = new Tree_TreeDefaultValue(); db.Execute(tree_tdvViewDef.CreateView); var tm_defViewDef = new TreeMeasurment_DefaultResolved(); db.Execute(tm_defViewDef.CreateView); SetDatabaseVersion(db, targetVersion); db.CommitTransaction(); db.Execute($"PRAGMA foreign_keys={fKeys};"); } catch (Exception e) { db.RollbackTransaction(); throw new SchemaUpdateException(curVersion, targetVersion, e); } }