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

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

?? myldbbtree.pas

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

{$I MYLDBVer.inc}

interface

uses SysUtils, Classes, Math,

// MYLDBoluteDatabase units

     {$IFDEF DEBUG_LOG}
     MYLDBDebug,
     {$ENDIF}
     MYLDBPage,
     MYLDBBaseEngine,
     MYLDBExcept,
     MYLDBBase,
     MYLDBConverts,
     MYLDBMemory,
     MYLDBTypes,
     MYLDBVariant,
     MYLDBConst;

  //===============================================
  // B-tree page structure
  //===============================================
  // +--------------------------------------------+
  // | PageHeader                                 |
  // +--------------------------------------------+
  // | BTree PageHeader                           |
  // +--------------------------------------------+
  // | Page Prefix (optional)                     |
  // +--------------------------------------------+
  // | Entries                                    |
  // +--------------------------------------------+
  // | Empty space                                |
  // +--------------------------------------------+

  //===============================================
  // Entry structure
  //===============================================
  // +--------------------------------------------+
  // | KeyPrefix | Suffix (opt) | Reference (opt) |
  // +--------------------------------------------+

  //===============================================
  // Key Prefix structure
  //===============================================
  // +--------------------------------------------------------+
  // | Field1IsNull (byte) | Field1 data | Field2IsNull | ... |
  // +--------------------------------------------------------+


