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"); }
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; }