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

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

?? myldbmemengine.pas

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

{$I MYLDBVer.inc}

interface

uses SysUtils, Classes, Math,

// MYLDBoluteDatabase units

     {$IFDEF DEBUG_LOG}
     MYLDBDebug,
     {$ENDIF}
     MYLDBExcept,
     MYLDBBase,
     MYLDBBaseEngine,
     MYLDBBTree,
     MYLDBPage,
     MYLDBMemory,
     MYLDBCompression,
     MYLDBSecurity,
     MYLDBTypes,
     MYLDBExpressions,
     MYLDBConverts,
     MYLDBConst;

type

  TMYLDBMemoryPageManager = class;

////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBMemoryDatabaseData
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBMemoryDatabaseData = class (TMYLDBDatabaseData)
   private
    FLastObjectID: TMYLDBLastObjectID;
   public
    constructor Create;
    destructor Destroy; override;
    // create table data
    function CreateTableData(Cursor: TMYLDBCursor): TMYLDBTableData; override;
    procedure ConnectSession(Session: TMYLDBBaseSession); override;

    function GetNewObjectId: TMYLDBObjectID; override;
  end; // TMYLDBMemoryDatabaseData


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBMemoryRecordManager
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBMemoryRecordManager = class (TMYLDBBaseRecordManager)
   private
    // record buffers
    FRecordBuffer:          PChar;
    // sequence of bits: 1 - for deleted record, 0 - for existing record
    FDeleteFlagBuffer:      PChar;
    FAllocatedRecordCount:  Integer;
    FAllocRecordsBy:        Integer;
    FFirstRecordID:         Integer;
    FLastRecordID:          Integer;
    FBitsTable:             array [0..255] of byte;
    FNoRecordsDeleted:      ByteBool;
   private
    // find record id by record position
    function FindRecord(RecordNo: TMYLDBRecordNo): TMYLDBRecordNo;
    // returns position of the record specified by record id,
    // or INVALID_ID8 if the record with this id does not exists
    function GetTablePositionByRecordID(
              RecordNo:           TMYLDBRecordNo
                                        ): TMYLDBRecordNo;
    // return result for attempt of getting record relatively to first position
    // and set RecordID to new record ID
    function GetRecordFromFirstPosition(
            GetRecordMode: TMYLDBGetRecordMode;
            var RecordID: Integer
                                       ): 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: Integer
                                      ): TMYLDBGetRecordResult;
    // return result for attempt of getting record relatively any position
    // and set RecordID to new record ID
    function GetRecordFromAnyPosition(
            GetRecordMode: TMYLDBGetRecordMode;
            var RecordID: Integer
                                      ): TMYLDBGetRecordResult;
   protected
    procedure SetRecordCount(NewRecordCount: Integer);
   public
    constructor Create(
                        RecordBufferSize:     Integer;
                        AllocRecordsBy:       Integer
                      );
    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;
    // add loaded record
    //procedure AddLoadedRecord(RecordBuffer: TMYLDBRecordBuffer); override;
  end; // TMYLDBMemoryRecordManager


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBMemoryTableData
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBMemoryTableData = class (TMYLDBTableData)
   private
    FLoadedRecordCount: Integer;
    FAllocRecordsBy:    Integer;

   protected
    procedure CreateRecordManager; override;
    procedure CreateFieldManager(FieldDefs: TMYLDBFieldDefs); override;
    procedure CreateIndexManager(IndexDefs: TMYLDBIndexDefs); override;
    procedure CreateConstraintManager(ConstraintDefs: TMYLDBConstraintDefs); override;
    //procedure CreateSequenceManager;
    //procedure BuildSequences;
    procedure LoadTableHeader(
              Stream:             TStream;
              var BLOBDescriptor: TMYLDBBLOBDescriptor
                              );
    procedure SaveTableHeader(
              Stream:             TStream;
              var BLOBDescriptor: TMYLDBBLOBDescriptor
                              );
    //procedure LoadSequencesFromStream(Stream: TStream);
    //procedure SaveSequencesToStream(Stream: TStream);
    procedure LoadBLOBDataFromStream(
            RecordBuffer: TMYLDBRecordBuffer;
            FieldNo:      Integer;
            Stream:       TStream
                                 );
    procedure LoadRecordFromStream(
            RecordBuffer: TMYLDBRecordBuffer;
            Stream:       TStream
                                 );
    procedure PrepareRecordBufferForSave(
            RecordBuffer:             TMYLDBRecordBuffer;
            BLOBDescriptorList:       TList;
            BLOBDataList:             TList;
            BLOBPosition:             Int64
                                                );
    procedure SaveRecordToStream(
            RecordBuffer: TMYLDBRecordBuffer;
            Stream:       TStream
                                 );
    //procedure LoadRecordManager(Stream: TStream);
    //procedure SaveRecordManager(Stream: TStream);
    // 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;
                        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;

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

    procedure ClearBLOBFieldInRecordBuffer(
              RecordBuffer: TMYLDBRecordBuffer;
              FieldNo:    Integer
              ); 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;

    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;

    function LastAutoincValue(FieldNo: Integer; Session: TMYLDBBaseSession): Int64; override;
  end; // TMYLDBMemoryTableData