type

  TMYLDBBTreeLeafController = class;
  TMYLDBBTreeNodeController = class;
  TMYLDBBTreeRecordIndex = class;

  // BTree PageHeader
  TMYLDBBTreePageHeader = packed record
     IsRoot:           Boolean;
     IsLeaf:           Boolean;
     LeftPageNo:       TMYLDBPageNo;
     RightPageNo:      TMYLDBPageNo;
     HasKeys:          Boolean;
     HasSuffixes:      Boolean;
     KeyPrefixSize:    Word;
     EntryCount:         Word;
     PagePrefixSize:   Word;
  end;
  PMYLDBBTreePageHeader = ^TMYLDBBTreePageHeader;


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBBTreeKeyPath
//
////////////////////////////////////////////////////////////////////////////////

  // key path position
  TMYLDBKeyPathPosition = (
    kppUnknown,
    kppOnKey,
    kppBeforeKey,
    kppAfterKey,
    kppBOF,
    kppEOF);
  PMYLDBKeyPathPosition = ^TMYLDBKeyPathPosition;

  TMYLDBKeyPathItem = record
    PageNo:       TMYLDBPageNo;
    EntryNo:      Integer;
    EntryCount:   Integer;
  end;

  TMYLDBKeyPath = class (TObject)
   public
    Items: array [0..31] of TMYLDBKeyPathItem;
    Count: Integer;
    ItemNo: Integer;
    PositionType: TMYLDBKeyPathPosition;
    IndexState: Integer;

    constructor Create;
    procedure Clear;
    procedure Assign(KeyPath: TMYLDBKeyPath);
    procedure AddItem(aPageNo: TMYLDBPageNo; aEntryNo, aEntryCount: Integer);
    procedure DeleteLastItem;
    procedure IncLevel;
    procedure DecLevel;
    function GetCurrentPageNo: TMYLDBPageNo;
    procedure SetCurrentPageNo(Value: TMYLDBPageNo);
    function PageExists(aPageNo: TMYLDBPageNo): Boolean;
    // return 0, 1, -1 if (Self = aKeyPath), (Self > aKeyPath), (Self < aKeyPath)
    function Compare(aKeyPath: TMYLDBKeyPath): Integer;
    function GetApproxRecNoInPercents: double;
    function GetBitmapRecNoByIndexPosition(MaxEntriesPerPage: Integer): TMYLDBRecordNo;
    procedure FillItemsByBitmapRecNo(RecordNo, MaxEntriesPerPage: Integer);

    property  CurrentPageNo: TMYLDBPageNo read GetCurrentPageNo write SetCurrentPageNo;
  end;


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBBTreeKeyRef
//
////////////////////////////////////////////////////////////////////////////////

  TMYLDBKeyPart = record
   OffsetInShortKeyBuffer: Integer;
   OffsetInFullKeyBuffer:  Integer;
   OffsetInRecordBuffer:   Integer; // optional
   FieldNo:                Integer;  // optional
   ShortSize:              Integer;
   FullSize:               Integer;
   AddedSize:          Integer;
   DataType:               TMYLDBBaseFieldType;
   Descending:             Boolean;
   CaseInsensitive:        Boolean;
  end;

   TMYLDBBTreeKeyRef = class (TObject)
   private
     FShortKeySize:       Integer;
     FFullKeySize:        Integer;
     FReferenceSize:      Word;
     FKeyIsReference:     Boolean;
     FCompareFieldCount:  Integer;

     function GetPartCount: Integer;
   protected
     procedure SetPartCount(Value: Integer); virtual;

   public
     Parts: array of TMYLDBKeyPart;

     function AllocShortKeyBuffer: PChar;
     function AllocFullKeyBuffer: PChar;
     procedure FreeAndNilKeyBuffer(var Buffer: PChar);
     function CompareShortKeys(KeyBuffer1, KeyBuffer2: PChar;
                          MayUseFullKeys: Boolean=False;
                          SessionID: TMYLDBSessionID = INVALID_SESSION_ID;
                          Reference1: PChar=nil; Reference2: PChar=nil): Integer; virtual; abstract;
     function CompareFullKeys(KeyBuffer1, KeyBuffer2: PChar): Integer; virtual; abstract;
     function CompareReferences(Reference1, Reference2: PChar; Size: Integer): Integer;

     property PartCount: Integer read GetPartCount write SetPartCount;
     property ShortKeySize: Integer read FShortKeySize;
     property FullKeySize: Integer read FFullKeySize;
     property ReferenceSize: Word read FReferenceSize write FReferenceSize;
     property KeyIsReference: Boolean read FKeyIsReference write FKeyIsReference;
     property CompareFieldCount: Integer read FCompareFieldCount write FCompareFieldCount;
  end;


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBRecordKeyRef
//
////////////////////////////////////////////////////////////////////////////////

  TMYLDBRecordKeyRef = class (TMYLDBBTreeKeyRef)
   private
     LRecordBuffer: PChar;
     LTableData:    Pointer;
     FCompareLengths: array of integer;

     procedure RetrieveFullKeyByRecordID(RecordID: TMYLDBRecordID; FullKey: PChar;
                                         SessionID: TMYLDBSessionID);
   protected
     procedure SetPartCount(Value: Integer); override;

   public
     constructor Create;
     procedure Assign(IndexDef: TMYLDBIndexDef; aTableData: Pointer);
     procedure MakeShortKeyFromRecordBuffer(RecordBuffer: PChar; KeyBuffer: PChar);
     procedure MakeFullKeyFromRecordBuffer(RecordBuffer: PChar; KeyBuffer: PChar);
     function CompareShortKeys(KeyBuffer1, KeyBuffer2: PChar;
                          MayUseFullKeys: Boolean=False;
                          SessionID: TMYLDBSessionID = INVALID_SESSION_ID;
                          Reference1: PChar=nil; Reference2: PChar=nil): Integer; override;
     function CompareFullKeys(KeyBuffer1, KeyBuffer2: PChar): Integer; override;
     procedure SetPartialCompare(RecordBuffer: PChar; PartialCompare: Boolean);
  end;



////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBPageKeyRef
//
////////////////////////////////////////////////////////////////////////////////

  TMYLDBPageKeyRef = class (TMYLDBBTreeKeyRef)
   public
     constructor Create;
     function CompareShortKeys(KeyBuffer1, KeyBuffer2: PChar;
                          MayUseFullKeys: Boolean=False;
                          SessionID: TMYLDBSessionID = INVALID_SESSION_ID;
                          Reference1: PChar=nil; Reference2: PChar=nil): Integer; override;
     function CompareFullKeys(KeyBuffer1, KeyBuffer2: PChar): Integer; override;
  end;



