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);
            }
        }