Example #1
0
        protected virtual void Init(IEnumerable<ITable> tables)
        {
            var tablesArray = tables.ToArray();
            referenceList = tablesArray;

            int colCount = ColumnCount;
            indexes = new ColumnIndex[colCount];

            vtTableInfo = new TableInfo(new ObjectName("#VIRTUAL TABLE#"));

            // Generate look up tables for column_table and column_filter information

            columnTable = new int[colCount];
            columnFilter = new int[colCount];

            int index = 0;
            for (int i = 0; i < referenceList.Length; ++i) {
                var curTable = referenceList[i];
                var curTableInfo = curTable.TableInfo;
                int refColCount = curTable.ColumnCount();

                // For each column
                for (int n = 0; n < refColCount; ++n) {
                    columnFilter[index] = n;
                    columnTable[index] = i;
                    ++index;

                    // Add this column to the data table info of this table.
                    var columnInfo = curTableInfo[n];
                    var newColumnInfo = new ColumnInfo(columnInfo.ColumnName, columnInfo.ColumnType) {
                        DefaultExpression = columnInfo.DefaultExpression,
                        IsNotNull = columnInfo.IsNotNull,
                        IndexType = columnInfo.IndexType
                    };

                    vtTableInfo.AddColumnSafe(newColumnInfo);
                }
            }

            vtTableInfo = vtTableInfo.AsReadOnly();
        }
        private void SetColumnMap(int[] mapping)
        {
            reverseColumnMap = new int[Parent.ColumnCount()];
            for (int i = 0; i < reverseColumnMap.Length; ++i) {
                reverseColumnMap[i] = -1;
            }

            var parentInfo = Parent.TableInfo;
            subsetTableInfo = new TableInfo(parentInfo.TableName);

            for (int i = 0; i < mapping.Length; ++i) {
                int mapTo = mapping[i];

                var origColumnInfo = Parent.TableInfo[mapTo];
                var columnInfo = new ColumnInfo(aliases[i].Name, origColumnInfo.ColumnType) {
                    DefaultExpression = origColumnInfo.DefaultExpression,
                    IsNotNull = origColumnInfo.IsNotNull,
                    IndexType = origColumnInfo.IndexType
                };

                subsetTableInfo.AddColumnSafe(columnInfo);

                reverseColumnMap[mapTo] = i;
            }

            subsetTableInfo = subsetTableInfo.AsReadOnly();
        }