Пример #1
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 session = new SystemSession(Transaction, SystemSchema.Name)) {
                            using (var context = session.CreateQuery()) {
                                viewInfo = ViewInfo.Deserialize(blob.GetInput());
                            }
                        }

                        viewCache[row] = viewInfo;
                    }

                    return(new View(viewInfo));
                }
            }

            return(null);
        }
Пример #2
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 session = new SystemSession(Transaction, SystemSchema.Name)) {
                            using (var context = session.CreateQuery()) {
                                viewInfo = ViewInfo.Deserialize(binary.GetInput());
                            }
                        }

                        viewCache[row] = viewInfo;
                    }

                    return(new View(viewInfo));
                }

                ++i;
            }

            throw new ArgumentOutOfRangeException("offset");
        }