Beispiel #1
0
        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;
        }
Beispiel #2
0
        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;
            }
        }