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

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

?? myldbrelationalalgebra.pas

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

interface

{$I MYLDBVer.inc}

uses Windows, Classes, Db, SysUtils, Math,

// MYLDBoluteDatabase units

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

type

 TMYLDBFieldLink = record
  FieldName:                String;   // table field name
  DisplayName:              String;   // result field name
  FieldType:                TMYLDBAdvancedFieldType;
  FieldPrecision:           Integer;
  FieldSize:                Integer;
  BLOBCompressionAlgorithm: Byte;
  BLOBCompressionMode:      Byte;
  BLOBBlockSize:            Integer;
  AO:                       Pointer;  // was TMYLDBAO type, CB4 bug fix
  Dataset:                  TDataset; // dataset
  IsHidden:                 Boolean;
  FieldNo:                  Integer;  // field number in AO or FieldNo
  IsExpression:             Boolean;  // Expression or field?
  IsAggregate:              Boolean;  // Expression is aggregate (contains agg. functions)?
  Expr:                     TObject;  // TMYLDBExpression
 end;

 // fields (expressions) list in select
 TMYLDBSelectListItem = record
  TableName:    String;   // 'table1.' | 't1'
  AllFields:    Boolean;  // 'table1.*' ?
  FieldName:    String;   // field1
  IsExpression: Boolean;  // field or expr?
  IsDuplicatedField: Boolean;  // duplicated field?
  ValueExpr:    TObject;  // TMYLDBExpression
  Pseudonym:    String;   // field1 as f1
 end;

 // array of fields
 TMYLDBFields = class
 public
   Items:       array of TMYLDBSelectListItem; // fields
   ItemCount:   Integer;                     // length
   // creates
   constructor Create;
   // adds item to the end
   procedure Append(var Item: TMYLDBSelectListItem);
 end;


 // base class for relational algebra operations
 TMYLDBAO = class (TObject)
 public
  FIsRootAO:                  Boolean;
  FIsAOTable:                 Boolean;
  FIsAOGroupBy:               Boolean;
  FFilterExpr:                TObject; // TMYLDBExpression
  FTopRowCount:               Int64;
  FFirstRowNo:                Int64;
  FHasSetResultFields:        Boolean;
  FResultTableName:           String; // for SELECT INTO optimization
 protected
  FResultInMemory:            Boolean; // for SELECT INTO optimization
  FResultImmediate:           Boolean; // for SELECT INTO optimization
  FResultDatabaseName:        String; // for SELECT INTO optimization
  FTableName:                 String;
  FTableAlias:                String;
  FIsMaterialized:            Boolean;
  FResultDataset:             TDataset; // result dataset
  FResultFieldsOrder:         TMYLDBIntegerArray;
  FFieldCount:                Integer;
  FLeftAONull:                Boolean;
  FRightAONull:               Boolean;
  FDistinctApplied:           Boolean;
  FDistinctFields:            String;
  FDistinctFieldCount:        Integer;
  FDistinctFieldsMap:         array of Integer;
  FResultIndexFieldsList:             TStringList;
  FResultIndexAscDescFieldsList:      TStringList;
  FResultIndexCaseInsFieldsList:      TStringList;
  FExpressionsExists:         Boolean;
  FIsLocked:                  Boolean;
  FDisableTempFiles:          Boolean;
  FValue:                      TMYLDBVariant;
 protected
  FFieldLinks:                array of TMYLDBFieldLink;
 public
  FLeftAO,FRightAO:           TMYLDBAO;
 protected
 procedure InternalCreate(
                      LeftAO:     TMYLDBAO = nil;
                      RightAO:    TMYLDBAO = nil;
                      TableName:  String = '';
                      TableAlias: String = ''
                      );
  // navigating
  procedure InternalFirst; virtual;
  procedure InternalNext; virtual;
  function InternalGetEof: Boolean; virtual;
  function InternalGetRecordCount: Integer; virtual;
  procedure First; virtual;
  procedure Next; virtual;
  function GetEof: Boolean; virtual;
  function GetRecordCount: Integer; virtual;
  // sets names to FieldLinks list and renames duplicate names
  procedure SetFieldNames; virtual;
  // materialization routines
  function CreateIndexForMaterialize(BeforeCreateTable: Boolean): String;
  procedure CreateTableForMaterialize(
                                            FieldList:  TStringList;
                                            AliasList:  TStringList
                                      );
  procedure FillTableForMaterialize;
  procedure ReplaceInIndexAliasesToFields(FieldList, AliasList,
                                          FResultIndexFieldsList: TStringList);
  procedure FinalizeMaterialize(
                                            FieldList:  TStringList;
                                            AliasList:  TStringList
                                );

  // materializes AO
  procedure DoMaterialize;

 public
  destructor Destroy; override;
  // gets all result records
  procedure Execute(IsRootAO: Boolean; ParentQueryAO: TMYLDBAO; ParentCursor: TMYLDBCursor); virtual;
  function LockTables: Boolean;
  function UnlockTables: Boolean;
  function OpenTables: Boolean;
  function CloseTables: Boolean;

  // sets filter
  procedure SetFilter(FilterExpr: TObject);
  // for SELECT INTO optimization
  procedure SetResultTable(InMemory, Immediate: Boolean; TableName: String; DatabaseName: String);
  // sets Top row count
  procedure SetTopRowCount(FirstRowNo, TopRowCount: Integer); virtual;
  // applies distinct
  procedure ApplyDistinct(DistinctFields: String);
  // sets projection for other TMYLDBAO
  procedure SetResultFields(var FieldRefs: array of TMYLDBSelectListItem;
                            bDistinct: Boolean); virtual;
  // mapping function - return number of found fields and found field No
  // also optionally unhides fields in AO
  function FieldExists(
                  FieldName, TableName: String;
                  Unhide:               Boolean;
                  FieldNumbers:         TMYLDBIntegerArray = nil;
                  UnhideChildrenOnly:   Boolean = False;
                  ScanOnlyVisibleFields: Boolean = false
                      ): Integer; virtual;
  function FindFieldInFieldLinks(FieldName: String; var FieldNo: Integer): Boolean;
  function GetFieldName(FieldNo: Integer; ApplyOrderBy: Boolean = False): string;
  // return FieldName if field is not hidden and column name = field name or display name
  function GetFieldNameByColumnName(ColumnName: String): string;
  function GetFieldNameByColumnNo(ColumnNo: Integer): string;
  function GetFieldNameByVisibleNumber(VisibleFieldNo: Integer): String;
  function GetFieldNoByVisibleNumber(VisibleFieldNo: Integer): Integer;
  procedure GetFieldValue(
                        Value:      TMYLDBVariant;
                        FieldNo:        Integer;
                        bCopy:          Boolean = False;
                        AccessToHidden: Boolean = False
                        );
  function GetFieldType(FieldNo: Integer): TMYLDBAdvancedFieldType; overload;
  function GetFieldSize(FieldNo: Integer): Integer;
  function GetFieldPrecision(FieldNo: Integer): Integer;
  procedure CopyFieldValue(SrcFieldNo,DestFieldNo: Integer);
  function GetFieldDatsetAndFieldNo(var SrcFieldDatset: TDataset;
                                    var SrcFieldDatasetFieldNo: Integer): Boolean;
  // sets index
 private
  procedure InternalSetDistinct;
  procedure InternalSetIndex(ToClearFields: Boolean = True);
  procedure CreateResultIndexLists(ToClear: Boolean = True);
  procedure FreeResultIndexLists;
  procedure AddFieldLink(FieldLinkNo: Integer; SkipHiddenFields: Boolean = True);
 public
  procedure SetIndex(IndexFieldNames, DescFields, CaseInsensitiveFields: string);
    virtual;
  property IsMaterialized: Boolean read FIsMaterialized;
  property FieldCount: Integer read FFieldCount;
  property RecordCount: Integer read GetRecordCount;
  property ResultDataset: TDataset read FResultDataset;
  property Eof: Boolean read GetEof;
  property TableAlias: String read FTableAlias write FTableAlias;
 end;

 // table
 TMYLDBAOTable = class (TMYLDBAO)
 private
  FDatabase: TObject;
 public
  constructor Create(
                      TableName:  string;
                      TableAlias: string;
                      DB: TObject;
                      Table: TDataset
                      );
  destructor Destroy; override;
  procedure Execute(IsRootAO: Boolean; ParentQueryAO: TMYLDBAO; ParentCursor: TMYLDBCursor); override;
  // sets projection
  procedure SetResultFields(var FieldRefs: array of TMYLDBSelectListItem;
                      bDistinct: Boolean); override;
  function TransferIndexToParentIfNeeded(var FieldNamesList, AscDescList, CaseSensitivityList: TStringList): Boolean;

  property IsMaterialized;
  property FieldCount;
  property RecordCount;
  property ResultDataset;
  property Eof;
 end;


 // joins and dekart
 TMYLDBAOJoin = class (TMYLDBAO)
 private
  FDekart:    Boolean;
  FOuterJoin: Boolean;
  FInnerJoin: Boolean;

  FJoinType:  TMYLDBJoinType;
  FFields1:   TMYLDBIntegerArray;
  FFields2:   TMYLDBIntegerArray;
  FJoinCondition: TObject;

  // inner / outer joins
  FCompareResult: TMYLDBCompareResult;
  FEqualStarted:      Boolean; // true if equal values in both AO
  FFirstTimeCalled:   Boolean; // true if Next called First time
  FEof:               Boolean; // Eof is set
  FRightBeginBookmark:Pointer;
  FRightEndBookmark:  Pointer;
  FBothNullsStarted:  Boolean;
  FLeftAOEmpty:       Boolean;
  FRightAOEmpty:      Boolean;
  FLinkCount:         Integer;
  FFieldsLink:        Boolean;

 protected
  // records are called Equal if all their join attributes are equal
  procedure CompareRecords; overload;
  procedure InternalFirst; override;
  procedure InternalNext; override;
  function InternalGetEof: Boolean; override;
  function InternalGetRecordCount: Integer; override;
 public
  constructor Create(
                      LeftChild:  TMYLDBAO;
                      RightChild: TMYLDBAO;
                      JoinType:   TMYLDBJoinType;
                      IsNatural:  Boolean;
                      FieldList1: TMYLDBFields; // join fields
                      FieldList2: TMYLDBFields; // field1 = field2
                      JoinCondition: TObject
                      );
  destructor Destroy; override;
  procedure Execute(IsRootAO: Boolean; ParentQueryAO: TMYLDBAO; ParentCursor: TMYLDBCursor); override;

 public
  property IsMaterialized;
  property FieldCount;
  property RecordCount;
  property ResultDataset;
  property Eof;
  property OuterJoin: Boolean read FOuterJoin;
 end; // TMYLDBAOJoin


 TMYLDBAOUnion = class (TMYLDBAO)
 private
  FEof:               Boolean; // Eof is set
  FUnionType:         TMYLDBUnionType;
  FFields1:           TMYLDBIntegerArray;
  FFields2:           TMYLDBIntegerArray;
  FCompareResult:     TMYLDBCompareResult;
  FFirstTimeCalled:   Boolean; // true if Next called First time
  FShowLeft:          Boolean; // if then leftAO records will be added otherwise right
 protected
  // records are called Equal if all their join attributes are equal
  procedure CompareRecords;
  procedure ShowLeftAO;
  procedure ShowRightAO;
  procedure InternalFirst; override;
  procedure InternalNext; override;
  function InternalGetEof: Boolean; override;
  function InternalGetRecordCount: Integer; override;
 public
  constructor Create(
                      LeftChild:  TMYLDBAO;
                      RightChild: TMYLDBAO;
                      UnionType:   TMYLDBUnionType;
                      ParentQueryAO: TMYLDBAO;
                      ParentCursor: TMYLDBCursor;
                      IsCorresponding:  Boolean = False;
                      bDistinct: Boolean = True;
                      FieldList: TMYLDBFields=nil // corresponding fields
                      );
  destructor Destroy; override;
 public
  property IsMaterialized;
  property FieldCount;
  property RecordCount;
  property ResultDataset;
  property Eof;
 end; // TMYLDBAOUnion - union, intersect, except

 // table expression
 TMYLDBAOTableExpr = class (TMYLDBAO)
 private
  procedure ReplacePseudonymsInIndexFields;
  procedure AddHiddenIndexFields;

 protected
  procedure InternalFirst; override;
  procedure InternalNext; override;
  function InternalGetEof: Boolean; override;
  function InternalGetRecordCount: Integer; override;
 public
  constructor Create(
                     Child: TMYLDBAO
                    );
  // sets Top row count
  procedure SetTopRowCount(FirstRowNo, TopRowCount: Integer); override;
  procedure Execute(IsRootAO: Boolean; ParentQueryAO: TMYLDBAO; ParentCursor: TMYLDBCursor); override;
 public
  property IsMaterialized;
  property FieldCount;
  property RecordCount;
  property ResultDataset;
  property Eof;
 end;

 // table expression
 TMYLDBAOGroupBy = class (TMYLDBAO)
 protected
  FTempDataset:       TDataset;
  FFirstTimeCalled:   Boolean; // true if Next called First time
  FAllFields:         Boolean;
  FFields:            TMYLDBIntegerArray;
  FCompareResult:     TMYLDBCompareResult;
  FGroupFinished:     Boolean;
  FEOF:               Boolean;
  GroupByFields: string;
 protected
  // records are called Equal if all their join attributes are equal
  procedure CompareRecords;
  procedure InternalFirst; override;
  procedure InternalNext; override;
  function InternalGetEof: Boolean; override;
  function InternalGetRecordCount: Integer; override;
  function IsCountAll: Boolean;
  procedure DoCountAll;
 public
  // sets projection
  procedure SetResultFields(var FieldRefs: array of TMYLDBSelectListItem;
                      bDistinct: Boolean); override;
  constructor Create(
                     Child: TMYLDBAO;
                     FieldList: TMYLDBFields;
                     var FieldRefs: array of TMYLDBSelectListItem
                    );
  destructor Destroy; override;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精彩视频在线观看| 亚洲欧美另类久久久精品2019| 国产午夜精品在线观看| 韩国理伦片一区二区三区在线播放| 欧美一区二区视频观看视频| 蜜臀av一区二区| 欧美精品第一页| 午夜电影久久久| 欧美亚州韩日在线看免费版国语版| 亚洲欧美二区三区| 日本乱人伦一区| 亚洲精品网站在线观看| av中文字幕不卡| 亚洲卡通动漫在线| 色老汉一区二区三区| 成人免费一区二区三区视频| aa级大片欧美| 麻豆中文一区二区| 欧美一级欧美三级在线观看 | 欧美精品一区二区三区在线播放 | 日本不卡的三区四区五区| 色婷婷激情综合| 亚洲国产中文字幕在线视频综合| 欧美视频在线不卡| 亚洲成va人在线观看| 欧美另类videos死尸| 青娱乐精品在线视频| 日韩一级片网站| 国产成人自拍网| 亚洲特级片在线| 欧美色手机在线观看| 久久不见久久见中文字幕免费| 国产女主播视频一区二区| 91福利视频在线| 国产不卡在线播放| 亚洲风情在线资源站| 欧美精品自拍偷拍| 久久99国内精品| 国产精品久久久久久久浪潮网站| www.视频一区| 日韩精品一级中文字幕精品视频免费观看 | 亚洲精品成人悠悠色影视| 制服丝袜亚洲播放| 成人av电影免费观看| 美女国产一区二区| 亚洲成av人在线观看| 欧美成人精品1314www| 91免费看`日韩一区二区| 韩国成人福利片在线播放| 一区二区高清在线| 国产欧美日韩激情| 日韩欧美美女一区二区三区| 欧美三级韩国三级日本一级| 97久久精品人人做人人爽50路| 久久国产精品色婷婷| 亚洲v精品v日韩v欧美v专区| 亚洲欧美乱综合| 中文字幕一区二区不卡| 国产三级久久久| 国产欧美日韩在线| 亚洲国产精品激情在线观看| 久久伊人蜜桃av一区二区| 日韩欧美亚洲另类制服综合在线| 在线精品视频免费观看| 91视频.com| 91九色最新地址| 欧美三级电影网| 欧美精品亚洲一区二区在线播放| 在线观看国产一区二区| 91精品1区2区| 在线播放国产精品二区一二区四区 | 亚洲欧美成aⅴ人在线观看| 国产精品美女久久久久久久久久久| 久久久高清一区二区三区| 国产亚洲欧美中文| 中文字幕一区二区三区色视频| 综合中文字幕亚洲| 亚洲成人tv网| 久久精品国产亚洲一区二区三区| 激情综合网最新| 国产传媒欧美日韩成人| eeuss鲁一区二区三区| 国产精品色呦呦| 亚洲午夜国产一区99re久久| 亚欧色一区w666天堂| 久久成人麻豆午夜电影| 国产69精品久久99不卡| 欧美专区亚洲专区| 精品理论电影在线观看| 国产精品欧美一区二区三区| 亚洲成人一二三| 黄色日韩网站视频| 色综合天天做天天爱| 日韩三级高清在线| 中文字幕一区二区三| 奇米888四色在线精品| heyzo一本久久综合| 91精品国产丝袜白色高跟鞋| 国产精品无圣光一区二区| 性久久久久久久久| 99在线精品视频| 欧美大片在线观看| 亚洲女爱视频在线| 国产一区二区网址| 欧美一区二区三区白人| 一区二区三区四区高清精品免费观看 | 日韩一区二区免费电影| 亚洲精品久久久久久国产精华液| 国产精品一区二区果冻传媒| 欧美伦理电影网| 亚洲在线中文字幕| av日韩在线网站| 国产亚洲欧洲997久久综合| 日韩av电影免费观看高清完整版 | 色综合天天综合网天天狠天天| 国产欧美日韩久久| 国产精品一区三区| 久久婷婷国产综合国色天香| 欧美无砖砖区免费| 一区二区在线观看视频在线观看| 大白屁股一区二区视频| 久久一区二区视频| 国产精品一区二区三区99| 欧美成人r级一区二区三区| 免费看欧美女人艹b| 欧美v国产在线一区二区三区| 日本va欧美va精品| 欧美日本韩国一区| 国产一区二区影院| 国产亚洲精品超碰| 成人性生交大片免费看在线播放| 久久精品夜色噜噜亚洲a∨ | 欧美日本一道本| 丝袜美腿亚洲一区| 日韩限制级电影在线观看| 日韩精品免费视频人成| 精品成人一区二区三区| 国产精品一区二区男女羞羞无遮挡 | 亚洲成人手机在线| 欧美精品日韩综合在线| 蜜臀久久久99精品久久久久久| 337p粉嫩大胆噜噜噜噜噜91av | 欧美日韩国产高清一区二区| 美腿丝袜亚洲综合| 国产精品欧美一区二区三区| 在线精品观看国产| 免费欧美日韩国产三级电影| 国产精品久久久久久久久动漫 | 精品一区在线看| 国产精品传媒入口麻豆| 欧美日韩国产天堂| 国产一区二区不卡在线| 亚洲影院久久精品| 久久精品亚洲乱码伦伦中文| 一本大道综合伊人精品热热| 日韩不卡一区二区| 国产精品污网站| 777亚洲妇女| 99re热这里只有精品免费视频| 奇米精品一区二区三区在线观看一| 国产婷婷色一区二区三区| 日韩欧美国产一区二区三区 | 久久久精品黄色| 欧美一区二区三区四区高清| 91蜜桃在线免费视频| 激情综合五月天| 午夜精品aaa| 一区二区三区四区视频精品免费| 国产婷婷色一区二区三区四区| 欧美色区777第一页| 成人久久久精品乱码一区二区三区| 日韩高清不卡一区二区三区| 亚洲精品国产第一综合99久久| 欧美国产精品专区| 日韩精品最新网址| 9191久久久久久久久久久| 91久久精品一区二区| 99久久伊人久久99| 国产成人综合自拍| 国产一区二区福利视频| 看电影不卡的网站| 日本欧美一区二区| 日本最新不卡在线| 日韩专区中文字幕一区二区| 亚洲午夜羞羞片| 亚洲一区二区三区自拍| 亚洲一区二区三区美女| 亚洲免费观看视频| 亚洲综合久久久久| 日本系列欧美系列| 久久er99热精品一区二区| 三级影片在线观看欧美日韩一区二区| 亚洲成人av福利| 麻豆国产欧美日韩综合精品二区 | 国产一区二区三区最好精华液| 狠狠色2019综合网| 国产成人无遮挡在线视频| 成人av电影免费观看| 一本久久a久久精品亚洲| 欧美亚洲综合一区|