📄 relationship.h
字号:
// Relationship.h: interface for the Relationship class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_RELATIONSHIP_H__D4A30FA0_F036_481F_A58F_2E1A2EA4AD4A__INCLUDED_)
#define AFX_RELATIONSHIP_H__D4A30FA0_F036_481F_A58F_2E1A2EA4AD4A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Record.h"
#include "Attribute.h"
#include "SchemaFile.h"
#include "BTNODE.h"
#include "BplusTree.h"
#include "MultiIdx.h"
#include "Update.h"
#include "Buffer.h"
#include "Condition.h"
#include "HashTable.h"
#include "NormalForm.h"
#include "MergeTree.h"
class CResult;
class CUpdate;
class CAttribute;
class CBplusTree;
class CMultiIdx;
class CCondition;
class CHashTable;
class CNormalForm;
class Relationship
{
public:
CString name;
WORD length;
BYTE name_length;
int time;//时间戳
UINT ID;
BYTE wtag;
CAttribute *at;
WORD attr_num;
UINT DataFileNo;
WORD idx_num;
PDB db_addr;
UINT IndexMainFile;
UINT rcd_len;//辅助
CBplusTree *tree;
BTNODE *CurNode;//当前读到的叶结点
UINT CurNo;//当前读到的叶结点中的号或缓冲区的号
BYTE enddb;//数据库是否已读完
PDB CurDbPtr;//当前记录的数据库地址
CBuffer *buffer;//当前正在读的缓冲
WORD MultiNum;
CMultiIdx *MultiIdx;
public:
BOOL CheckUpdateData(CUpdate &update);
void CreateIndex(WORD AttrNo);
BOOL CreateMulIndex(CString AttrName1,CString AttrName2,BOOL Dup);
BOOL CreateIndex(CString AttrName);
void Display(CBuffer *buffer,CString *shd,WORD OrderAttrNo,bool bDistinct
,CListCtrl &List);
CBuffer * SelectRecord(CNormalForm &form);
void DeleteRecord(CBuffer *buffer);
BOOL InsertRecord(Record *rcd);
void AutoIndex(WORD AttrNo);
Record * NextUnion(CHashTable &HashTable,Relationship *R2,BYTE *mask1,BYTE *mask2
,BOOL distinct,CBuffer *buf1,CBuffer *buf2);
void SetCurBuffer(CBuffer *buffer);
Record * Connect(Relationship *R2,WORD AttrNo1,WORD AttrNo2,BOOL cmp,Record *&rcd1);
CBuffer * SelectByIndex(CNormalForm &ApForm);
Record * SelectNext(CNormalForm &form,CBuffer *buf);
BOOL UpdateRecord(CBuffer *buffer,CUpdate &update);//目前只能作到"buffer与"
BOOL CheckRcdKey( Record *rcd,CUpdate *update=NULL);
Record * NextFitDelete(CBuffer *buffer);
void Reset();
BOOL CheckUpdateKey(CResult *res,KEY *k,const CUpdate *up=NULL);
WORD AttrNameToAttrNo(CString AttrName);
BOOL CheckRcdKey(CResult *res,KEY *k,Record *rcd,CUpdate *update=NULL);
void AddMultiIdx(CMultiIdx mul);
CResult * SearchRecord(WORD AttrNo,CString AttrValue,KEY &k);//字段未建索引,返回NULL,此时k是错的
Relationship(CString n,WORD an);
Record * NextRecord(bool bAccordBuffer);
void WriteBack();
WORD GetHeadLength();
Relationship();
Relationship(CString n,UINT id,WORD an,UINT FN,int t);
// Relationship(CMemFile cmf);
void AddAttribute(USHORT index,CAttribute &a);
virtual ~Relationship();
UINT GetRecordLength();
private:
void Split(CNormalForm &Form,CNormalForm &ApForm);
};
#endif // !defined(AFX_RELATIONSHIP_H__D4A30FA0_F036_481F_A58F_2E1A2EA4AD4A__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -