private PlatformTableSourceInfo GetTableInfoColumnsAndKeys(TableSourceInfo tableSource, DatabaseInfo dbInfo)
        {
            // All versions use this code with the exception of 10g that uses GetTableInfo above.
            var tableSourceDetails = new PlatformTableSourceInfo(tableSource);

            tableSourceDetails.Columns     = GetColumns(tableSource.ToEnumerable(), dbInfo);
            tableSourceDetails.ForeignKeys = GetForeignKeys(tableSource.ToEnumerable(), dbInfo);
            return(tableSourceDetails);
        }
Esempio n. 2
0
        private PlatformTableSourceInfo GetTableInfo(ITableSourceInfo tableSource)
        {
            TableSourceInfo tableSourceInfo = tableSource as TableSourceInfo;

            if (tableSourceInfo == null)
            {
                return(null);
            }

            PlatformTableSourceInfo tableSourceDetails = new PlatformTableSourceInfo(tableSourceInfo);

            tableSourceDetails.Columns      = GetColumns(tableSourceInfo);
            tableSourceDetails.ForeignKeys  = GetForeignKeys(tableSourceInfo);
            tableSourceDetails.Indexes      = GetIndexes(tableSourceInfo, tableSourceDetails.Columns);
            tableSourceDetails.EventTrigger = Triggers.GetValueOrDefault(tableSourceInfo.Name.ToUpperInvariant());
            return(tableSourceDetails);
        }
        public IDictionary <ITableSourceInfo, IPlatformTableSourceInfo> GetTableSourcesDetails(params ITableSourceInfo[] tables)
        {
            var tablesDetails = new Dictionary <ITableSourceInfo, IPlatformTableSourceInfo>();

            if (tables.IsEmpty())
            {
                return(tablesDetails);
            }

            var dbInfo = (DatabaseInfo)databaseServices.ObjectFactory.CreateLocalDatabaseInfo();

            if (UseSplitMethod())
            {
                foreach (var tableSource in tables.OfType <TableSourceInfo>())
                {
                    tablesDetails.Add(tableSource, GetTableInfoColumnsAndKeys(tableSource, dbInfo));
                }
            }
            else
            {
                var tableSourceList     = tables.OfType <TableSourceInfo>().ToList();
                var tableSourcesColumns = new Dictionary <string, IList <IPlatformTableSourceColumnInfo> >();

                foreach (IPlatformTableSourceColumnInfo column in GetColumns(tableSourceList, dbInfo))
                {
                    string tableName = ((TableSourceInfo)column.TableSource).Name.ToUpperInvariant();
                    IList <IPlatformTableSourceColumnInfo> tableColumns;
                    if (!tableSourcesColumns.TryGetValue(tableName, out tableColumns))
                    {
                        tableColumns = new List <IPlatformTableSourceColumnInfo>();
                        tableSourcesColumns[tableName] = tableColumns;
                    }
                    tableColumns.Add(column);
                }

                var tableSourcesForeignKeys = new Dictionary <string, IList <ITableSourceForeignKeyInfo> >();
                foreach (var foreignKey in GetForeignKeys(tableSourceList, dbInfo))
                {
                    string tableName = ((TableSourceInfo)foreignKey.TableSource).Name.ToUpperInvariant();
                    IList <ITableSourceForeignKeyInfo> tableFKeys;
                    if (!tableSourcesForeignKeys.TryGetValue(tableName, out tableFKeys))
                    {
                        tableFKeys = new List <ITableSourceForeignKeyInfo>();
                        tableSourcesForeignKeys[tableName] = tableFKeys;
                    }
                    tableFKeys.Add(foreignKey);
                }

                foreach (var tableSource in tableSourceList)
                {
                    var info = new PlatformTableSourceInfo(tableSource);

                    info.Columns = tableSourcesColumns.GetValueOrDefault(tableSource.Name.ToUpperInvariant()) ??
                                   new List <IPlatformTableSourceColumnInfo>();

                    info.ForeignKeys = tableSourcesForeignKeys.GetValueOrDefault(tableSource.Name.ToUpperInvariant()) ??
                                       new List <ITableSourceForeignKeyInfo>();

                    tablesDetails.Add(tableSource, info);
                }
            }
            InitializeIndexes(tablesDetails);
            InitializeTriggers(tablesDetails, dbInfo);
            return(tablesDetails);
        }