/// <summary> /// Substitutes names of remote tables with name of temporary tables /// holding a cached version of remote tables. /// </summary> /// <remarks></remarks> // TODO: This function call must be synchronized! ?? protected virtual void SubstituteRemoteTableNames(DatasetBase temporaryDataset, string temporarySchemaName) { switch (ExecutionMode) { case ExecutionMode.SingleServer: // No remote table support // Replace remote table references with temp table references foreach (TableReference tr in SelectStatement.EnumerateSourceTableReferences(true)) { if (!tr.IsSubquery && TemporaryTables.ContainsKey(tr.UniqueName)) { throw new NotImplementedException(); } } break; case ExecutionMode.Graywulf: var sm = GetSchemaManager(false); // Replace remote table references with temp table references foreach (TableReference tr in SelectStatement.EnumerateSourceTableReferences(true)) { SubstituteRemoteTableName(sm, tr, temporaryDataset, temporarySchemaName); } break; default: throw new NotImplementedException(); } }
/// <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; } } }
/// <summary> /// Creates a new database object with its full name initialized /// </summary> /// <param name="dataset"></param> /// <param name="databaseName"></param> /// <param name="schemaName"></param> /// <param name="objectName"></param> protected DatabaseObject(DatasetBase dataset, string databaseName, string schemaName, string objectName) { InitializeMembers(new StreamingContext()); this.dataset = dataset; this.databaseName = databaseName; this.schemaName = schemaName; this.objectName = objectName; }
/// <summary> /// Creates a new database object with its full name initialized /// </summary> /// <param name="dataset"></param> /// <param name="databaseName"></param> /// <param name="schemaName"></param> /// <param name="objectName"></param> protected DatabaseObject(DatasetBase dataset, string databaseName, string schemaName, string objectName) { InitializeMembers(); this.dataset = dataset; this.databaseName = databaseName; this.schemaName = schemaName; this.objectName = objectName; this.metadata = null; }
/// <summary> /// Substitutes the name of a remote tables with name of the temporary table /// holding a cached version of the remote data. /// </summary> /// <param name="sm"></param> /// <param name="tr"></param> /// <param name="temporaryDataset"></param> /// <param name="temporarySchemaName"></param> private void SubstituteRemoteTableName(SchemaManager sm, TableReference tr, DatasetBase temporaryDataset, string temporarySchemaName) { // Save unique name because it will change as names are substituted var un = tr.UniqueName; // TODO: write function to determine if a table is to be copied // ie. the condition in the if clause of the following line if (tr.IsCachable && TemporaryTables.ContainsKey(tr.UniqueName) && IsRemoteDataset(sm.Datasets[tr.DatasetName])) { tr.DatabaseName = temporaryDataset.DatabaseName; tr.SchemaName = temporarySchemaName; tr.DatabaseObjectName = TemporaryTables[un].TableName; tr.DatabaseObject = null; } }
/// <summary> /// Checks whether the given dataset is remote to the assigned server /// </summary> /// <param name="ds"></param> /// <returns></returns> protected bool IsRemoteDataset(DatasetBase ds) { if (ds is GraywulfDataset && !((GraywulfDataset)ds).IsSpecificInstanceRequired) { return(false); } else if (ds is SqlServerDataset) { // A SqlServer dataset is remote if it's on another server var csbr = new SqlConnectionStringBuilder(ds.ConnectionString); var csba = AssignedServerInstance.GetConnectionString(); return(StringComparer.InvariantCultureIgnoreCase.Compare(csbr.DataSource, csba.DataSource) != 0); } else { // Everything else is remote return(true); } }
private void InitializeMembers() { this.dataset = null; this.query = null; }
public QueryBase CreateQuery(string queryString, ExecutionMode mode, string outputTable, DatasetBase mydbds, DatasetBase tempds) { var parser = CreateParser(); var root = parser.Execute(queryString); QueryBase q = CreateQueryBase((Node)root); q.QueryFactoryTypeName = this.GetType().AssemblyQualifiedName; q.ExecutionMode = mode; switch (mode) { case ExecutionMode.Graywulf: GetInitializedQuery_Graywulf(q, queryString, outputTable); break; case ExecutionMode.SingleServer: GetInitializedQuery_SingleServer(q, queryString, outputTable, (SqlServerDataset)mydbds, (SqlServerDataset)tempds); break; default: throw new NotImplementedException(); } return q; }
/// <summary> /// Copy constructor /// </summary> /// <param name="old"></param> public SqlServerDataset(DatasetBase old) : base(old) { InitializeMembers(new StreamingContext()); }
public static SqlCodeGeneratorBase CreateCodeGenerator(DatasetBase ds) { return(CreateCodeGenerator(ds.GetType())); }
public static SqlCodeGeneratorBase CreateCodeGenerator(DatasetBase ds) { return CreateCodeGenerator(ds.GetType()); }
public GraywulfDataset(DatasetBase old) : base(old) { InitializeMembers(new StreamingContext()); }
/// <summary> /// Copy constructor /// </summary> /// <param name="old"></param> public PostgreSqlDataset(DatasetBase old) : base(old) { InitializeMembers(new StreamingContext()); }
/// <summary> /// Initializes member variable to their default values /// </summary> private void InitializeMembers() { this.cachedVersion = DateTime.Now.Ticks; this.objectType = DatabaseObjectType.Unknown; this.dataset = null; this.databaseName = null; this.schemaName = null; this.objectName = null; }
public QueryBase CreateQuery(string queryString, ExecutionMode mode, string outputTable, DatasetBase mydbds, DatasetBase tempds, DatasetBase codeds) { var parser = CreateParser(); var root = parser.Execute(queryString); QueryBase q = CreateQueryBase((Node)root); q.QueryFactoryTypeName = this.GetType().AssemblyQualifiedName; q.ExecutionMode = mode; switch (mode) { case ExecutionMode.Graywulf: GetInitializedQuery_Graywulf(q, queryString, outputTable); break; case ExecutionMode.SingleServer: GetInitializedQuery_SingleServer(q, queryString, outputTable, (SqlServerDataset)mydbds, (SqlServerDataset)tempds, (SqlServerDataset)codeds); break; default: throw new NotImplementedException(); } return(q); }
protected void LoadStoredProcedures(DatasetBase dataset) { dataset.StoredProcedures.LoadAll(); LoadDatabaseObjects(dataset.StoredProcedures.Values); }
/// <summary> /// /// </summary> /// /// <remarks>This function call must be synchronized!</remarks> protected virtual void SubstituteRemoteTableNames(DatasetBase temporaryDataset, string temporarySchemaName) { switch (ExecutionMode) { case ExecutionMode.SingleServer: // No remote table support // Replace remote table references with temp table references foreach (TableReference tr in SelectStatement.EnumerateSourceTableReferences(true)) { if (!tr.IsSubquery && TemporaryTables.ContainsKey(tr.UniqueName)) { throw new NotImplementedException(); } } break; case ExecutionMode.Graywulf: var sm = GetSchemaManager(false); // Replace remote table references with temp table references foreach (TableReference tr in SelectStatement.EnumerateSourceTableReferences(true)) { SubstituteRemoteTableName(sm, tr, temporaryDataset, temporarySchemaName); } break; default: throw new NotImplementedException(); } }
/// <summary> /// Creates a view and initializes its dataset /// </summary> /// <param name="dataset"></param> public View(DatasetBase dataset) : base(dataset) { InitializeMembers(); }
protected override void OnDatasetAdded(string datasetName, DatasetBase ds) { // If a Graywulf dataset is added, it has to be updated and registry // objects loaded if (ds is GraywulfDataset) { var gwds = (GraywulfDataset)ds; gwds.Context = Context; } }
protected void LoadTableValuedFunctions(DatasetBase dataset) { dataset.TableValuedFunctions.LoadAll(); LoadDatabaseObjects(dataset.TableValuedFunctions.Values); }
protected void LoadScalarFunctions(DatasetBase dataset) { dataset.ScalarFunctions.LoadAll(); LoadDatabaseObjects(dataset.ScalarFunctions.Values); }
/// <summary> /// Creates a new database object with dataset set. /// </summary> /// <param name="dataset"></param> public DatabaseObject(DatasetBase dataset) { InitializeMembers(new StreamingContext()); this.dataset = dataset; }
protected virtual void OnDatasetAdded(string datasetName, DatasetBase ds) { }
/// <summary> /// Creates a stored procedure function and initializes its dataset /// </summary> /// <param name="dataset"></param> public StoredProcedure(DatasetBase dataset) : base(dataset) { InitializeMembers(new StreamingContext()); }
/// <summary> /// Creates a scalar function and initializes its /// dataset /// </summary> /// <param name="dataset"></param> public ScalarFunction(DatasetBase dataset) : base(dataset) { InitializeMembers(new StreamingContext()); }
/// <summary> /// Copies member variable from an existing object /// </summary> /// <param name="old"></param> private void CopyMembers(DatabaseObject old) { this.cachedVersion = DateTime.Now.Ticks; this.objectType = old.objectType; this.dataset = old.dataset; this.databaseName = old.databaseName; this.schemaName = old.schemaName; this.objectName = old.objectName; }
/// <summary> /// Creates a new database object with dataset set. /// </summary> /// <param name="dataset"></param> public DatabaseObject(DatasetBase dataset) { InitializeMembers(); this.dataset = dataset; }
/// <summary> /// Creates a table-valued function and initializes its dataset /// </summary> /// <param name="dataset"></param> public TableValuedFunction(DatasetBase dataset) : base(dataset) { InitializeMembers(new StreamingContext()); }
/// <summary> /// Creates a table-valued function and initializes its dataset /// </summary> /// <param name="dataset"></param> public TableValuedFunction(DatasetBase dataset) : base(dataset) { InitializeMembers(); }
protected void LoadViews(DatasetBase dataset) { dataset.Views.LoadAll(); LoadDatabaseObjects(dataset.Views.Values); }
/// <summary> /// Creates a stored procedure function and initializes its dataset /// </summary> /// <param name="dataset"></param> public StoredProcedure(DatasetBase dataset) : base(dataset) { InitializeMembers(); }
private void CopyMembers(SourceQueryParameters old) { this.dataset = old.dataset; this.query = old.query; this.timeout = old.timeout; }
private void CopyMembers(SourceTableQuery old) { this.dataset = Util.DeepCloner.CloneObject(old.dataset); this.query = old.query; }
private void InitializeMembers() { this.dataset = null; this.query = null; this.timeout = 1200; }
/// <summary> /// Creates a table and initializes its dataset /// </summary> /// <param name="dataset"></param> public Table(DatasetBase dataset) : base(dataset) { InitializeMembers(); }
/// <summary> /// Copies member variable from an existing object /// </summary> /// <param name="old"></param> private void CopyMembers(DatabaseObject old) { this.cachedVersion = DateTime.Now.Ticks; this.objectType = old.objectType; this.dataset = old.dataset; this.databaseName = old.databaseName; this.schemaName = old.schemaName; this.objectName = old.objectName; this.metadata = new LazyProperty<DatabaseObjectMetadata>(LoadMetadata); }
/// <summary> /// Creates a scalar function and initializes its /// dataset /// </summary> /// <param name="dataset"></param> public ScalarFunction(DatasetBase dataset) : base(dataset) { InitializeMembers(); }
private void InitializeMembers(StreamingContext context) { this.cachedVersion = DateTime.Now.Ticks; this.objectType = DatabaseObjectType.Unknown; this.dataset = null; this.databaseName = null; this.schemaName = null; this.objectName = null; this.metadata = new LazyProperty<DatabaseObjectMetadata>(LoadMetadata); }