////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBMemoryPageManager
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBMemoryPageManager = class (TMYLDBPageManager)
   protected
     FAllocatedPageMap:    TMYLDBBitsArray;
     FAllocatedPageCount:  TMYLDBPageNo;
     FAllocateBy:          Integer;
     LastAllocatedPageNo:  TMYLDBPageNo;
     FDataPtrs:            array of PChar;

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

     constructor Create;
     destructor Destroy; override;
  end; // TMYLDBMemoryPageManager


implementation

uses

// MYLDBoluteDatabase units

  MYLDBLocalEngine;

////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBMemoryDatabaseData
//
////////////////////////////////////////////////////////////////////////////////


//------------------------------------------------------------------------------
// create
//------------------------------------------------------------------------------
constructor TMYLDBMemoryDatabaseData.Create;
begin
 inherited Create;
 FPageManager := nil;
 DatabaseName := MYLDBMemoryDatabaseName;
 FLastObjectID := 0;
end;// Create


//------------------------------------------------------------------------------
// destroy
//------------------------------------------------------------------------------
destructor TMYLDBMemoryDatabaseData.Destroy;
begin
 while (FTableDataList.Count > 0) do
  begin
    if (FTableDataList.Items[0] = nil) then
     raise EMYLDBException.Create(10258,ErrorLNilPointer);
    TMYLDBTableData(FTableDataList.Items[0]).DeleteTable(nil);
  end;
 inherited Destroy;
end;// Destroy


//------------------------------------------------------------------------------
// create table data
//------------------------------------------------------------------------------
function TMYLDBMemoryDatabaseData.CreateTableData(Cursor: TMYLDBCursor): TMYLDBTableData;
begin
 Result := TMYLDBMemoryTableData.Create(Self);
 Result.TableName := Cursor.TableName;
 FTableDataList.Add(Result);
end;


//------------------------------------------------------------------------------
// ConnectSession
//------------------------------------------------------------------------------
procedure TMYLDBMemoryDatabaseData.ConnectSession(Session: TMYLDBBaseSession);
begin
  Session.SessionID := 0;
  inherited ConnectSession(Session);
end;// ConnectSession


