Esempio n. 1
0
        private static void ProcessCatalog(DatabaseProfile profile, ADOTabularDatabase database)
        {
            var     tbl = GetCatalog(database);
            DataRow dr  = tbl.Rows[0];

            profile.ModifiedDate = dr.Field <DateTime>("DATE_MODIFIED");
        }
Esempio n. 2
0
        private static void ProcessColumnCardinality(DatabaseProfile profile, ADOTabularDatabase database)
        {
            var tbl = GetColumnCardinality(database);

            foreach (DataRow dr in tbl.Rows)
            {
                var tab    = profile.Tables[dr["TABLE_NAME"].ToString()];
                var hierId = dr["COLUMN_HIERARCHY_ID"].ToString();
                var colId  = hierId.Substring(hierId.IndexOf('$', 3) + 1);

                var col = tab.Columns.GetById(colId);
                col.Cardinality = dr.Field <long>("COLUMN_CARDINALITY");
            }
        }
Esempio n. 3
0
        private static void ProcessTables(DatabaseProfile profile, ADOTabularDatabase database)
        {
            var tbl = GetTables(database);

            foreach (DataRow dr in tbl.Rows)
            {
                profile.Tables.Add(new Table()
                {
                    Name             = dr["TABLE_NAME"].ToString(),
                    Id               = dr["TABLE_ID"].ToString(),
                    RowCount         = dr.Field <long>("ROWS_IN_TABLE"),
                    RiViolationCount = dr.Field <long>("RIVIOLATION_COUNT")
                });
            }
        }
Esempio n. 4
0
        private static void ProcessColumns(DatabaseProfile profile, ADOTabularDatabase database)
        {
            var tbl = GetColumns(database);

            foreach (DataRow dr in tbl.Rows)
            {
                profile.Tables[dr["TABLE_NAME"].ToString()].Columns.Add(new Column()
                {
                    Name           = dr["COLUMN_NAME"].ToString(),
                    Id             = dr["COLUMN_ID"].ToString(),
                    DataType       = dr["DATATYPE"].ToString(),
                    DictionarySize = dr.Field <ulong>("DICTIONARY_SIZE_BYTES")
                });
            }
        }
Esempio n. 5
0
        public static DatabaseProfile Create(ADOTabularDatabase database)
        {
            DatabaseProfile profile = new DatabaseProfile()
            {
                Name        = database.Name,
                Id          = database.Id,
                ProfileDate = DateTime.Now
            };

            ProcessCatalog(profile, database);
            ProcessTables(profile, database);
            ProcessColumns(profile, database);
            ProcessColumnSegments(profile, database);
            ProcessColumnCardinality(profile, database);

            return(profile);
        }
Esempio n. 6
0
        private static void ProcessColumnSegments(DatabaseProfile profile, ADOTabularDatabase database)
        {
            var tbl = GetColumnSegments(database);

            foreach (DataRow dr in tbl.Rows)
            {
                var    tab = profile.Tables[dr["TABLE_NAME"].ToString()];
                Column col = tab.Columns.GetById(dr["COLUMN_ID"].ToString()); // may not be found...

                var tableId = dr["TABLE_ID"].ToString();

                switch (tableId.Substring(0, 2))
                {
                case "H$": {
                    var colId = tableId.Substring(tableId.LastIndexOf('$') + 1);
                    tab.Columns.GetById(colId).HierarchySegments.Add(CreateSegment(dr, SegmentType.Hierarchy));
                    break;
                }

                case "R$": {
                    tab.RelationshipSegments.Add(CreateSegment(dr, SegmentType.Relationship));
                    break;
                }

                case "U$": {
                    var colId = tableId.Substring(tableId.LastIndexOf('$') + 1);
                    tab.UserHierarchies[colId].Segments.Add(CreateSegment(dr, SegmentType.UserHierarchy));     // todo - group segments from the same hierarchy together
                    break;
                }

                default: {
                    col.DataSegments.Add(CreateSegment(dr));
                    break;
                }
                }
            }
        }