亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? myldbtempengine.pas

?? 一個本地database引擎,支持中文T_Sql查詢,兼容DELPHI標準數據庫控件
?? PAS
?? 第 1 頁 / 共 4 頁
字號:
unit MYLDBTempEngine;

{$I MYLDBVer.inc}

interface

uses SysUtils, Classes,

// MYLDBoluteDatabase units

{$IFNDEF D5H}
     MYLDBD4Routines,
{$ENDIF}
{$IFDEF DEBUG_LOG}
     MYLDBDebug,
{$ENDIF}
     MYLDBExcept,
     MYLDBBase,
     MYLDBPage,
     MYLDBBaseEngine,
     MYLDBMemory,
     MYLDBCompression,
     MYLDBSecurity,
     MYLDBTypes,
     MYLDBConst;

type
   TMYLDBTemporaryTableData = class;


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBTemporaryRecordManager
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBTemporaryRecordManager = class (TMYLDBBaseRecordManager)
   private
    FRecordsPerPage:        Integer;
    FPageSize:              Integer;
    FCachedRecordCount:     Integer;
    FCache:                 PChar;
    FAllocatedRecordCount:  Integer;
    FTempPage:              PChar;
    FTempPageRecordCount:   Integer;
    FTempPageFile:          TMYLDBFileStream;
    FMaxCachedRecordCount:  Integer;
    FAllocRecordsBy:        Integer;
    FDisableTempFiles:      Boolean;

    procedure SaveTempPage;
    function ReadRecord(
                        var RecordBuffer: TMYLDBRecordBuffer;
                        RecordID: TMYLDBRecordNo
                       ): Boolean;
    // return result for attempt of getting record relatively to first position
    // and set RecordID to new record ID
    function GetRecordFromFirstPosition(
            GetRecordMode: TMYLDBGetRecordMode;
            var RecordID:  TMYLDBRecordNo
                                       ): TMYLDBGetRecordResult;
    // return result for attempt of getting record relatively to last position
    // and set RecordID to new record ID
    function GetRecordFromLastPosition(
            GetRecordMode: TMYLDBGetRecordMode;
            var RecordID:  TMYLDBRecordNo
                                      ): TMYLDBGetRecordResult;
    // return result for attempt of getting record relatively any position
    // and set RecordID to new record ID
    function GetRecordFromAnyPosition(
            GetRecordMode: TMYLDBGetRecordMode;
            var RecordID:  TMYLDBRecordNo
                                      ): TMYLDBGetRecordResult;
   public
    constructor Create(
                        RecordBufferSize:     Integer;
                        RecordsPerPage:       Integer;
                        AllocRecordsBy:       Integer;
                        DisableTempFiles:     Boolean
                      );
    destructor Destroy; override;

    procedure Empty(SessionID: TMYLDBSessionID); override;

    // add record and return its number
    function AddRecord(
                        SessionID: TMYLDBSessionID;
                        RecordBuffer: TMYLDBRecordBuffer;
                        var RecordID: TMYLDBRecordID
                       ): Boolean; override;
    // update record, return true if record was updated, false if record was deleted
    function UpdateRecord(SessionID: TMYLDBSessionID; RecordBuffer: TMYLDBRecordBuffer; RecordID: TMYLDBRecordID): Boolean; override;
    // delete record, return true if record was deleted, false if record was deleted earlier
    function DeleteRecord(SessionID: TMYLDBSessionID; var RecordID: TMYLDBRecordID): Boolean; override;
    procedure GetRecordBuffer(SessionID: TMYLDBSessionID; var NavigationInfo: TMYLDBNavigationInfo); override;
    // return 0,1, or -1 if (1 = 2), (1 > 2) or (1 < 2)
    function CompareRecordID(RecordID1: TMYLDBRecordID; RecordID2: TMYLDBRecordID): Integer; override;
    // return record no
    function GetApproximateRecNo(SessionID: TMYLDBSessionID; RecordID: TMYLDBRecordID): TMYLDBRecordNo; override;
  end; // TMYLDBTemporaryRecordManager


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBTemporaryPageManager
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBTemporaryPageManager = class (TMYLDBPageManager)
   protected
     FAllocatedPageMap:    TMYLDBBitsArray;
     FAllocatedPageCount:  TMYLDBPageNo;
     FTempPageFile:        TMYLDBFileStream;
     FMaxMemoryPageCount:  TMYLDBPageNo;
     FMemoryPageManager:   TMYLDBPageManager;
     FDisableTempFiles:    Boolean;

   public
     procedure InternalAddPage(aPage: TMYLDBPage); override;
     procedure InternalRemovePage(PageNo: TMYLDBPageNo); override;
     function InternalReadPage(aPage: TMYLDBPage): Boolean; override;
     procedure InternalWritePage(aPage: TMYLDBPage); override;

     constructor Create(DisableTempFiles: Boolean);
     destructor Destroy; override;
  end; // TMYLDBMemoryPageManager



