예제 #1
0
        public QueryPartitionBase(QueryBase query, Context context)
            : base(query)
        {
            InitializeMembers(new StreamingContext());

            this.Context = context;
            this.query = query;
        }
예제 #2
0
 public virtual Dictionary<string, object> GetWorkflowParameters(QueryBase query)
 {
     return new Dictionary<string, object>()
     {
         { "Query", query },
         { "UserGuid", Guid.Empty },
         { "JobGuid", Guid.Empty },
     };
 }
예제 #3
0
        public override JobInstance ScheduleAsJob(QueryBase query, string queueName, string comments)
        {
            var job = CreateJobInstance(
                EntityFactory.CombineName(EntityType.JobDefinition, Registry.AppSettings.FederationName, typeof(SqlQueryJob).Name),
                queueName,
                comments);

            job.Parameters["Query"].Value = query;

            return job;
        }
예제 #4
0
        public override JobInstance ScheduleAsJob(QueryBase query, string queueName, string comments)
        {
            var job = CreateJobInstance(
                String.Format("{0}.{1}", Federation.AppSettings.FederationName, typeof(SqlQueryJob).Name),
                queueName,
                comments);

            job.Parameters["Query"].SetValue(query);

            return job;
        }
예제 #5
0
        private void CopyMembers(QueryPartitionBase old)
        {
            this.id = old.id;

            this.query = old.query;

            this.partitioningKeyFrom = old.partitioningKeyFrom;
            this.partitioningKeyTo = old.partitioningKeyTo;

            this.tableSourceReferences = new Dictionary<string, TableReference>(old.tableSourceReferences, SchemaManager.Comparer);
            this.remoteTableReferences = new Dictionary<string, TableReference>(old.remoteTableReferences, SchemaManager.Comparer);
        }
예제 #6
0
 protected QueryBase(QueryBase old)
     : base(old)
 {
     CopyMembers(old);
 }
예제 #7
0
        private void CopyMembers(QueryBase old)
        {
            this.queryTimeout = old.queryTimeout;

            this.destination = old.destination;
            this.isDestinationTableInitialized = old.isDestinationTableInitialized;

            this.sourceDatabaseVersionName = old.sourceDatabaseVersionName;
            this.statDatabaseVersionName = old.statDatabaseVersionName;

            this.tableStatistics = new List<TableReference>();  // ***
            this.partitions = new List<QueryPartitionBase>(old.partitions.Select(p => (QueryPartitionBase)p.Clone()));

            this.destinationDatabaseInstance = new EntityProperty<DatabaseInstance>(old.destinationDatabaseInstance);

            this.partitioningTable = old.partitioningTable;
            this.partitioningKey = old.partitioningKey;
        }
예제 #8
0
 protected abstract void GetInitializedQuery_SingleServer(QueryBase query, string queryString, string outputTable, SqlServerDataset mydbds, SqlServerDataset tempds, SqlServerDataset codeds);
예제 #9
0
        protected override void GetInitializedQuery_SingleServer(QueryBase query, string queryString, string outputTable, SqlServerDataset mydbds, SqlServerDataset tempds)
        {
            query.ExecutionMode = ExecutionMode.SingleServer;
            query.QueryString = queryString;

            query.QueryTimeout = 7200;

            if (mydbds != null)
            {
                query.DefaultDataset = mydbds;

                // Add MyDB as custom source
                query.CustomDatasets.Add(mydbds);

                // Set up MYDB for destination
                query.Destination.Table = new Table();
                query.Destination.Table.Dataset = mydbds;
                query.Destination.Table.DatabaseName = mydbds.DatabaseName;
                query.Destination.Table.SchemaName = mydbds.DefaultSchemaName;
                query.Destination.Operation = DestinationTableOperation.Drop | DestinationTableOperation.Create;
            }

            // Set up temporary database
            query.TemporaryDataset = tempds;
        }
예제 #10
0
        protected JobInstance ScheduleQuery(string queuename, QueryBase q)
        {
            var job = QueryFactory.ScheduleAsJob(q, queuename, Comments.Text);
            job.Save();

            return job;
        }
예제 #11
0
 private void OnAsyncExecute(Guid workflowInstanceGuid, string activityInstanceId, QueryBase query, TableReference tableReference, string connectionString, string sql)
 {
     RegisterCancelable(workflowInstanceGuid, activityInstanceId, query);
     query.ComputeTableStatistics(tableReference, connectionString, sql);
     UnregisterCancelable(workflowInstanceGuid, activityInstanceId, query);
 }
예제 #12
0
파일: Query.cs 프로젝트: skyquery/graywulf
 private void InitializeMembers()
 {
     this.inputFile = null;
     this.query = null;
     this.outputTable = null;
     this.taskName = null;
 }
예제 #13
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;
        }
