Exemplo n.º 1
0
        /// <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
            });
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
 /// <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);
     }
 }
Exemplo n.º 4
0
 /// <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);
     }
 }
Exemplo n.º 5
0
 /// <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));
 }
Exemplo n.º 6
0
        /// <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);
            }
        }
Exemplo n.º 7
0
 /// <summary>
 /// Инициализировать таблицу.
 /// </summary>
 /// <param name="session">Сессия.</param>
 /// <param name="tableid">Идентификатор таблицы.</param>
 protected virtual void InitializeTable(IEsentSession session, JET_TABLEID tableid)
 {
     BoardReferenceTable.CreateColumnsAndIndexes(session.Session, tableid);
 }