////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBTemporaryDatabaseData
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBTemporaryDatabaseData = class (TMYLDBDatabaseData)
   private
    FLastObjectID: TMYLDBLastObjectID;
   public
    constructor Create;
    destructor Destroy; override;
    // create table data
    function CreateTableData(Cursor: TMYLDBCursor): TMYLDBTableData; override;
    function GetNewObjectId: TMYLDBObjectID; override;
  end; // TMYLDBTemporaryDatabaseData


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBTemporaryTableData
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBTemporaryTableData = class (TMYLDBTableData)
   private
    FBLOBFile:          TMYLDBStream;
    FRecordsPerPage:    Integer;
    FAllocRecordsBy:    Integer;

   protected
    procedure CreateRecordManager; override;
    procedure CreateFieldManager(FieldDefs: TMYLDBFieldDefs); override;
    procedure CreateIndexManager(IndexDefs: TMYLDBIndexDefs); override;
    procedure CreateConstraintManager(ConstraintDefs: TMYLDBConstraintDefs); override;
    procedure CreateBLOBFile;
    procedure DeleteBLOBFile;
    // return filter bitmap rec count
    function GetBitmapRecordCount(SessionID: TMYLDBSessionID): TMYLDBRecordNo; override;
    // return filter bitmap rec no by record id
    function GetBitmapRecNoByRecordID(RecordID: TMYLDBRecordID): TMYLDBRecordNo; override;
    // return filter bitmap rec no by record id
    function GetRecordIDByBitmapRecNo(RecordNo: TMYLDBRecordNo): TMYLDBRecordID; override;
   public
    constructor Create(
                        aDatabaseData:  TMYLDBDatabaseData;
                        RecordsPerPage: Integer = 10;
                        AllocRecordsBy: Integer = 1000
                      );
    destructor Destroy; override;

    procedure CreateTable(
                          Cursor: TMYLDBCursor;
                          FieldDefs: TMYLDBFieldDefs;
                          IndexDefs: TMYLDBIndexDefs;
                          ConstraintDefs: TMYLDBConstraintDefs
                         ); override;
    procedure DeleteTable(Cursor: TMYLDBCursor; DesignMode: Boolean = False); override;
    procedure EmptyTable(Cursor: TMYLDBCursor); override;
    procedure OpenTable(Cursor: TMYLDBCursor); override;
    procedure CloseTable(Cursor: TMYLDBCursor); override;

    procedure AddIndex(IndexDef: TMYLDBIndexDef; Cursor: TMYLDBCursor); override;
    procedure DeleteIndex(IndexID: TMYLDBObjectID; Cursor: TMYLDBCursor); override;

    function InsertRecord(var Cursor: TMYLDBCursor): Boolean; override;
    function DeleteRecord(Cursor: TMYLDBCursor): Boolean; override;
    function UpdateRecord(Cursor: TMYLDBCursor): Boolean; override;

    function InternalGetRecordCount(Cursor: TMYLDBCursor): TMYLDBRecordNo; override;
    // move cursor to specified position and set current record id in cursor
    procedure InternalSetRecNo(Cursor: TMYLDBCursor; RecNo: TMYLDBRecordNo); override;
    // get current record position from cursor
    function InternalGetRecNo(Cursor: TMYLDBCursor): TMYLDBRecordNo; override;

    //---------------------------------------------------------------------------
    // BLOB methods
    //---------------------------------------------------------------------------
    procedure WriteBLOBFieldToRecordBuffer(
              Cursor:     TMYLDBCursor;
              FieldNo:    Integer;
              BLOBStream: TMYLDBStream
              ); override;

    function InternalCreateBlobStream(
              Cursor:   TMYLDBCursor;
              ToInsert: Boolean;
              FieldNo:  Integer;
              OpenMode: TMYLDBBLOBOpenMode
              ): TMYLDBStream; override;

    procedure GetDirectBlobData(
              Cursor:     TMYLDBCursor;
              FieldNo:    Integer;
              RecordBuffer: TMYLDBRecordBuffer;
              var BLOBDescriptor: TMYLDBPartialTemporaryBLOBDescriptor;
              var pBlobData: PChar); override;

    procedure SetDirectBlobData(
              Cursor:     TMYLDBCursor;
              FieldNo:    Integer;
              RecordBuffer: TMYLDBRecordBuffer;
              var BLOBDescriptor: TMYLDBPartialTemporaryBLOBDescriptor;
              var pBlobData: PChar); override;

    procedure FreeDirectBlobData(
              Cursor:     TMYLDBCursor;
              FieldNo:    Integer;
              RecordBuffer: TMYLDBRecordBuffer;
              var BLOBDescriptor: TMYLDBPartialTemporaryBLOBDescriptor;
              var pBlobData: PChar); override;

  end; // TMYLDBTemporaryTableData