예제 #14
0
        protected override void GetInitializedQuery_SingleServer(QueryBase query, string queryString, string outputTable, SqlServerDataset mydbds, SqlServerDataset tempds, SqlServerDataset codeds)
        {
            query.ExecutionMode = ExecutionMode.SingleServer;
            query.QueryString = queryString;

            query.QueryTimeout = 7200;

            if (mydbds != null)
            {
                query.DefaultDataset = mydbds;

                // Add MyDB as custom source
                query.CustomDatasets.Add(mydbds);

                // Set up MYDB for destination
                query.Destination = new DestinationTable(
                    mydbds,
                    mydbds.DatabaseName,
                    mydbds.DefaultSchemaName,
                    "",  // *** TODO ?
                    TableInitializationOptions.Drop | TableInitializationOptions.Create);
            }

            // Set up temporary and code database
            query.TemporaryDataset = tempds;
            query.CodeDataset = codeds;
        }
예제 #15
0
 public abstract JobInstance ScheduleAsJob(QueryBase query, string queueName, string comments);
예제 #16
0
        private void InitializeMembers(StreamingContext context)
        {
            this.id = 0;

            this.query = null;

            this.partitioningKeyFrom = double.NegativeInfinity;
            this.partitioningKeyTo = double.PositiveInfinity;

            this.tableSourceReferences = new Dictionary<string, TableReference>(SchemaManager.Comparer);
            this.remoteTableReferences = new Dictionary<string, TableReference>(SchemaManager.Comparer);
        }
예제 #17
0
        protected override void GetInitializedQuery_Graywulf(QueryBase query, string queryString, string outputTable)
        {
            var federationname = Federation.AppSettings.FederationName;

            var ef = new EntityFactory(Context);

            var federation = ef.LoadEntity<Federation>(federationname);

            var jd = ef.LoadEntity<JobDefinition>(federationname, typeof(SqlQueryJob).Name);

            var user = new User(Context);
            user.Guid = Context.UserGuid;
            user.Load();

            // Load settings
            // **** TODO: this always takes settings from SqlQueryJob!!
            var settings = Jhu.Graywulf.Registry.Util.LoadSettings<Settings>(jd.Settings);

            query.ExecutionMode = ExecutionMode.Graywulf;
            query.FederationReference.Name = federationname;
            query.QueryString = queryString;

            query.SourceDatabaseVersionName = settings[Settings.HotDatabaseVersionName];
            query.StatDatabaseVersionName = settings[Settings.StatDatabaseVersionName];

            query.QueryTimeout = int.Parse(settings[Settings.LongQueryTimeout]);

            // Add MyDB as custom source
            var mydbds = new GraywulfDataset();
            mydbds.Name = settings[Settings.DefaultDatasetName];
            mydbds.DefaultSchemaName = settings[Settings.DefaultSchemaName];
            mydbds.DatabaseInstance.Value = user.GetUserDatabaseInstance(federation.MyDBDatabaseVersion);
            mydbds.CacheSchemaConnectionString();
            query.CustomDatasets.Add(mydbds);

            query.DefaultDataset = mydbds;

            // Set up MYDB for destination
            // ****** TODO add output table name to settings */
            query.Destination.Table = new Table()
            {
                Dataset = mydbds,
                SchemaName = settings[Settings.DefaultSchemaName],
                TableName = String.IsNullOrWhiteSpace(outputTable) ? "outputtable" : outputTable
            };
            query.Destination.Operation = DestinationTableOperation.Drop | DestinationTableOperation.Create;

            // Set up temporary database
            var tempds = new GraywulfDataset();
            tempds.IsOnLinkedServer = false;
            tempds.DatabaseVersion.Value = federation.TempDatabaseVersion;
            query.TemporaryDataset = tempds;
            query.TemporaryDataset.DefaultSchemaName = settings[Settings.TemporarySchemaName];

            // Set up code database
            var codeds = new GraywulfDataset();
            codeds.Name = "Code";   //  *** TODO
            codeds.IsOnLinkedServer = false;
            codeds.DatabaseVersion.Value = federation.CodeDatabaseVersion;
            query.CodeDataset = codeds;
            query.CodeDataset.DefaultSchemaName = "dbo";    // *** TODO
        }
예제 #18
0
 public abstract JobInstance ScheduleAsJob(QueryBase query, string queueName, string comments);
예제 #19
0
 public virtual Activity GetAsWorkflow(QueryBase query)
 {
     return new SqlQueryJob();
 }
예제 #20
0
 protected abstract void GetInitializedQuery_Graywulf(QueryBase query, string queryString, string outputTable);
예제 #21
0
 protected abstract void GetInitializedQuery_SingleServer(QueryBase query, string queryString, string outputTable, SqlServerDataset mydbds, SqlServerDataset tempds);
예제 #22
0
 protected abstract void GetInitializedQuery_Graywulf(QueryBase query, string queryString, string outputTable);