ubase 第5部分答案Word下载.docx

上传人:b****7 文档编号:22770247 上传时间:2023-02-05 格式:DOCX 页数:19 大小:18.48KB
下载 相关 举报
ubase 第5部分答案Word下载.docx_第1页
第1页 / 共19页
ubase 第5部分答案Word下载.docx_第2页
第2页 / 共19页
ubase 第5部分答案Word下载.docx_第3页
第3页 / 共19页
ubase 第5部分答案Word下载.docx_第4页
第4页 / 共19页
ubase 第5部分答案Word下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

ubase 第5部分答案Word下载.docx

《ubase 第5部分答案Word下载.docx》由会员分享,可在线阅读,更多相关《ubase 第5部分答案Word下载.docx(19页珍藏版)》请在冰豆网上搜索。

ubase 第5部分答案Word下载.docx

"

DoingQU_Select"

<

endl;

Statusstatus;

AttrDesc*attrs,attrDesc;

inti,offset=0;

attrs=newAttrDesc[projCnt];

//属性的转换

for(i=0;

i<

projCnt;

i++)//创建投影列表

{

status=attrCat->

getInfo(projNames[i].relName,projNames[i].attrName,attrs[i]);

if(status!

=OK)returnstatus;

offset+=attrs[i].attrLen;

}

if(attr->

relName!

=NULL)

attrCat->

getInfo(attr->

relName,attr->

attrName,attrDesc);

else

{

strcpy(attrDesc.relName,projNames[0].relName);

attrDesc.attrOffset=0;

attrDesc.attrLen=0;

attrDesc.attrType=int(STRING);

attrValue=NULL;

}

//调用ScanSelect()查找

if((status=ScanSelect(result,projCnt,attrs,&

attrDesc,op,attrValue,offset))!

delete[]attrs;

returnOK;

}

result,constintprojCnt,constAttrDescprojNames[],

constAttrDesc*attrDesc,constOperatorop,constchar*filter,constintreclen)

DoingHeapFileScanSelectionusingScanSelect()"

HeapFileScan*hfs;

InsertFileScan*ifs;

char*record;

RIDrid1,rid2;

Recordrec1,rec2;

hfs=newHeapFileScan(attrDesc->

relName,status);

//对文件扫描(原表)

if(attrDesc->

attrType==INTEGER){

intintv;

intv=atoi(filter);

//atoi()将char*转换成整型hfs->

startScan(attrDesc->

attrOffset,attrDesc->

attrLen,INTEGER,(char*)(&

intv),op);

}

attrType==STRING){

hfs->

attrLen,STRING,filter,op);

attrType==FLOAT){

floatfloatv;

floatv=(float)atof(filter);

//atof()将char*转换成浮点型

attrLen,FLOAT,(char*)(&

floatv),op);

//插入result表

ifs=newInsertFileScan(result,status);

//创建插入临时表的指针

while((status=hfs->

scanNext(rid1))!

=FILEEOF)

hfs->

getRecord(rec1);

offset=0;

record=newchar[reclen];

//暂存临时表的记录

for(i=0;

i++)

memcpy(&

record[offset],(char*)rec1.data+projNames[i].attrOffset,projNames[i].attrLen);

offset+=projNames[i].attrLen;

rec2.data=record;

rec2.length=reclen;

