/// <summary> /// copy a relationship /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btCopyRel_Click(object sender, RoutedEventArgs e) { //get the selected item if (lbRelations.SelectedItem == null) { return; } IRelationshipMetadata copy = lbRelations.SelectedItem as IRelationshipMetadata; //create the new item IRelationshipMetadata rel = new RelationshipMetadata(Catalog.CatalogMetadata); BermudaConfigUtil.CopyRelationship(copy, rel); //open the window RelationshipConfig window = new RelationshipConfig(rel, ""); var ret = window.ShowDialog(); if (!ret.HasValue || ret == false) { return; } //add to list Relationships.Add(rel); Catalog.CatalogMetadata.Relationships.Add(rel.RelationshipName, rel); }
public static bool CopyRelationship(IRelationshipMetadata from, IRelationshipMetadata to) { var parent = to.CatalogMetadata; if (!CopyProperties(from, to)) { return(false); } to.CatalogMetadata = parent; return(true); }
/// <summary> /// constructor with relationship /// </summary> /// <param name="relationship"></param> public RelationshipConfig(IRelationshipMetadata copy, string original) { //init relationship Relationship = copy; RelationshipOriginal = original; //init properties Tables = new ObservableCollection <string>(); Relationship.CatalogMetadata.Tables.Values.ToList().ForEach(t => Tables.Add(t.TableName)); BoolValues = BermudaConfigUtil.GetBoolValues(); ParentColumns = new ObservableCollection <string>(); ChildColumns = new ObservableCollection <string>(); RelationColumns = new ObservableCollection <string>(); //init gui InitializeComponent(); }
/// <summary> /// delete a relationship /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btDeleteRel_Click(object sender, RoutedEventArgs e) { //get the selected item if (lbRelations.SelectedItem == null) { return; } IRelationshipMetadata rel = lbRelations.SelectedItem as IRelationshipMetadata; //prompt to delete if (MessageBox.Show("Are you sure you wish to delete the selected item.", "Delete Confirmation", MessageBoxButton.YesNo) != MessageBoxResult.Yes) { return; } //remove the item Catalog.CatalogMetadata.Relationships.Remove(rel.RelationshipName); Relationships.Remove(rel); }
/// <summary> /// double click on relationship for edit /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lbRealtions_MouseDoubleClick(object sender, MouseButtonEventArgs e) { var item = sender as ListBoxItem; if (item == null || !item.IsSelected) { return; } IRelationshipMetadata sel = item.Content as IRelationshipMetadata; IRelationshipMetadata relationship = new RelationshipMetadata(Catalog.CatalogMetadata); BermudaConfigUtil.CopyRelationship(sel, relationship); RelationshipConfig window = new RelationshipConfig(relationship, relationship.RelationshipName); var ret = window.ShowDialog(); if (!ret.HasValue || ret.Value == false) { return; } BermudaConfigUtil.CopyRelationship(relationship, sel); lbRelations.Items.Refresh(); }
public static bool CopyRelationship(IRelationshipMetadata from, IRelationshipMetadata to) { var parent = to.CatalogMetadata; if (!CopyProperties(from, to)) return false; to.CatalogMetadata = parent; return true; }
/// <summary> /// constructor with parent info /// </summary> /// <param name="bucket"></param> /// <param name="table_metadata"></param> /// <param name="relationship_metadata"></param> public RelationshipDataTable(IBucket bucket, ITableMetadata table_metadata, IRelationshipMetadata relationship_metadata) : base(bucket, table_metadata) { RelationshipMetadata = relationship_metadata; RelationshipParentLookup = new ConcurrentDictionary <long, ConcurrentDictionary <long, long> >(); }
public string GetRelationshipQuery(IRelationshipMetadata rel, List <IDataItem> parents) { //base query StringBuilder sb = new StringBuilder("SELECT"); //get base query sb.AppendFormat(" {0}", rel.RelationTable.Query); //mod sb.AppendFormat(" WHERE {0} % {1} = {2}", rel.RelationTable.ModField, Bucket.Catalog.ComputeNode.GlobalBucketCount, Bucket.BucketMod); //base filter if (!string.IsNullOrWhiteSpace(rel.RelationTable.Filter)) { sb.AppendFormat(" AND ({0})", rel.RelationTable.Filter); } //handle deleted if (!string.IsNullOrWhiteSpace(rel.RelationTable.SaturationDeleteField)) { IColumnMetadata col_delete = rel.RelationTable.ColumnsMetadata.Values.Where(c => c.FieldMapping == rel.RelationTable.SaturationDeleteField).FirstOrDefault(); if (col_delete.ColumnType == typeof(DateTime)) { sb.AppendFormat( " AND {0} {1} {2} {3}", col_delete.ColumnName, Comparators.GetNegatedComparator(rel.RelationTable.SaturationDeleteComparator), ((DateTime)rel.RelationTable.SaturationDeleteValue).ToShortDateString(), ((DateTime)rel.RelationTable.SaturationDeleteValue).ToShortTimeString()); } else if (col_delete.ColumnType == typeof(string)) { sb.AppendFormat( " AND {0} {1} '{2}'", col_delete.ColumnName, Comparators.GetNegatedComparator(rel.RelationTable.SaturationDeleteComparator), rel.RelationTable.SaturationDeleteValue.ToString()); } else if (col_delete.ColumnType == typeof(bool)) { sb.AppendFormat( " AND {0} {1} {2}", col_delete.ColumnName, Comparators.GetNegatedComparator(rel.RelationTable.SaturationDeleteComparator), ((bool)rel.RelationTable.SaturationDeleteValue) ? 1 : 0); } else { sb.AppendFormat( " AND {0} {1} {2}", col_delete.ColumnName, Comparators.GetNegatedComparator(rel.RelationTable.SaturationDeleteComparator), rel.RelationTable.SaturationDeleteValue); } } //handle parent relation StringBuilder parent_keys = new StringBuilder(); foreach (var item in parents) { object parent_key = item.GetType().GetField(rel.ParentField).GetValue(item); if (parent_keys.Length == 0) { parent_keys.AppendFormat("{0}", parent_key); } else { parent_keys.AppendFormat(",{0}", parent_key); } } IColumnMetadata col_parent = rel.RelationTable.ColumnsMetadata.Values.Where(c => c.FieldMapping == rel.ParentRelationshipField).FirstOrDefault(); sb.AppendFormat(" AND {0} in ({1})", col_parent.ColumnName, parent_keys.ToString()); //order by parent key sb.AppendFormat(" ORDER BY {0}", col_parent.ColumnName); return(sb.ToString()); }
/// <summary> /// constructor with parent info /// </summary> /// <param name="bucket"></param> /// <param name="table_metadata"></param> /// <param name="relationship_metadata"></param> public RelationshipDataTable(IBucket bucket, ITableMetadata table_metadata, IRelationshipMetadata relationship_metadata) : base(bucket, table_metadata) { RelationshipMetadata = relationship_metadata; RelationshipParentLookup = new ConcurrentDictionary<long, ConcurrentDictionary<long, long>>(); }
/// <summary> /// Initialize the buckets and catalog data table from metadata /// </summary> /// <returns></returns> public bool InitializeFromMetadata() { try { //catalog tables foreach (ITableMetadata table_metadata in CatalogMetadata.Tables.Values) { //create our catalog level table DataTable table; if (table_metadata.ReferenceTable) { table = new ReferenceDataTable(this, table_metadata); } else { table = new CatalogDataTable(this, table_metadata); } //add to the catalog CatalogDataTables.Add(table_metadata.TableName, table); } //buckets for (int x = 0; x < ComputeNode.GlobalBucketCount; x++) { //check for our mod if (x % ComputeNode.ComputeNodeCount == ComputeNode.ComputeNodeIndex) { //make a bucket Bucket bucket = new Bucket(this); Buckets.Add(x, bucket); bucket.BucketMod = x; //parse the metadata foreach (ITableMetadata table_metadata in CatalogMetadata.Tables.Values.Where(t => t.ReferenceTable == false)) { //create our bucket level table IRelationshipMetadata relationship_metadata = CatalogMetadata.Relationships.Values.Where(r => r.RelationTable == table_metadata).FirstOrDefault(); IBucketDataTable table; if (relationship_metadata != null) { table = new RelationshipDataTable(bucket, table_metadata, relationship_metadata); } else { table = new BucketDataTable(bucket, table_metadata); } //add to our bucket bucket.BucketDataTables.Add(table_metadata.TableName, table); } } } //mark as initialized Initialized = true; } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.ToString()); return(false); } return(true); }
public string GetRelationshipQuery(IRelationshipMetadata rel, List<IDataItem> parents) { //base query StringBuilder sb = new StringBuilder("SELECT"); //get base query sb.AppendFormat(" {0}", rel.RelationTable.Query); //mod sb.AppendFormat(" WHERE {0} % {1} = {2}", rel.RelationTable.ModField, Bucket.Catalog.ComputeNode.GlobalBucketCount, Bucket.BucketMod); //base filter if (!string.IsNullOrWhiteSpace(rel.RelationTable.Filter)) sb.AppendFormat(" AND ({0})", rel.RelationTable.Filter); //handle deleted if (!string.IsNullOrWhiteSpace(rel.RelationTable.SaturationDeleteField)) { IColumnMetadata col_delete = rel.RelationTable.ColumnsMetadata.Values.Where(c => c.FieldMapping == rel.RelationTable.SaturationDeleteField).FirstOrDefault(); if(col_delete.ColumnType == typeof(DateTime)) { sb.AppendFormat( " AND {0} {1} {2} {3}", col_delete.ColumnName, Comparators.GetNegatedComparator(rel.RelationTable.SaturationDeleteComparator), ((DateTime)rel.RelationTable.SaturationDeleteValue).ToShortDateString(), ((DateTime)rel.RelationTable.SaturationDeleteValue).ToShortTimeString()); } else if (col_delete.ColumnType == typeof(string)) { sb.AppendFormat( " AND {0} {1} '{2}'", col_delete.ColumnName, Comparators.GetNegatedComparator(rel.RelationTable.SaturationDeleteComparator), rel.RelationTable.SaturationDeleteValue.ToString()); } else if (col_delete.ColumnType == typeof(bool)) { sb.AppendFormat( " AND {0} {1} {2}", col_delete.ColumnName, Comparators.GetNegatedComparator(rel.RelationTable.SaturationDeleteComparator), ((bool)rel.RelationTable.SaturationDeleteValue) ? 1 : 0); } else { sb.AppendFormat( " AND {0} {1} {2}", col_delete.ColumnName, Comparators.GetNegatedComparator(rel.RelationTable.SaturationDeleteComparator), rel.RelationTable.SaturationDeleteValue); } } //handle parent relation StringBuilder parent_keys = new StringBuilder(); foreach (var item in parents) { object parent_key = item.GetType().GetField(rel.ParentField).GetValue(item); if (parent_keys.Length == 0) parent_keys.AppendFormat("{0}", parent_key); else parent_keys.AppendFormat(",{0}", parent_key); } IColumnMetadata col_parent = rel.RelationTable.ColumnsMetadata.Values.Where(c => c.FieldMapping == rel.ParentRelationshipField).FirstOrDefault(); sb.AppendFormat(" AND {0} in ({1})", col_parent.ColumnName, parent_keys.ToString()); //order by parent key sb.AppendFormat(" ORDER BY {0}", col_parent.ColumnName); return sb.ToString(); }
/// <summary> /// constructor with relationship /// </summary> /// <param name="relationship"></param> public RelationshipConfig(IRelationshipMetadata copy, string original) { //init relationship Relationship = copy; RelationshipOriginal = original; //init properties Tables = new ObservableCollection<string>(); Relationship.CatalogMetadata.Tables.Values.ToList().ForEach(t => Tables.Add(t.TableName)); BoolValues = BermudaConfigUtil.GetBoolValues(); ParentColumns = new ObservableCollection<string>(); ChildColumns = new ObservableCollection<string>(); RelationColumns = new ObservableCollection<string>(); //init gui InitializeComponent(); }