/// <summary> /// Прочитать короткую информацию из текущей записи. /// </summary> /// <param name="table">Таблица.</param> /// <returns>Короткая информация.</returns> protected virtual IBoardShortInfo ReadShortInfo(BoardReferenceTable table) { var viewData = table.Views.ShortInfoView.Fetch(); return(new BoardShortInfo() { BoardLink = CreateBoardLink(viewData.Id), Category = viewData.Category, ShortName = viewData.ShortName, DisplayName = viewData.DisplayName, IsAdult = viewData.IsAdult }); }
/// <summary> /// Прочитать полную информацию из текущей записи. /// </summary> /// <param name="table">Таблица.</param> /// <returns>Полная информация.</returns> protected virtual IBoardReference ReadFullRow(BoardReferenceTable table) { var viewData = table.Views.FullRowView.Fetch(); var result = CreateBoardReferenceObject(); result.BoardLink = CreateBoardLink(viewData.Id); result.Category = viewData.Category; result.ShortName = viewData.ShortName; result.DisplayName = viewData.DisplayName; result.IsAdult = viewData.IsAdult; SetExtendedInfo(viewData.ExtendedData, result); result.BumpLimit = viewData.BumpLimit; result.DefaultName = viewData.DefaultName; result.Pages = viewData.Pages; return(result); }
/// <summary> /// Удалить все записи в таблице. /// </summary> /// <param name="table">Таблица.</param> protected void DeleteAllRows(BoardReferenceTable table) { table.Indexes.PrimaryIndex.SetAsCurrentIndex(); Api.JetSetTableSequential(table.Session, table.Table, SetTableSequentialGrbit.None); try { foreach (var _ in table.Enumerate()) { table.DeleteCurrentRow(); } } finally { Api.JetResetTableSequential(table.Session, table.Table, ResetTableSequentialGrbit.None); } }
/// <summary> /// Обновить одну строку. /// </summary> /// <param name="table">Таблица.</param> /// <param name="reference">Ссылка.</param> /// <param name="alwaysInsert">Всегда вставлять (после очистки таблицы).</param> protected virtual void DoUpdateOneRow(BoardReferenceTable table, IBoardReference reference, bool alwaysInsert) { if (reference == null) { throw new ArgumentNullException(nameof(reference)); } if (!alwaysInsert) { var id = GetId(reference); if (table.Indexes.PrimaryIndex.Find(table.Indexes.PrimaryIndex.CreateKey(id))) { UpdateFullRowInfo(table, reference, JET_prep.Replace); } else { UpdateFullRowInfo(table, reference, JET_prep.Insert); } } else { UpdateFullRowInfo(table, reference, JET_prep.Insert); } }
/// <summary> /// Выбрать индекс и включить фильтр в зависимости от запроса. /// </summary> /// <param name="table">Таблица.</param> /// <param name="query">Запрос.</param> /// <returns>Результат позиционирования на первой записи индекса.</returns> protected virtual bool SelectIndex(BoardReferenceTable table, BoardReferenceStoreQuery query) { if (query.Category == null && query.IsAdult == null) { Api.JetSetTableSequential(table.Session, table, SetTableSequentialGrbit.None); return(table.TryMoveFirst()); } if (query.Category == null) { table.Indexes.IsAdultIndex.SetAsCurrentIndex(); table.Indexes.IsAdultIndex.SetKey(table.Indexes.IsAdultIndex.CreateKey(query.IsAdult.Value)); return(Api.TrySeek(table.Session, table, SeekGrbit.SeekEQ | SeekGrbit.SetIndexRange)); } if (query.IsAdult == null) { table.Indexes.CategoryIndex.SetAsCurrentIndex(); table.Indexes.CategoryIndex.SetKey(table.Indexes.CategoryIndex.CreateKey(query.Category)); return(Api.TrySeek(table.Session, table.Table, SeekGrbit.SeekEQ | SeekGrbit.SetIndexRange)); } table.Indexes.IsAdultAndCategoryIndex.SetAsCurrentIndex(); table.Indexes.IsAdultAndCategoryIndex.SetKey(table.Indexes.IsAdultAndCategoryIndex.CreateKey(query.IsAdult.Value, query.Category)); return(Api.TrySeek(table.Session, table.Table, SeekGrbit.SeekEQ | SeekGrbit.SetIndexRange)); }
/// <summary> /// Обновить данные в текущей строке таблицы. /// </summary> /// <param name="table">Таблица.</param> /// <param name="reference">Ссылка на доску.</param> /// <param name="prep">Тип обновления.</param> protected virtual void UpdateFullRowInfo(BoardReferenceTable table, IBoardReference reference, JET_prep prep) { var row = new BoardReferenceTable.ViewValues.FullRowView() { Id = GetId(reference), Category = reference.Category ?? "", Pages = reference.Pages, IsAdult = reference.IsAdult, DefaultName = reference.DefaultName, ShortName = reference.ShortName, DisplayName = reference.DisplayName, ExtendedData = SerializeDataContract(BoardExtendedInfo.ToContract(reference, LinkSerialization)), BumpLimit = reference.BumpLimit }; if (prep == JET_prep.Replace) { table.Update.UpdateAsFullRowView(ref row); } else if (prep == JET_prep.Insert) { table.Insert.InsertAsFullRowView(ref row); } }
/// <summary> /// Инициализировать таблицу. /// </summary> /// <param name="session">Сессия.</param> /// <param name="tableid">Идентификатор таблицы.</param> protected virtual void InitializeTable(IEsentSession session, JET_TABLEID tableid) { BoardReferenceTable.CreateColumnsAndIndexes(session.Session, tableid); }