protected override void GetInitializedQuery_Graywulf(QueryBase query, string queryString, string outputTable) { var ef = new EntityFactory(Context); var federation = ef.LoadEntity <Federation>(Registry.AppSettings.FederationName); var jd = ef.LoadEntity <JobDefinition>(Registry.AppSettings.FederationName, typeof(SqlQueryJob).Name); var settings = new SqlQueryJobSettings(jd.Settings); var user = new User(Context); user.Guid = Context.UserGuid; user.Load(); query.ExecutionMode = ExecutionMode.Graywulf; query.FederationReference.Name = Registry.AppSettings.FederationName; query.QueryString = queryString; query.SourceDatabaseVersionName = settings.HotDatabaseVersionName; query.StatDatabaseVersionName = settings.StatDatabaseVersionName; query.QueryTimeout = settings.QueryTimeout; // Add MyDB as custom source var mydbds = new GraywulfDataset(); mydbds.Name = settings.DefaultDatasetName; mydbds.DefaultSchemaName = settings.DefaultSchemaName; mydbds.DatabaseInstance.Value = federation.MyDBDatabaseVersion.GetUserDatabaseInstance(user); mydbds.CacheSchemaConnectionString(); mydbds.IsMutable = true; query.CustomDatasets.Add(mydbds); query.DefaultDataset = mydbds; // Set up MYDB for destination // ****** TODO add output table name to settings */ query.Destination = new DestinationTable( mydbds, mydbds.DatabaseName, settings.DefaultSchemaName, String.IsNullOrWhiteSpace(outputTable) ? "outputtable" : outputTable, TableInitializationOptions.Drop | TableInitializationOptions.Create); // Set up temporary database var tempds = new GraywulfDataset(); tempds.Name = Registry.Constants.TempDbName; tempds.IsOnLinkedServer = false; tempds.DatabaseVersion.Value = federation.TempDatabaseVersion; query.TemporaryDataset = tempds; // Set up code database var codeds = new GraywulfDataset(); codeds.Name = Registry.Constants.CodeDbName; codeds.IsOnLinkedServer = false; codeds.DatabaseVersion.Value = federation.CodeDatabaseVersion; query.CodeDataset = codeds; }
protected void LoadSystemDatabaseInstance(EntityProperty <DatabaseInstance> databaseInstance, GraywulfDataset dataset, bool forceReinitialize) { if (!AssignedServerInstanceReference.IsEmpty && (databaseInstance.IsEmpty || forceReinitialize)) { dataset.Context = Context; var dd = dataset.DatabaseVersion.Value.DatabaseDefinition; dd.LoadDatabaseInstances(false); foreach (var di in dd.DatabaseInstances.Values) { di.Context = Context; } // Find database instance that is on the same machine try { // TODO: only server instance and database definition is checked here, maybe database version would be better databaseInstance.Value = dd.DatabaseInstances.Values.FirstOrDefault(ddi => ddi.ServerInstanceReference.Guid == AssignedServerInstance.Guid); databaseInstance.Value.GetConnectionString(); } catch (Exception ex) { throw new Exception("Cannot determine system database", ex); // TODO *** } } else if (AssignedServerInstanceReference.IsEmpty) { databaseInstance.Value = null; } }