implementation


uses

// MYLDBoluteDatabase units

  MYLDBLocalEngine,
  MYLDBMemEngine;


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBTemporaryRecordManager
//
////////////////////////////////////////////////////////////////////////////////


//------------------------------------------------------------------------------
// save temporary page
//------------------------------------------------------------------------------
procedure TMYLDBTemporaryRecordManager.SaveTempPage;
var WriteBytes,WriteSize:   Integer;
    OldPos,NewPos:          Int64;
begin
 if (FTempPageRecordCount > 0) then
  begin
   if (FTempPageRecordCount > FRecordsPerPage) then
    raise EMYLDBException.Create(10126,ErrorLInvalidRecordCount,
      [FTempPageRecordCount,FRecordsPerPage]);
   OldPos := FTempPageFile.Position;
   NewPos := Int64(FRecordCount - FMaxCachedRecordCount - FTempPageRecordCount) *
             Int64(FRecordBufferSize);
   FTempPageFile.Position := NewPos;
   if (FTempPageFile.Position <> NewPos) then
    raise EMYLDBException.Create(10128,ErrorLCannotSetPosition,
      [NewPos,OldPos,FTempPageFile.Size]);
   OldPos := FTempPageFile.Position;
   WriteSize := FTempPageRecordCount * FRecordBufferSize;
   WriteBytes := FTempPageFile.Write(FTempPage^,WriteSize);
   if (WriteBytes <> WriteSize) then
    raise EMYLDBException.Create(10125,ErrorLWriteToStream,
      [OldPos,FTempPageFile.Size,WriteSize,WriteBytes]);
   FTempPageRecordCount := 0;
  end;
end; // SaveTempPage


//------------------------------------------------------------------------------
// read record
//------------------------------------------------------------------------------
function TMYLDBTemporaryRecordManager.ReadRecord(
                        var RecordBuffer: TMYLDBRecordBuffer;
                        RecordID: TMYLDBRecordNo
                       ): Boolean;
var ReadBytes:          Integer;
    OldPos,NewPos:      Int64;