if((status=ifs->

insertRecord(rec2,rid2))!

delete[]record;

//delete[]record;

deletehfs;

deleteifs;

 

2、insert.C

/*Insertsarecordintothespecifiedrelation.

*Returns:

*OKonsuccess

*anerrorcodeotherwise

*/

/*将给定的数据作为记录插入关系,属性的值由参数attrList提供,用户提供的字段和值的列表可以为任意顺序,插入前你必须按AttrCat中的顺序对其重新排序,一可以用memcpy函数将他们按合适的偏移量拷贝到一个临时数组,然后调用insertRecord方法。

如果属性值不全,禁止插入,因为UBase尚未实现NULL。

constStatusQU_Insert(conststring&

relation,constintattrCnt,constattrInfoattrList[])

{Statusstatus;

InsertFileScan*ifs;

Recordrec;

RIDrid;

RelDescrd;

AttrDescad;

inti;

relCat->

getInfo(relation,rd);

//得到属性个数

if(rd.attrCnt!

=attrCnt)

{printf("

Error:

attributenumbermismatch\n"

);

rec.length=0;

attrCnt;

getInfo(attrList[i].relName,attrList[i].attrName,ad);

rec.length+=ad.attrLen;

record=newchar[rec.length];

//暂时存放记录

if((status=attrCat->

getInfo(attrList[i].relName,attrList[i].attrName,ad))!

=OK)

{printf("

returnstatus;

record[ad.attrOffset],(char*)attrList[i].attrValue,ad.attrLen);

rec.data=record;

ifs=newInsertFileScan(relation,status);

insertRecord(rec,rid))!

=OK)returnstatus;

delete[]record;

printf("

\n1recordinserted!

\n"

3、select.C

result,constintprojCnt,constAttrDescprojNames[],constAttrDesc*attrDesc,

constOperatorop,constchar*filter,constintreclen);

/*Selectsrecordsfromthespecifiedrelation.

/*选择是通过带过滤条件的堆文件扫描(HeapFileScan)实现的。

投影列表由参数projCnt和projNames指定,在每一条记录加入结果表时就要完成投影处理。

过滤条件中的常量总是通过attrValue以字符形式出现,你可以用atoi()函数将char*转换为整型,用atof()将char*转换为符点型,如果attr参数为NULL,意味着执行无条件的扫描。

result,constintprojCnt,constattrInfoprojNames[],constattrInfo*attr,

constOperatorop,constchar*attrValue)

attrCat->

{strcpy(attrDesc.relName,projNames[0].relName);

constAttrDesc*attrDesc,constOperatorop,constchar*filter,constintreclen)

if(attrDesc.attrType=INTEGER){

//atoi()将char*转换成整型

if(attrDesc.attrType=STRING){

if(attrDesc.attrType=FLOAT){

//atof()将char*转换成浮点型

{

4、Update.C

/*Deletesrecordsfromaspecifiedrelation.

constStatusQU_Update(conststring&

relation,constintattrCnt,constattrInfoattrList[],

conststring&

attrName,constOperatorop,constDatatypetype,

constchar*attrValue)

{

RelDescrecord1;

AttrDescrecord2;

AttrDesc*attrs;

intrelationattrCnt;

intattrCntlen=0;

char*updatedata;

intintval,intval1;

floatflval,flval1;

Recordrec;

HeapFileScan*hfs;

intrecnum=0;

//checkthevalidofrelation;

status=relCat->

getInfo(relation,record1);

if(status!

=OK)returnstatus;

//checkthevaliadofattrlist;

在属性列表中找到相应的字段

for(inti=0;

i<

attrCnt;

i++)

{if((status=attrCat->

getInfo(relation,attrList[i].attrName,record2))!

=OK)

returnstatus;

//countattrNameoftherelation

if((attrCat->

getRelInfo(relation,relationattrCnt,attrs))!

=OK)returnstatus;

;

if((status=attrCat->

getInfo(relation,attrName,record2))!

=OK)

delete[]attrs;

for(inti=0;

relationattrCnt;

i++)

attrCntlen=attrCntlen+attrs[i].attrLen;

updatedata=newchar[attrCntlen];

for(inti=0;

attrCntlen;

i++)updatedata[i]=-1;

hfs=newHeapFileScan(relation,status);

delete[]updatedata;

if(type==INTEGER)

intval=atoi(attrValue);

startScan(record2.attrOffset,record2.attrLen,(Datatype)record2.attrType,(char*)&

intval,op);

if(type==FLOAT)

{flval=(float)atof(attrValue);

startScan(record2.attrOffset,record2.attrLen,(Datatype)record2.attrType,(char*)&

flval,op);

if(type==STRING)

startScan(record2.attrOffset,record2.attrLen,(Datatype)record2.attrType,attrValue,op);

//扫描记录并更新记录的值

while(hfs->

scanNext(rid)!

=FILEEOF)

getRecord(rec);

memcpy(updatedata,rec.data,rec.length);

for(intj=0;

j<

j++)

if(strcmp(attrs[i].attrName,attrList[j].attrName)==0)

if(attrs[i].attrType==INTEGER)

intval1=atoi((char*)attrList[j].attrValue);

memcpy(updatedata+attrs[i].attrOffset,&

intval1,attrs[i].attrLen);

if(attrs[i].attrType==FLOAT)

flval1=(float)atof((char*)attrList[j].attrValue);

flval1,attrs[i].attrLen);

if(attrs[i].attrType==STRING)

memcpy(updatedata+a

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1