////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBBTreePage
//
////////////////////////////////////////////////////////////////////////////////

  TMYLDBBTreePage = class(TMYLDBPageController)
   private
     LKeyRef:               TMYLDBBTreeKeyRef;
     LPageManager:          TMYLDBPageManager;
     FLeafController:       TMYLDBBTreeLeafController;
     FNodeController:       TMYLDBBTreeNodeController;

     function GetIsRoot: Boolean;
     procedure SetIsRoot(Value: Boolean);
     function GetIsLeaf: Boolean;
     procedure SetIsLeaf(Value: Boolean);
     function GetLeftPageNo: TMYLDBPageNo;
     procedure SetLeftPageNo(Value: TMYLDBPageNo);
     function GetRightPageNo: TMYLDBPageNo;
     procedure SetRightPageNo(Value: TMYLDBPageNo);
     function GetHasKeys: Boolean;
     procedure SetHasKeys(Value: Boolean);
     function GetHasSuffixes: Boolean;
     procedure SetHasSuffixes(Value: Boolean);
     function GetKeyPrefixSize: Word;
     procedure SetKeyPrefixSize(Value: Word);
     function GetEntryCount: Integer;
     procedure SetEntryCount(Value: Integer);
     function GetPagePrefixSize: Word;
     procedure SetPagePrefixSize(Value: Word);
     //-------------------------------------
     function GetEntrySize: Integer;
     function GetReferenceSize: Integer;
     function GetEntriesOffset: Integer;
     function GetSuffixPtrSize: Integer;

   public
     constructor Create(PageManager: TMYLDBPageManager; KeyRef: TMYLDBBTreeKeyRef);
     destructor Destroy; override;
     procedure AddIndexPage(SessionID: TMYLDBSessionID; var Page: TMYLDBBTreePage);
     procedure RemoveIndexPage(SessionID: TMYLDBSessionID; PageNo: TMYLDBPageNo);
     procedure GetIndexPage(SessionID: TMYLDBSessionID; PageNo: TMYLDBPageNo; var Page: TMYLDBBTreePage);
     procedure PutIndexPage(Page: TMYLDBBTreePage);
     procedure Init;
     procedure InitAsRoot;
     procedure CopyFrom(Source: TMYLDBBTreePage; StartNo, Count: Integer);
     procedure AppendFrom(Source: TMYLDBBTreePage; StartNo, Count: Integer);
     procedure InsertFrom(Source: TMYLDBBTreePage; StartNo, Count: Integer);
     procedure InsertLeafEntry(SessionID: TMYLDBSessionID; Key, Reference: PChar; KeyPath: TMYLDBKeyPath);
     procedure InsertNodeEntry(SessionID: TMYLDBSessionID; Key, Reference: PChar; KeyPath: TMYLDBKeyPath);
     function DeleteLeafEntry(SessionID: TMYLDBSessionID; Key, Reference: PChar; KeyPath: TMYLDBKeyPath): Boolean;
     procedure DeleteNodeEntry(
                        SessionID:     TMYLDBSessionID;
                        KeyPath:       TMYLDBKeyPath;
                        MergeWithLeft: Boolean
                              );
     function FindEntry(
                        SessionID: TMYLDBSessionID;
                        Key:       PChar;
                        Reference: PChar;
                        Position:  TMYLDBKeyPath
                       ): Boolean;
     function GetFirstPosition(SessionID: TMYLDBSessionID; Position: TMYLDBKeyPath): Boolean;
     function GetLastPosition(SessionID: TMYLDBSessionID; Position: TMYLDBKeyPath): Boolean;
     function FindByCondition(
                              SessionID: TMYLDBSessionID;
                              First:     Boolean; // if False => Last
                              Key:       PChar;
                              Operator:  TMYLDBSearchCondition;
                              Position:  TMYLDBKeyPath
                             ): Boolean;

     procedure FreeAllPages(SessionID: TMYLDBSessionID; KeepRootPage: Boolean);
     procedure CheckIntegrity(SessionID: TMYLDBSessionID; KeyPath: TMYLDBKeyPath);
     function GetPKey(KeyPosition: Integer): PChar;
     function GetPReference(RefPosition: Integer): PChar;
     procedure GetFirstKey(SessionID: TMYLDBSessionID; Key: PChar);
     procedure GetLastKey(SessionID: TMYLDBSessionID; Key: PChar);
     procedure GetFirstEntry(SessionID: TMYLDBSessionID; Key, Reference: PChar);
     procedure GetLastEntry(SessionID: TMYLDBSessionID; Key, Reference: PChar);
     procedure UpdateKey(Position: Integer; Key: PChar);
     procedure UpdateReference(Position: Integer; Reference: PChar);

     //--- BTree page header ---
     property IsRoot: Boolean read GetIsRoot write SetIsRoot;
     property IsLeaf: Boolean read GetIsLeaf write SetIsLeaf;
     property LeftPageNo: TMYLDBPageNo read GetLeftPageNo write SetLeftPageNo;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡视频一二三| 国产一区二区三区综合| 午夜精品久久久久久久久| 日本三级亚洲精品| av影院午夜一区| 欧美变态凌虐bdsm| 亚洲日本在线视频观看| 精久久久久久久久久久| 91久久香蕉国产日韩欧美9色| 欧美α欧美αv大片| 亚洲成人福利片| 成人禁用看黄a在线| 日韩写真欧美这视频| 亚洲午夜在线观看视频在线| 91久久精品网| 国产三级精品视频| 精品一区二区三区影院在线午夜| 欧美性受xxxx| 一个色妞综合视频在线观看| 成人午夜碰碰视频| 国产亚洲精品aa| 国产综合久久久久久久久久久久| 欧美日韩日日摸| 亚洲成人手机在线| 欧美日韩免费一区二区三区 | 91免费视频大全| 久久色在线视频| 久久97超碰国产精品超碰| 在线播放欧美女士性生活| 亚洲国产色一区| 欧美日韩视频在线第一区| 夜夜嗨av一区二区三区中文字幕| 色域天天综合网| 亚洲激情成人在线| 欧美性视频一区二区三区| 亚洲国产成人91porn| 欧美色涩在线第一页| 亚洲午夜在线观看视频在线| 欧美在线三级电影| 午夜久久电影网| 欧美猛男男办公室激情| 日本三级韩国三级欧美三级| 日韩亚洲欧美高清| 国产一区二区在线电影| 国产午夜亚洲精品不卡| 99re这里只有精品首页| 亚洲一区二区三区自拍| 欧美美女网站色| 九九视频精品免费| 中文字幕av一区 二区| 91视频观看免费| 亚洲精品少妇30p| 欧美久久久久久蜜桃| 日本不卡一二三| 欧美国产1区2区| 欧美少妇性性性| 精品系列免费在线观看| 综合久久国产九一剧情麻豆| 欧美视频一二三区| 精品一区二区三区在线视频| 亚洲欧美怡红院| 制服丝袜亚洲色图| 国产精品一区不卡| 一级特黄大欧美久久久| 精品理论电影在线| 一本到不卡免费一区二区| 美女视频黄a大片欧美| 久久久久97国产精华液好用吗| 91首页免费视频| 国内精品嫩模私拍在线| 亚洲综合一区在线| 国产午夜精品在线观看| 在线播放国产精品二区一二区四区| 韩日欧美一区二区三区| 亚洲综合免费观看高清完整版在线| 日韩精品专区在线影院观看| 91色视频在线| 国产在线播精品第三| 亚洲成人自拍网| 国产精品毛片久久久久久久| 欧美一区二区三区精品| 色久优优欧美色久优优| 国产精品一区一区三区| 午夜精品久久久久久久| 国产精品高潮呻吟| 久久午夜国产精品| 91精品国产全国免费观看| 一本到不卡精品视频在线观看| 久久国产福利国产秒拍| 亚洲福利视频一区二区| 国产精品免费网站在线观看| 欧美大片顶级少妇| 欧美日韩亚洲综合一区二区三区 | 久久久夜色精品亚洲| 91成人免费电影| 国产99久久久精品| 玖玖九九国产精品| 日本不卡高清视频| 亚洲成av人片在www色猫咪| 国产精品视频免费| 久久精品男人天堂av| 精品国精品自拍自在线| 日韩午夜激情视频| 欧美裸体bbwbbwbbw| 在线视频综合导航| 97久久久精品综合88久久| 国产精品12区| 国产一区二区美女| 国产在线精品免费av| 麻豆专区一区二区三区四区五区| 亚洲成a人v欧美综合天堂| 亚洲欧美成人一区二区三区| 1区2区3区精品视频| 亚洲男人的天堂一区二区 | 欧美日韩精品电影| 欧美色中文字幕| 欧美日韩精品一区视频| 欧美日本一道本| 91麻豆精品国产91久久久久久久久 | 99热在这里有精品免费| 99久久婷婷国产精品综合| 99久久精品免费| 色悠久久久久综合欧美99| 在线视频国内自拍亚洲视频| 色综合久久天天综合网| 成人黄色av电影| 国产传媒日韩欧美成人| 不卡av在线免费观看| 成人美女在线视频| 99久久综合狠狠综合久久| 色吊一区二区三区| 欧美日本一区二区三区| 日韩欧美激情四射| 久久久精品免费网站| 欧美激情一区二区三区四区| 综合网在线视频| 日韩国产精品久久| 午夜精品福利一区二区蜜股av | 国产亚洲一本大道中文在线| 国产女人水真多18毛片18精品视频| 日本一区二区免费在线观看视频| 国产精品国产三级国产a| 亚洲综合一区二区三区| 久久国产夜色精品鲁鲁99| 国产成人福利片| 在线观看三级视频欧美| 欧美tickling网站挠脚心| 中文字幕视频一区| 免费视频最近日韩| 99久久国产综合精品色伊| 欧美麻豆精品久久久久久| 日本一区二区免费在线观看视频| 亚洲成av人片一区二区三区| 国产精品亚洲午夜一区二区三区 | 欧美日韩你懂的| 国产亚洲精品aa午夜观看| 一级精品视频在线观看宜春院| 毛片av一区二区三区| 色综合久久精品| 2017欧美狠狠色| 午夜视频一区二区三区| 粉嫩嫩av羞羞动漫久久久| 91精品国产一区二区| 1000精品久久久久久久久| 久久99国产精品麻豆| 欧美揉bbbbb揉bbbbb| 国产精品美女久久久久久久久 | 粉嫩久久99精品久久久久久夜 | 91在线视频在线| 日韩免费看网站| 亚洲国产欧美日韩另类综合| 成人深夜视频在线观看| 91.成人天堂一区| 亚洲欧美电影一区二区| 国产成人免费在线观看不卡| 欧美一区二区三区四区高清 | 国产欧美精品日韩区二区麻豆天美| 亚洲人成电影网站色mp4| 国产一区二区毛片| 欧美一级午夜免费电影| 亚洲综合激情网| 丁香天五香天堂综合| 精品日本一线二线三线不卡| 亚洲一区欧美一区| 99这里只有久久精品视频| 日韩精品一区二区三区在线观看 | 成年人午夜久久久| 欧美另类高清zo欧美| 亚洲欧美二区三区| av毛片久久久久**hd| 久久久久久免费网| 国产一区二区不卡老阿姨| 欧美一区二区三区在线电影| 亚洲精品福利视频网站| 97精品国产97久久久久久久久久久久 | 久久久.com| 久久精品av麻豆的观看方式| 欧美图区在线视频| 一区二区三区欧美日韩| 99久久精品免费精品国产|