begin
 if (FDisableTempFiles or (RecordID < FMaxCachedRecordCount)) then
  begin
   try
     Move((FCache + RecordID * FRecordBufferSize)^,RecordBuffer^,
      FRecordBufferSize);
   except
     raise EMYLDBException.Create(10127,ErrorLRetreivingRecord);
   end;
   Result := True;
  end
 else
  begin
   SaveTempPage;
   OldPos := FTempPageFile.Position;
   NewPos := Int64(RecordID - FMaxCachedRecordCount) *
             Int64(FRecordBufferSize);
   FTempPageFile.Position := NewPos;
   if (FTempPageFile.Position <> NewPos) then
    raise EMYLDBException.Create(10129,ErrorLCannotSetPosition,
      [NewPos,OldPos,FTempPageFile.Size]);
   OldPos := FTempPageFile.Position;
   ReadBytes := FTempPageFile.Read(RecordBuffer^,FRecordBufferSize);
   if (ReadBytes <> FRecordBufferSize) then
    raise EMYLDBException.Create(10130,ErrorLCannotReadFromStream,
      [OldPos,FTempPageFile.Size,FRecordBufferSize,ReadBytes]);
   Result := True;
  end;
end; // ReadRecord


//------------------------------------------------------------------------------
// return result for attempt of getting record relatively to first position
// and set RecordID to new record ID
//------------------------------------------------------------------------------
function TMYLDBTemporaryRecordManager.GetRecordFromFirstPosition(
        GetRecordMode: TMYLDBGetRecordMode;
        var RecordID:  TMYLDBRecordNo
                                   ): TMYLDBGetRecordResult;
