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

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

?? myldbbaseengine.pas

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

{$I MYLDBVer.inc}

interface


uses SysUtils, Classes, Windows {$IFNDEF NO_DIALOGS}, Dialogs, Controls{$ENDIF}, Math, DB,

// MYLDBoluteDatabase units

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

type


  TMYLDBDatabaseData = class;
  TMYLDBTableData = class;
  TMYLDBIndex = class;
  TMYLDBRecordBitmap = class;

////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBBaseRecordManager
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBBaseRecordManager = class (TObject)
   protected
    FRecordCount:           TMYLDBRecordNo;
    FTableState:            Integer;
    FRecordBufferSize:      Integer;
   public
    procedure Empty(SessionID: TMYLDBSessionID); virtual; abstract;
    // add record and return its number
    function AddRecord(SessionID: TMYLDBSessionID; RecordBuffer: TMYLDBRecordBuffer; var RecordID: TMYLDBRecordID): Boolean; virtual; abstract;
    // update record, return true if record was updated, false if record was deleted
    function UpdateRecord(SessionID: TMYLDBSessionID; RecordBuffer: TMYLDBRecordBuffer; RecordID: TMYLDBRecordID): Boolean; virtual; abstract;
    // delete record, return true if record was deleted, false if record was deleted earlier
    function DeleteRecord(SessionID: TMYLDBSessionID; var RecordID: TMYLDBRecordID): Boolean; virtual; abstract;
    // get record using physical order
    procedure GetRecordBuffer(SessionID: TMYLDBSessionID; var NavigationInfo: TMYLDBNavigationInfo); virtual; abstract;
    // return 0,1, or -1 if (1 = 2), (1 > 2) or (1 < 2)
    function CompareRecordID(RecordID1: TMYLDBRecordID; RecordID2: TMYLDBRecordID): Integer; virtual; abstract;
    // return record no
    function GetApproximateRecNo(SessionID: TMYLDBSessionID; RecordID: TMYLDBRecordID): TMYLDBRecordNo; virtual; abstract;
    //procedure LoadFromStream(Stream: TStream); virtual; abstract;
    //procedure SaveToStream(Stream: TStream); virtual; abstract;
    // add loaded record
    //procedure AddLoadedRecord(RecordBuffer: TMYLDBRecordBuffer); virtual; abstract;
   public
    property RecordCount: TMYLDBRecordNo read FRecordCount write FRecordCount;
    property TableState: Integer read FTableState write FTableState;
    property RecordBufferSize: Integer read FRecordBufferSize write FRecordBufferSize;
  end;


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBBaseFieldManager
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBBaseFieldManager = class (TObject)
   private
    FFieldDefs:       TMYLDBFieldDefs;
    FTableData:       TMYLDBTableData;
   protected
    FLastAutoIncValues: array of Int64;
    function GetNextAutoincVal(FieldNo: Integer): TMYLDBSequenceValue; virtual;
   public
    constructor Create(TableData: TMYLDBTableData);
    destructor Destroy; override;

    procedure LoadMetadata(Stream: TStream);
    procedure SaveMetadata(Stream: TStream);
    procedure LoadMostUpdated(Buf: PChar; var Offset: Integer);
    procedure SaveMostUpdated(Buf: PChar; var Offset: Integer);

    procedure RecalcFieldOffsets;
    procedure InitLastAutoIncValues;

    procedure DiskRecordBufferToMemRecordBuffer(DiskRecordBuffer, MemRecordBuffer: PChar);
    procedure MemRecordBufferToDiskRecordBuffer(MemRecordBuffer, DiskRecordBuffer: PChar);
    function CompareRecordBuffers(RecordBuffer1,RecordBuffer2: TMYLDBRecordBuffer): Boolean;
    function BlobFieldsPresent: Boolean;

    // Set default values to fields
    procedure ApplyDefaultValuesToRecordBuffer(Session: TMYLDBBaseSession; RecordBuffer: TMYLDBRecordBuffer); virtual;
    // Set new values of Autioincs to fields
    procedure ApplyAutoincsToRecordBuffer(Session: TMYLDBBaseSession; RecordBuffer: TMYLDBRecordBuffer); virtual;

    function GetNextAutoinc(Session: TMYLDBBaseSession; FieldNo: Integer): TMYLDBSequenceValue; virtual;
    function GetLastAutoinc(Session: TMYLDBBaseSession; FieldNo: Integer): TMYLDBSequenceValue; virtual;
    procedure UpdateLastAutoinc(Session: TMYLDBBaseSession; FieldNo: Integer; InsertedValue: Int64);

   public
    property FieldDefs: TMYLDBFieldDefs read FFieldDefs;
  end; // TMYLDBBaseFieldManager



