/// <summary> /// Substitutes the database name into a table reference. /// </summary> /// <param name="tr"></param> /// <param name="serverInstance"></param> /// <param name="databaseVersion"></param> /// <remarks> /// During query executions, actual database name are not known until a server instance is /// assigned to the query partition. /// </remarks> protected void SubstituteDatabaseName(TableReference tr, Guid serverInstance, string databaseVersion) { SchemaManager sc = GetSchemaManager(false); if (!tr.IsSubquery && !tr.IsComputed) { DatasetBase ds = sc.Datasets[tr.DatasetName]; // Graywulf datasets have changing database names depending on the server // the database is on. if (ds is GraywulfDataset) { var gwds = ds as GraywulfDataset; gwds.Context = Context; DatabaseInstance di; if (gwds.IsSpecificInstanceRequired) { di = gwds.DatabaseInstance.Value; } else { // Find appropriate database instance di = new DatabaseInstance(Context); di.Guid = scheduler.GetDatabaseInstances(serverInstance, gwds.DatabaseDefinition.Guid, databaseVersion)[0]; di.Load(); } tr.DatabaseName = di.DatabaseName; } } }
protected override void Execute(CodeActivityContext activityContext) { Guid databaseinstanceguid = DatabaseInstanceGuid.Get(activityContext); using (Context context = ContextManager.Instance.CreateContext(this, activityContext, ConnectionMode.AutoOpen, TransactionMode.AutoCommit)) { DatabaseInstance di = new DatabaseInstance(context); di.Guid = databaseinstanceguid; di.Load(); di.Attach(); } EntityGuid.Set(activityContext, databaseinstanceguid); }
protected override void Execute(CodeActivityContext activityContext) { Guid databaseinstanceguid = SourceDatabaseInstanceGuid.Get(activityContext); using (Context context = ContextManager.Instance.CreateContext(this, activityContext, ConnectionMode.AutoOpen, TransactionMode.AutoCommit)) { DatabaseInstance di = new DatabaseInstance(context); di.Guid = databaseinstanceguid; di.Load(); di.LoadFileGroups(false); // Files will be sorted by logical volume to allow parallel copies Dictionary <Guid, List <Guid> > guids = new Dictionary <Guid, List <Guid> >(); // Append files foreach (DatabaseInstanceFileGroup fg in di.FileGroups.Values) { fg.LoadFiles(false); foreach (DatabaseInstanceFile f in fg.Files.Values) { if (!guids.ContainsKey(f.DiskVolume.Guid)) { guids.Add(f.DiskVolume.Guid, new List <Guid>()); } guids[f.DiskVolume.Guid].Add(f.Guid); } } // Append logfiles /* *** TODO: delete * foreach (DatabaseInstanceFile f in di.Files.Values) * { * if (!guids.ContainsKey(f.DiskVolume.Guid)) * { * guids.Add(f.DiskVolume.Guid, new List<Guid>()); * } * * guids[f.DiskVolume.Guid].Add(f.Guid); * }*/ SourceDatabaseInstanceFileGuids.Set(activityContext, guids); } EntityGuid.Set(activityContext, databaseinstanceguid); }
protected override IAsyncResult BeginExecute(AsyncCodeActivityContext activityContext, AsyncCallback callback, object state) { Guid sourcefileguid = SourceFileGuid.Get(activityContext); Guid destinationdatabaseinstanceguid = DestinationDatabaseInstanceGuid.Get(activityContext); FileCopyDirection filecopydirection = FileCopyDirection.Get(activityContext); string sourcefilename, destinationfilename; string hostname; // Load files using (Context context = ContextManager.Instance.CreateContext(this, activityContext, ConnectionMode.AutoOpen, TransactionMode.AutoCommit)) { // Load destination database instance DatabaseInstance di = new DatabaseInstance(context); di.Guid = destinationdatabaseinstanceguid; di.Load(); di.LoadFileGroups(false); EntityGuid.Set(activityContext, di.Guid); // Load database instance from the schema database DatabaseInstanceFile df; DatabaseInstanceFile sf = new DatabaseInstanceFile(context); sf.Guid = sourcefileguid; sf.Load(); EntityGuidFrom.Set(activityContext, sourcefileguid); sourcefilename = sf.GetFullUncFilename(); DatabaseInstanceFileGroup fg = di.FileGroups[sf.DatabaseInstanceFileGroup.Name]; fg.LoadFiles(false); df = fg.Files[sf.Name]; EntityGuidTo.Set(activityContext, df.Guid); destinationfilename = df.GetFullUncFilename(); DatabaseInstanceFile ssf = filecopydirection == Jhu.Graywulf.Registry.FileCopyDirection.Push ? sf : df; hostname = ssf.DatabaseInstanceFileGroup.DatabaseInstance.ServerInstance.Machine.HostName.ResolvedValue; } Guid workflowInstanceGuid = activityContext.WorkflowInstanceId; string activityInstanceId = activityContext.ActivityInstanceId; return(EnqueueAsync(_ => OnAsyncExecute(workflowInstanceGuid, activityInstanceId, hostname, sourcefilename, destinationfilename), callback, state)); }
public void It_should_load_save_data() { var database = new DatabaseInstance(); database.Strings.Set("a", "b"); database.Bools.Set("a", true); database.Ints.Set("a", 2); database.Floats.Set("a", 5); var save = database.Save(); database.Clear(); database.Load(save); Assert.AreEqual("b", database.Strings.Get("a")); Assert.AreEqual(true, database.Bools.Get("a")); Assert.AreEqual(2, database.Ints.Get("a")); Assert.AreEqual(5, database.Floats.Get("a")); }