begin
 Result := grrError;
 case GetRecordMode of
  grmPrior:
   begin
    Result := grrBOF;
   end;
  grmCurrent:
   begin
    Result := grrError;
   end;
  grmNext:
   begin
    RecordID := 0;
    Result := grrOK;
   end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产.欧美.日韩| 午夜电影网亚洲视频| 国产a久久麻豆| 欧美激情在线观看视频免费| 波多野结衣一区二区三区| 国产精品你懂的在线| 91视频在线观看| 一区二区三区欧美在线观看| 欧美日韩一区 二区 三区 久久精品| 亚洲国产综合人成综合网站| 成人高清免费观看| 国产欧美精品一区二区色综合| 国产福利视频一区二区三区| 国产日韩欧美在线一区| www.综合网.com| 一区二区三区日韩| 日韩精品最新网址| 成人午夜伦理影院| 有码一区二区三区| 欧美日韩在线三级| 欧美一区二区在线观看| 精品一二三四在线| 亚洲人123区| 欧美电视剧在线看免费| 国产精品99久久久久久有的能看| 中文字幕永久在线不卡| 制服丝袜国产精品| 成人综合在线观看| 日韩在线a电影| 日韩欧美卡一卡二| 国产精品123区| 亚洲人123区| 日韩一区二区三区免费观看| 成人免费看的视频| 美女被吸乳得到大胸91| 中文字幕一区不卡| 精品国产a毛片| 在线观看不卡视频| 成人精品一区二区三区四区| 日本一不卡视频| 亚洲精品国产品国语在线app| 欧美美女网站色| eeuss鲁片一区二区三区| 男女男精品视频网| 亚洲一卡二卡三卡四卡无卡久久| 欧美变态tickle挠乳网站| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 韩国av一区二区| 日韩精品免费视频人成| 亚洲黄色性网站| 国产精品乱码人人做人人爱| 精品少妇一区二区三区日产乱码 | 欧美日韩视频在线一区二区| 国产中文字幕精品| 日本免费在线视频不卡一不卡二| 亚洲色图在线视频| 国产精品国产三级国产三级人妇| 欧美成人欧美edvon| 5858s免费视频成人| 91黄色免费观看| jizz一区二区| 国产不卡视频一区二区三区| 激情亚洲综合在线| 麻豆国产一区二区| 男女男精品网站| 日本sm残虐另类| 天天影视网天天综合色在线播放| 一区二区三区四区五区视频在线观看| 国产精品久久午夜| 国产精品国产三级国产有无不卡 | 91精品国产一区二区| 在线观看精品一区| 欧美天天综合网| 欧美性xxxxxx少妇| 欧洲一区二区三区免费视频| 日本乱人伦aⅴ精品| www.亚洲色图.com| 色综合久久久久久久久久久| 91网站最新网址| 欧美视频一区二区三区四区| 在线观看中文字幕不卡| 欧美三级电影在线看| 欧美日韩国产不卡| 5858s免费视频成人| 91精品国产一区二区| 精品国精品自拍自在线| 久久久99精品久久| 国产精品国产自产拍在线| 亚洲免费观看高清| 丝袜美腿成人在线| 久久草av在线| 国产成人免费视频精品含羞草妖精| 国产福利一区二区三区视频在线 | 国产剧情一区二区| 国产成a人亚洲精品| 91小视频免费观看| 欧美中文字幕一区二区三区| 欧美日韩国产片| 精品国产1区二区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 91.麻豆视频| 久久新电视剧免费观看| 国产精品久久久久影视| 亚洲一区二区四区蜜桃| 蜜臀久久久久久久| 粉嫩av亚洲一区二区图片| 色综合久久中文综合久久牛| 6080yy午夜一二三区久久| 久久精品人人做人人综合| 一区二区三区在线视频观看58| 日韩国产精品大片| 高清国产一区二区三区| 欧美三级电影在线看| 精品免费99久久| 亚洲精品乱码久久久久久日本蜜臀| 丝袜脚交一区二区| 成人免费观看av| 91精品国产综合久久久蜜臀图片| 久久精品视频网| 亚洲123区在线观看| 国产一区三区三区| 欧美性大战久久久久久久蜜臀 | 国产91精品免费| 欧美日韩国产中文| 国产视频一区二区在线观看| 亚洲国产乱码最新视频| 国产91高潮流白浆在线麻豆| 色婷婷狠狠综合| 久久久久久一二三区| 天天操天天干天天综合网| av电影在线观看一区| 日韩免费一区二区| 午夜伦理一区二区| 91美女片黄在线观看91美女| 国产日韩欧美不卡| 美女mm1313爽爽久久久蜜臀| 欧亚一区二区三区| 国产精品第五页| 国产一区二区美女| 日韩免费一区二区| 日韩中文字幕av电影| 91官网在线免费观看| 国产欧美精品一区aⅴ影院 | 不卡一卡二卡三乱码免费网站| 91精品国产综合久久精品app| 亚洲裸体在线观看| 成人永久aaa| 欧美精品一区二区久久久| 天涯成人国产亚洲精品一区av| www.色精品| 国产精品国产精品国产专区不蜜 | 色999日韩国产欧美一区二区| 久久先锋影音av| 看片的网站亚洲| 欧美一区二区三区四区高清| 午夜日韩在线电影| 欧美日韩精品欧美日韩精品一综合| 亚洲日本va在线观看| 波波电影院一区二区三区| 日本一区二区电影| 岛国精品在线观看| 中文字幕va一区二区三区| 国产成人在线网站| 中文字幕成人网| 972aa.com艺术欧美| 精品一区二区三区蜜桃| 日韩欧美另类在线| 极品少妇xxxx精品少妇偷拍| 日韩欧美电影一区| 极品少妇一区二区| 久久久久久久国产精品影院| 蜜臀av亚洲一区中文字幕| 欧美麻豆精品久久久久久| 日韩av电影免费观看高清完整版| 欧美酷刑日本凌虐凌虐| 亚洲电影在线免费观看| 欧美亚洲自拍偷拍| 亚洲va国产va欧美va观看| 色噜噜狠狠色综合中国| 国产精品美日韩| 99re亚洲国产精品| 中日韩免费视频中文字幕| 国产91丝袜在线观看| 国产日本一区二区| 成人黄色a**站在线观看| 国产精品视频免费| 91丨九色丨黑人外教| 亚洲人成网站精品片在线观看| 99re66热这里只有精品3直播 | 亚洲国产成人av网| 欧美一区二区在线看| 免费观看日韩电影| 久久久精品蜜桃| 色狠狠一区二区| 蜜桃一区二区三区在线| 国产日韩欧美精品在线| 懂色av中文字幕一区二区三区 | 亚洲私人黄色宅男| 欧美日韩美女一区二区| 国产精品综合一区二区三区|