Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        public static bool CopyRelationship(IRelationshipMetadata from, IRelationshipMetadata to)
        {
            var parent = to.CatalogMetadata;

            if (!CopyProperties(from, to))
            {
                return(false);
            }
            to.CatalogMetadata = parent;
            return(true);
        }
Beispiel #3
0
        /// <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();
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        /// <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();
        }
Beispiel #6
0
 public static bool CopyRelationship(IRelationshipMetadata from, IRelationshipMetadata to)
 {
     var parent = to.CatalogMetadata;
     if (!CopyProperties(from, to)) return false;
     to.CatalogMetadata = parent;
     return true;
 }
Beispiel #7
0
 /// <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> >();
 }
Beispiel #8
0
        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>>();
 }
Beispiel #10
0
        /// <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);
        }
Beispiel #11
0
        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();
        }