Пример #1
0
        private View GetViewAt(int offset)
        {
            var table = Transaction.GetTable(SystemSchema.ViewTableName);
            if (table == null)
                throw new DatabaseSystemException(String.Format("System table '{0}' was not defined.", SystemSchema.ViewTableName));

            var e = table.GetEnumerator();
            int i = 0;
            while (e.MoveNext()) {
                var row = e.Current.RowId.RowNumber;

                if (i == offset) {
                    ViewInfo viewInfo;
                    if (!viewCache.TryGetValue(row, out viewInfo)) {
                        var binary = (ISqlBinary)table.GetValue(row, 3).Value;

                        using (var context = new SystemQueryContext(Transaction, SystemSchema.Name)) {
                            viewInfo = ViewInfo.Deserialize(binary.GetInput(), context.TypeResolver());
                        }

                        viewCache[row] = viewInfo;
                    }

                    return new View(viewInfo);
                }

                ++i;
            }

            throw new ArgumentOutOfRangeException("offset");
        }
Пример #2
0
        public View GetView(ObjectName viewName)
        {
            var viewTable = Transaction.GetTable(SystemSchema.ViewTableName);
            var e = viewTable.GetEnumerator();
            while (e.MoveNext()) {
                int row = e.Current.RowId.RowNumber;

                var cSchema = viewTable.GetValue(row, 0).Value.ToString();
                var cName = viewTable.GetValue(row, 1).Value.ToString();

                if (viewName.ParentName.Equals(cSchema) &&
                    viewName.Name.Equals(cName)) {

                    ViewInfo viewInfo;
                    if (!viewCache.TryGetValue(row, out viewInfo)) {
                        var blob = (SqlBinary)viewTable.GetValue(row, 3).Value;

                        using (var context = new SystemQueryContext(Transaction, SystemSchema.Name)) {
                            viewInfo = ViewInfo.Deserialize(blob.GetInput(), context.TypeResolver());
                        }

                        viewCache[row] = viewInfo;

                    }

                    return new View(viewInfo);
                }

            }

            return null;
        }