////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBBaseIndexManager
//
////////////////////////////////////////////////////////////////////////////////


  TMYLDBBaseIndexManager = class (TObject)
   protected
    FTableData:       TMYLDBTableData;
    FIndexDefs:       TMYLDBIndexDefs;
    FOpenIndexList:   TList; // list of TMYLDBIndex objects
    FPageManager:          TMYLDBPageManager;
    FTemporaryPageManager: TMYLDBPageManager;
    FSynchronizingTemporaryIndexes:  Boolean;

    procedure InternalCreateIndex(
            Cursor: TMYLDBCursor;
            IndexDef: TMYLDBIndexDef
                                  );
    function InternalOpenIndex(
            IndexID: TMYLDBObjectID
                               ): TMYLDBIndex;

   public
    procedure LoadMetadata(Stream: TStream); virtual;
    procedure SaveMetadata(Stream: TStream); virtual;
    constructor Create(aTableData: TMYLDBTableData; TempPageManager: TMYLDBPageManager);
    destructor Destroy; override;

    function GetPageManager(Index: TMYLDBIndex): TMYLDBPageManager;

    procedure DropTemporaryIndexes(SessionID: TMYLDBSessionID);
    function IsIndexExists(FieldNames, AscDescList, CaseSensitivityList: TStringList;
                   SessionID: TMYLDBSessionID; FieldDefs: TMYLDBFieldDefs): Boolean;
    function FindIndex(FieldNames, AscDescList, CaseSensitivityList: TStringList;
                       SessionID: TMYLDBSessionID; FieldDefs: TMYLDBFieldDefs): TMYLDBObjectID;
    function CreateTemporaryIndex(
                    Cursor:         TMYLDBCursor;
                    FieldNamesList, AscDescList, CaseSensitivityList: TStringList
                                 ): TMYLDBObjectID;
    function FindOrCreateIndex(Cursor: TMYLDBCursor; FieldNamesList, AscDescList, CaseSensitivityList: TStringList; var IsCreated: Boolean): TMYLDBObjectID;

    // create index definitions list
    procedure CreateIndexDefs(aIndexDefs: TMYLDBIndexDefs); virtual;
    procedure CreateIndexesByIndexDefs(Cursor: TMYLDBCursor);

    function FindOpenIndex(IndexID: TMYLDBObjectID): TMYLDBIndex;
    function CreateIndex(
                         Cursor: TMYLDBCursor;
                         IndexDef: TMYLDBIndexDef
                        ): TMYLDBObjectID;
    function OpenIndex(IndexID: TMYLDBObjectID): TMYLDBIndex;
    procedure CloseIndex(IndexID: TMYLDBObjectID);
    procedure DropIndex(SessionID: TMYLDBSessionID; IndexID: TMYLDBObjectID);
    procedure DropAllIndexes(SessionID: TMYLDBSessionID);
    procedure EmptyIndex(SessionID: TMYLDBSessionID; IndexID: TMYLDBObjectID);
    procedure EmptyAllIndexes(SessionID: TMYLDBSessionID);

    procedure GetRecordBuffer(
                               SessionID: TMYLDBSessionID;
                               var NavigationInfo: TMYLDBNavigationInfo;
                               IndexPositionCache: TMYLDBIndexPositionCache;
                               TableState:         Integer
                             );
    procedure InsertRecord(Cursor: TMYLDBCursor);
    procedure UpdateRecord(Cursor: TMYLDBCursor; BeforeNewRecordIsStored: Boolean);
    procedure DeleteRecord(Cursor: TMYLDBCursor);

    procedure SynchronizeTemporaryIndexes(Cursor: TMYLDBCursor; var IsChanged: Boolean);
    procedure RenameField(FieldName, NewFieldName: String);

    property IndexDefs: TMYLDBIndexDefs read FIndexDefs;
    property TableData: TMYLDBTableData read FTableData;
    property PageManager: TMYLDBPageManager read FPageManager;
  end; // TMYLDBBaseIndexManager


////////////////////////////////////////////////////////////////////////////////
//
// TMYLDBIndex
//
////////////////////////////////////////////////////////////////////////////////

  TMYLDBIndex = class (TObject)
   protected
    FIndexDef:      TMYLDBIndexDef;
    FIndexManager:  TMYLDBBaseIndexManager;
   public
    constructor Create(aIndexManager: TMYLDBBaseIndexManager);
    destructor Destroy; override;
    procedure CreateIndex(Cursor: TMYLDBCursor; aIndexDef: TMYLDBIndexDef); virtual;
    procedure DropIndex(SessionID: TMYLDBSessionID); virtual; abstract;
    procedure EmptyIndex(SessionID: TMYLDBSessionID); virtual; abstract;
    procedure OpenIndex(aIndexDef: TMYLDBIndexDef); virtual;
    procedure RebuildTemporaryIndex(Cursor: TMYLDBCursor); virtual; abstract;

    procedure GetRecordBuffer(SessionID:          TMYLDBSessionID;
                              var NavigationInfo: TMYLDBNavigationInfo;
                              IndexPositionCache: TMYLDBIndexPositionCache;
                              TableState:         Integer); virtual; abstract;
    procedure GetClosestRecordBuffer(
                              SessionID:          TMYLDBSessionID;
                              var NavigationInfo: TMYLDBNavigationInfo;
                               IndexPositionCache: TMYLDBIndexPositionCache;
                               TableState:         Integer
                               ); virtual; abstract;
    function CreateIndexPosition: TMYLDBIndexPosition; virtual; abstract;
    procedure FreeIndexPosition(var IndexPosition: TMYLDBIndexPosition); virtual; abstract;
    function GetIndexPosition(
                               SessionID:      TMYLDBSessionID;
                               RecordID:       TMYLDBRecordID;
                               RecordBuffer:   TMYLDBRecordBuffer;
                               IndexPosition:  TMYLDBIndexPosition
                             ): Boolean; virtual; abstract;
    // return 0, 1, -1 if (Pos1 = Pos2), (Pos1 > Pos2), (Pos1 < Pos2)
    function CompareRecordPositionsInIndex(
                        RecordPosition1: TMYLDBIndexPosition;
                        RecordPosition2: TMYLDBIndexPosition
                                          ): Integer; virtual; abstract;
    function GetRecNoByRecordID(
                                SessionID:      TMYLDBSessionID;
                                RecordID:       TMYLDBRecordID;
                                RecordBuffer:   TMYLDBRecordBuffer
                               ): TMYLDBRecordNo; virtual; abstract;
    function GetRecordIDByRecNo(
                                SessionID:      TMYLDBSessionID;
                                RecNo:          TMYLDBRecordNo
                               ): TMYLDBRecordID; virtual; abstract;
    procedure ApplyDistinctToRecordBitmap(
                                SessionID:      TMYLDBSessionID;
                                Bitmap:         TMYLDBRecordBitmap;
                                DistinctFieldCount: Integer
                                         ); virtual; abstract;
    function CreateSearchInfo: TMYLDBSearchInfo; virtual; abstract;
    procedure FreeSearchInfo(SearchInfo: TMYLDBSearchInfo); virtual; abstract;
    function FindRecord(
                       SessionID:           TMYLDBSessionID;
                       Restart:             Boolean;
                       GoForward:           Boolean;
                       StartScanCondition:  TMYLDBScanSearchCondition;
                       EndScanCondition:    TMYLDBScanSearchCondition;
                       RecordBuffer:        TMYLDBRecordBuffer;
                       var RecordID:        TMYLDBRecordID;
                       SearchInfo:          TMYLDBSearchInfo
                      ): Boolean; virtual; abstract;
    // return 0 if record buffers are equal in this index
    // return 1 if Buffer1 is higher than Buffer 2 (Pos1 > Pos2)
    // return -1 if Buffer1 is lower than Buffer 2 (Pos1 < Pos2)
    function CompareRecordBuffersByIndex(
                        Buffer1: TMYLDBRecordBuffer;
                        Buffer2: TMYLDBRecordBuffer;
                        IndexFieldCount: Integer
                                        ): Integer; virtual; abstract;

    // return 0 if conditions are equal in this index
    // return 1 if Condition1 is higher than Condition2
    // return -1 if Condition1 is lower than Condition2
    function CompareConditions(
                    Condition1:   TMYLDBScanSearchCondition;
                    Condition2:   TMYLDBScanSearchCondition
                              ): Integer; virtual; abstract;
    // approximate record count berween range conditions
    function GetApproxRangeRecordCount(
                    SessionID:         TMYLDBSessionID;
                    TableRecordCount:  TMYLDBRecordNo;
                    RangeCondition1:   TMYLDBScanSearchCondition;
                    RangeCondition2:   TMYLDBScanSearchCondition
                                      ): TMYLDBRecordNo; virtual; abstract;
    function CanInsertRecord(

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆专区一区二区三区四区五区| 欧美高清视频一二三区| 在线观看中文字幕不卡| 亚洲蜜臀av乱码久久精品蜜桃| 爽爽淫人综合网网站| 成人综合在线观看| 69堂精品视频| 亚洲欧美另类综合偷拍| 国产成人综合自拍| 精品精品欲导航| 亚洲不卡在线观看| 一本色道久久综合精品竹菊| 久久久久久久久久久99999| 日韩电影在线一区二区| 色综合久久天天| 国产女人aaa级久久久级| 韩国三级在线一区| 欧美一级黄色片| 日韩国产欧美一区二区三区| 在线视频欧美精品| 一区二区久久久| 91影视在线播放| 自拍偷拍亚洲欧美日韩| 成人午夜私人影院| 中国av一区二区三区| 国产福利精品一区二区| 久久人人97超碰com| 精品一区二区三区免费观看| 欧美一级片在线看| 日本系列欧美系列| 欧美一级淫片007| 亚洲成人7777| 欧美精三区欧美精三区| 亚洲第一电影网| 欧美酷刑日本凌虐凌虐| 天堂va蜜桃一区二区三区 | 亚洲综合精品自拍| 色综合天天天天做夜夜夜夜做| 国产精品欧美一级免费| 色综合久久久久久久| 成人免费在线播放视频| 99精品欧美一区二区三区综合在线| 国产精品色在线| 91久久精品网| 视频一区二区欧美| 精品第一国产综合精品aⅴ| 国产一区二区不卡在线| 日本一区二区三区免费乱视频| heyzo一本久久综合| 亚洲国产你懂的| 日韩视频一区在线观看| 国产传媒一区在线| 亚洲免费视频中文字幕| 欧美日韩电影在线播放| 狠狠色丁香婷综合久久| 国产精品激情偷乱一区二区∴| 日本韩国精品在线| 蜜臀av一区二区三区| 久久久久久久性| 91香蕉国产在线观看软件| 亚洲chinese男男1069| 精品国产乱码久久| 99久久99久久免费精品蜜臀| 日韩国产在线观看| 国产校园另类小说区| 一本色道久久综合亚洲91| 99re成人在线| 五月天丁香久久| 国产精品你懂的| 欧美浪妇xxxx高跟鞋交| 不卡电影一区二区三区| 日韩精品免费视频人成| 国产精品美女久久久久高潮 | 国产精品综合一区二区三区| 18欧美乱大交hd1984| 91精品国产综合久久精品性色| 国产91精品一区二区| 亚洲 欧美综合在线网络| 欧美国产禁国产网站cc| 欧美一区二区日韩| 欧美综合在线视频| 国产成人a级片| 麻豆国产精品视频| 亚洲综合999| 国产精品久久久久久久岛一牛影视 | 中文字幕久久午夜不卡| 欧美日韩黄色影视| 色呦呦网站一区| 风间由美一区二区av101| 青青草国产精品亚洲专区无| 亚洲女同一区二区| 中文字幕av免费专区久久| 日韩精品一区二区三区蜜臀| 在线视频国内自拍亚洲视频| 成人av综合一区| 国产精品69毛片高清亚洲| 蜜桃一区二区三区在线| 亚洲精品国产一区二区精华液| 中文字幕精品在线不卡| 久久久亚洲精华液精华液精华液| 在线综合+亚洲+欧美中文字幕| 欧洲中文字幕精品| 色婷婷综合久久久中文字幕| 成人av综合一区| 懂色av噜噜一区二区三区av| 久久精品国产秦先生| 日韩福利电影在线| 亚洲福利视频一区| 午夜亚洲福利老司机| 伊人性伊人情综合网| 亚洲精品中文字幕乱码三区| 中文字幕第一区| 国产精品午夜在线观看| 久久免费电影网| 久久综合成人精品亚洲另类欧美 | 久久婷婷成人综合色| 欧美电影精品一区二区| 日韩午夜激情av| 欧美白人最猛性xxxxx69交| 7777精品伊人久久久大香线蕉经典版下载| 色乱码一区二区三区88| 在线国产亚洲欧美| 欧美裸体一区二区三区| 欧美一区二区三区视频在线| 91精品国产福利在线观看| 91麻豆精品国产91久久久久| 欧美一区二区三区四区视频 | 欧美三区免费完整视频在线观看| 久久尤物电影视频在线观看| 亚洲精品一区二区在线观看| 精品国产一区二区三区忘忧草 | 亚洲日本在线视频观看| 亚洲精品视频在线| 性做久久久久久| 男人的j进女人的j一区| 国产一区二区三区久久久| 国产成人精品一区二区三区四区| av在线不卡免费看| 欧美日韩卡一卡二| 精品久久久久久久久久久久包黑料| 精品国产一区二区国模嫣然| 国产精品乱人伦| 一区av在线播放| 久草精品在线观看| 色综合天天在线| 欧美成人bangbros| 日本一区二区不卡视频| 亚洲国产日韩av| 精品一二三四区| 色婷婷久久综合| 精品国产青草久久久久福利| 亚洲天堂免费看| 精品一区二区三区日韩| 色av成人天堂桃色av| 精品国产在天天线2019| 亚洲综合色丁香婷婷六月图片| 精品一区二区三区视频| 欧美中文一区二区三区| www国产精品av| 亚洲一区二区黄色| 国产成人在线视频网址| 91超碰这里只有精品国产| 国产女人18水真多18精品一级做 | 韩日精品视频一区| 在线亚洲高清视频| 国产午夜精品一区二区三区嫩草 | 日韩欧美专区在线| 亚洲人快播电影网| 国产福利一区在线| 91精品在线麻豆| 一区二区三区欧美激情| 成人一区二区视频| 精品91自产拍在线观看一区| 一区二区三区四区在线免费观看| 国产91丝袜在线18| 精品国产一区二区国模嫣然| 亚洲成a人v欧美综合天堂下载 | 久久久久久99久久久精品网站| 亚洲国产视频a| 99精品久久免费看蜜臀剧情介绍| 精品久久久久久综合日本欧美| 亚洲地区一二三色| 色先锋资源久久综合| 欧美国产一区二区| 国产在线播放一区二区三区 | 欧美日韩免费电影| 亚洲精品国产精品乱码不99| 国产91精品一区二区麻豆亚洲| 精品嫩草影院久久| 日本成人在线看| 日韩一区二区不卡| 免费精品视频在线| 欧美一卡二卡在线观看| 日本午夜精品一区二区三区电影 | 91在线码无精品| 亚洲欧洲日韩在线| 97aⅴ精品视频一二三区| 亚洲三级免费观看| 91网站最新地址| 亚洲精品国产精品乱码不99|