//------------------------------------------------------------------------------
// GetNewObjectId
//------------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合天天做天天爱| 国产精品久久久久久久久图文区 | 亚洲免费观看视频| 久久精品一区二区| 精品日韩99亚洲| 欧美大白屁股肥臀xxxxxx| 911精品国产一区二区在线| 91国产精品成人| 日本黄色一区二区| 在线观看视频91| 色狠狠综合天天综合综合| 色香蕉成人二区免费| 色国产综合视频| 91极品美女在线| 欧美日韩美女一区二区| 欧美日韩一区三区| 欧美日韩久久久久久| 欧美精品丝袜久久久中文字幕| 欧美日韩国产三级| 欧美日韩在线播放三区| 91精品国产乱| 精品久久久久久久人人人人传媒 | 在线亚洲精品福利网址导航| 91极品美女在线| 777奇米四色成人影色区| 日韩丝袜美女视频| 欧美精品一区二区三区很污很色的 | 国产一区在线不卡| 国产不卡视频一区| 91天堂素人约啪| 欧美日韩在线播| 精品国产网站在线观看| 亚洲国产精品黑人久久久| 亚洲人一二三区| 午夜久久久久久久久久一区二区| 日本91福利区| 成人亚洲一区二区一| 色综合久久88色综合天天免费| 欧美日韩在线播放一区| 精品成人私密视频| 亚洲精品伦理在线| 丝袜美腿成人在线| 国产风韵犹存在线视精品| 91麻豆免费在线观看| 91精品国产一区二区三区蜜臀| 精品国产百合女同互慰| 1024亚洲合集| 人禽交欧美网站| 懂色av噜噜一区二区三区av| 欧美图区在线视频| 久久久久久久久99精品| 亚洲精品成人天堂一二三| 麻豆成人久久精品二区三区小说| 成人性视频网站| 欧美一区二区三区播放老司机| 国产蜜臀av在线一区二区三区| 亚洲精品视频观看| 狠狠色综合日日| 在线免费亚洲电影| 久久综合久久99| 亚洲在线观看免费| 国产精品18久久久久久久网站| 欧美在线啊v一区| 中文久久乱码一区二区| 日韩精品成人一区二区在线| 99在线视频精品| 日韩欧美一区二区久久婷婷| 亚洲日本护士毛茸茸| 国产一区二区精品久久91| 欧美男女性生活在线直播观看| 国产欧美日韩一区二区三区在线观看| 五月天久久比比资源色| www.在线欧美| 久久久美女艺术照精彩视频福利播放| 一区二区三区在线观看网站| 国产乱色国产精品免费视频| 欧美日韩视频一区二区| 成人欧美一区二区三区1314| 加勒比av一区二区| 欧美精品日韩综合在线| 亚洲人123区| 韩国三级中文字幕hd久久精品| 欧美人妇做爰xxxⅹ性高电影| 国产精品国产三级国产aⅴ中文| 九九**精品视频免费播放| 正在播放亚洲一区| 亚洲国产视频一区二区| 99九九99九九九视频精品| 亚洲国产精品av| 国产一区在线观看麻豆| 精品国产一区二区在线观看| 日韩成人午夜电影| 欧美片在线播放| 亚洲成人先锋电影| 欧美在线视频全部完| 亚洲特黄一级片| 成人免费视频网站在线观看| 国产日韩欧美综合在线| 韩国成人精品a∨在线观看| 日韩久久精品一区| 青青草原综合久久大伊人精品| 欧美乱熟臀69xxxxxx| 亚洲成av人影院在线观看网| 91成人免费网站| 亚洲国产综合色| 欧美性生活久久| 亚洲一区二区3| 在线观看亚洲a| 亚洲综合视频网| 欧美四级电影网| 午夜精品成人在线视频| 欧美日韩高清一区二区| 日韩二区三区四区| 777xxx欧美| 久草中文综合在线| 精品动漫一区二区三区在线观看| 国内成人自拍视频| 国产色婷婷亚洲99精品小说| 成人小视频在线观看| 亚洲私人黄色宅男| 在线看国产一区二区| 亚洲一级片在线观看| 欧美丰满美乳xxx高潮www| 日本亚洲最大的色成网站www| 日韩精品一区二区三区蜜臀 | 欧美精品123区| 免费观看在线综合色| 26uuu亚洲| 成人的网站免费观看| 亚洲品质自拍视频网站| 欧美日本免费一区二区三区| 久久精品99国产国产精| 国产亚洲一区二区三区在线观看| 国产丶欧美丶日本不卡视频| 亚洲欧美一区二区视频| 欧美日韩精品欧美日韩精品一| 久久国产欧美日韩精品| 国产婷婷色一区二区三区| 91蜜桃在线观看| 性做久久久久久免费观看欧美| 欧美大片顶级少妇| 99久久综合色| 午夜激情一区二区三区| 久久综合色综合88| av中文字幕亚洲| 视频一区二区不卡| 中文子幕无线码一区tr| 欧洲亚洲精品在线| 国产一区二区三区久久久| 亚洲欧美另类小说视频| 日韩视频一区二区在线观看| 国产宾馆实践打屁股91| 五月婷婷激情综合| 中文一区二区完整视频在线观看| 欧美视频一区二区三区四区| 国产精品一区二区在线播放| 夜夜揉揉日日人人青青一国产精品| 欧美一区二区三区人| 91在线免费视频观看| 久久国产精品99久久久久久老狼| 国产精品久久久久7777按摩| 欧美军同video69gay| 99免费精品视频| 精品一区二区国语对白| 亚洲精品免费一二三区| 久久久久久久久久美女| 在线观看欧美黄色| 国产成人av资源| 日本女人一区二区三区| 综合久久一区二区三区| 欧美一级理论片| 色欧美日韩亚洲| 国产麻豆精品一区二区| 午夜国产不卡在线观看视频| 成人欧美一区二区三区小说| 日韩欧美一级二级三级| 欧美三级电影网| 成人丝袜视频网| 久久91精品久久久久久秒播| 一区二区成人在线| 国产欧美一区二区精品忘忧草| 欧美一级理论片| 精品视频一区二区不卡| 色婷婷久久久亚洲一区二区三区| 久久www免费人成看片高清| 亚洲福利视频三区| 亚洲乱码国产乱码精品精小说 | 国产精品久久久久久久第一福利| 欧美一区二区三区在线观看| 日本久久电影网| 成人精品国产免费网站| 激情综合色综合久久| 天堂va蜜桃一区二区三区漫画版| 亚洲视频一区二区免费在线观看| 国产欧美一区二区三区沐欲| 久久毛片高清国产| 久久综合精品国产一区二区三区 | 亚洲男同性恋视频| 中文字幕一区二区三区四区不卡| 久久日一线二线三线suv|