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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? record.cpp

?? 實(shí)現(xiàn)一個(gè)精簡型單用戶SQL引擎(DBMS)MiniSQL
?? CPP
字號(hào):
/****************************************************************** 

** 文件名: record.cpp

** Copyright (c) 2001-2002 計(jì)算機(jī)99F MiniSQL開發(fā)小組其一 

** 創(chuàng)建人: 何遙

** 日  期: 2001-12-18

** 修改人: 郭振宇

** 日  期: 2002-01-05

** 描  述: 定義了MiniSQL record模塊所有類和結(jié)構(gòu)

** 版  本: 1.00

******************************************************************/

#include "record.h"

extern _M_Buffer Buffer;

//-------------------------------------------------------------

Record::Record()
{
  char address[256];
  strcpy(address,CurLocation);
  strcat(address,CurRelationName);
  strcat(address,".dbf");
  _M_File target = Buffer[address];
  this->DelList = (_F_DELLIST*)target.GetDelListCond().MemAddr();
}

//-------------------------------------------------------------

_F_FileAddr Record::Insert(Rec_Info& insertlist)  //記錄的插入
{
	char address[256];
  strcpy(address,CurLocation);
  strcat(address,CurRelationName);
  strcat(address,".dbf");
  _M_File targettb = Buffer[address];

    _F_FileAddr targetinsert,target;
	Cell_Info*  node = insertlist.head;

    if( this->DelList->DelFirst.uiOffset == 0 )	
	{
        targetinsert = this->DelList->NewInsert;   //如果中間沒有被刪除的記錄,那么就把要插入的記錄放在最后
		this->DelList->NewInsert = MemWriteTest(insertlist.RecordLength + sizeof(_F_FileAddr),&targetinsert);
		target = targetinsert;
	}
    else
    {
        target = targetinsert = this->DelList->DelFirst;//插入到第一個(gè)被刪除的記錄的位置
        if( targetinsert == this->DelList->DelLast )
        {
            this->DelList->DelFirst.Initialize();
            this->DelList->DelLast.Initialize();
        }//如果中間只有一個(gè)被刪除,
        else
            this->DelList->DelFirst = *(_F_FileAddr*)this->DelList->DelFirst.MemAddr();
    }
	
	targetinsert = MemWrite((void*)&targetinsert,sizeof(_F_FileAddr),&targetinsert);
    while(node)
    {
        switch( node->ColType )
        {
            
            case I:         
                targetinsert = MemWrite((void*)&node->value.IntValue,node->ColLength,&targetinsert);
                break;
            
            case C:
                targetinsert = MemWrite((void*)node->value.pCharValue,node->ColLength,&targetinsert);
                break;
            
            case F:
                 targetinsert = MemWrite((void*)&node->value.FloatValue,node->ColLength,&targetinsert);
                break;
            default:
                throw 1029;//error code
        }
        node = node->next;
    }
    return target;
}

//-------------------------------------------------------------

void Record::Delete(_F_FileAddr& DelTarget)
{
    	char address[256];
        strcpy(address,CurLocation);
        strcat(address,CurRelationName);
        strcat(address,".dbf");
        _M_File target = Buffer[address];
       _F_FileAddr*  temp=(_F_FileAddr*)DelTarget.MemAddr();
	   if(*temp != DelTarget )
	   {
			cout<<"Already deleted or Required record does not exsit.\n";
			return;
	   }

	   _F_FileAddr ZPtr;
	   ZPtr.Initialize();
	   MemWrite((void*)&ZPtr,sizeof(_F_FileAddr),temp);
	   
	   if( this->DelList->DelFirst.uiOffset==0 )
	      this->DelList->DelFirst = DelTarget;   
	   else
		  MemWrite((void*)&DelTarget,sizeof(_F_FileAddr),&this->DelList->DelLast);

	   this->DelList->DelLast = DelTarget;
}

//-------------------------------------------------------------

void Record::Update(_F_FileAddr & targetup,Rec_Info& uplist)
{
	char address[256];
  strcpy(address,CurLocation);
  strcat(address,CurRelationName);
  strcat(address,".dbf");
  _M_File target = Buffer[address];
	Cell_Info* node = uplist.head;
    targetup.ShiftOffset(sizeof(_F_FileAddr));
	while(node)
    {
      
	  	targetup.ShiftOffset(node->PriorLength);
		
		switch( node->ColType )
        {
            case I:         
                MemWrite((void*)&node->value.IntValue,node->ColLength,&targetup);
                break;
            
            case C:
                MemWrite((void*)node->value.pCharValue,node->ColLength,&targetup);
                break;
            
            case F:
                MemWrite((void*)&node->value.FloatValue,node->ColLength,&targetup);
                break;
            default:
                throw 1029;//error code
        }        	
	    targetup.ShiftOffset(-node->PriorLength);
		node = node->next; 
	}
     
}

//-------------------------------------------------------------

Rec_Info* Record::Select(_F_FileAddr& seltarget,Select_Rec_Info& sellist) const
{
	char address[256];
    strcpy(address,CurLocation);
    strcat(address,CurRelationName);
    strcat(address,".dbf");
    _M_File target = Buffer[address];
    Rec_Info * returnvalue = new Rec_Info;
	returnvalue->ColNum = sellist.ColumnNum;
	returnvalue->RecordLength = sellist.RecordLength;
	  Cell_Info* cell = 0;
	  Cell_Info* tempcell = 0;
	  Select_Cell* SelectCell = sellist.head;
	  _F_FileAddr targetaddr = *(_F_FileAddr *)seltarget.MemAddr();

	  if( targetaddr.uiOffset != seltarget.uiOffset || targetaddr.ulFilePageID != seltarget.ulFilePageID )
		  return 0;

	  seltarget.ShiftOffset(sizeof(_F_FileAddr));

	  while(SelectCell)
	  {
	       cell = new Cell_Info;
		   if(SelectCell == sellist.head)
			   returnvalue->head = cell;
		   else 
		   {
		       tempcell->next = cell;
		   }

           tempcell = cell;
           seltarget.ShiftOffset( SelectCell->PriorLength);
           cell->ColLength = SelectCell->ColLength;
           cell->next = 0;
		   cell->ColType = SelectCell->ColType;
           cell->PriorLength = SelectCell->PriorLength;


		   switch(cell->ColType)
		   {
		        
				case I:
                      cell->value.IntValue = * (int*) seltarget.MemAddr();
				      break;
				
				case C:  //*************
                  cell->value.pCharValue = new char(cell->ColLength+1);
		              strcpy(cell->value.pCharValue,(char*)seltarget.MemAddr());
					  break;
				
				case F:
					  cell->value.FloatValue = * (float*) seltarget.MemAddr();
					  break;

		        default:
					throw 1029;//error message
        }
        seltarget.ShiftOffset( -SelectCell->PriorLength);

        //--------------------------------------------------------
        SelectCell = SelectCell->next;
    }
    return returnvalue;
}   
	  

//-------------------------------------------------------------

void Record::PrintHead(Select_Rec_Info& pritarget) const
{
    //根據(jù)Rec_Info的信息進(jìn)行解析并打印
    Select_Cell* node = pritarget.head;
	int k = 0;
	cout.setf(ios::left,ios::adjustfield);
	cout<<"+";
	for(k=0;k<pritarget.RecordLength + pritarget.ColumnNum*4 -1;k++)
		cout<<"-";
	cout<<"+\n";

    while(node)
    {
		cout<<"| ";
		cout.width(node->ColLength +2);
        cout<<node->ColumnName;
        node = node->next;
    }
	cout<<"|\n+";
	for(k=0;k<pritarget.RecordLength + pritarget.ColumnNum*4 -1;k++)
		cout<<"-";
	cout<<"+\n";
}

//-------------------------------------------------------------

void Record::Print(_F_FileAddr& pritarget,Select_Rec_Info& prilist) const
{
    Rec_Info* temp = this->Select(pritarget,prilist);
	if(!temp)   throw 1030;
    Cell_Info* node = temp->head;
	cout.setf(ios::left,ios::adjustfield);
    while( node )
    {
        switch( node->ColType )
        {
            
            case I:
				cout<<"| ";
				cout.width(node->ColLength+2);
                cout<<node->value.IntValue;
                break;
            
            case C:
				cout<<"| ";
				cout.width(node->ColLength+2);
                cout<<node->value.pCharValue;
                break;
            
            case F:
				cout<<"| ";
				cout.width(node->ColLength+2);
                cout<<node->value.FloatValue;
                break;
            default:
                throw 1029;//error message
        }
        node = node->next;
    }
	cout<<"|\n+";
	for(int k = 0;k<temp->RecordLength-1 + temp->ColNum*4;k++)  
		cout<<"-";
	cout<<"+\n";
	return;
}

//-------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产免费久久综合| 久久91精品久久久久久秒播| 国产黄人亚洲片| 美女看a上一区| 国产精品另类一区| 欧美在线观看一区二区| 欧美中文一区二区三区| 欧美日韩在线播放一区| 欧美日韩一二三| 日韩欧美激情在线| 色噜噜狠狠成人网p站| 欧美亚洲另类激情小说| 91精品国产综合久久精品app | 亚洲日本免费电影| 亚洲最新视频在线观看| 午夜av区久久| 国产欧美日韩在线看| 国产精品麻豆一区二区| 欧美一二三区精品| 欧美在线视频日韩| 日韩欧美精品在线| 欧美精品乱码久久久久久按摩| 国产99久久久国产精品潘金| 日韩精品免费视频人成| 亚洲老妇xxxxxx| 日本不卡在线视频| 国产黄色精品视频| 国产高清在线精品| 日本高清成人免费播放| 99久久婷婷国产综合精品| 欧美在线啊v一区| 亚洲色欲色欲www| 国产三级一区二区| 一区二区不卡在线视频 午夜欧美不卡在 | 国产一区二区在线影院| eeuss鲁片一区二区三区在线观看| 欧美中文字幕一区二区三区 | 久久久久一区二区三区四区| 欧美日韩一区 二区 三区 久久精品| 欧美年轻男男videosbes| 在线这里只有精品| 91最新地址在线播放| 国产精品夜夜嗨| 国产盗摄女厕一区二区三区| 国产精品影视在线观看| 国产成人在线看| 国产麻豆精品在线| 欧美高清你懂得| 亚洲人午夜精品天堂一二香蕉| 欧美激情中文字幕一区二区| 国产精品亲子乱子伦xxxx裸| 日韩精品五月天| 日本精品一级二级| 欧美日韩二区三区| 欧美一级搡bbbb搡bbbb| 精品国产亚洲在线| 国产三级一区二区| 蜜臂av日日欢夜夜爽一区| 欧美日韩极品在线观看一区| 6080国产精品一区二区| 亚洲一区二区免费视频| 成人av在线播放网址| 国产午夜精品一区二区三区嫩草| 日韩电影免费一区| 国产激情一区二区三区| 欧美tk丨vk视频| 日本一区二区视频在线| 亚洲伦在线观看| 99久久伊人网影院| 欧美日韩国产成人在线91| 亚洲精品国产一区二区三区四区在线 | 国产精品一线二线三线| 欧美mv日韩mv亚洲| 国产精品久久久久久久浪潮网站| 亚洲欧美一区二区三区孕妇| 日韩电影在线一区二区| 国产成人精品亚洲777人妖| 精品国产伦一区二区三区观看方式| 五月天丁香久久| 成人av资源下载| 欧美一区二区在线观看| 欧美aaa在线| 91同城在线观看| 亚洲欧美日韩国产另类专区| 蜜臀av性久久久久蜜臀aⅴ| 91精品国产色综合久久ai换脸| 午夜影院在线观看欧美| 亚洲精品日韩综合观看成人91| 亚洲成av人影院| 日韩一区二区在线看片| 亚洲综合在线免费观看| 国产麻豆91精品| 日本一区二区动态图| 97久久人人超碰| 日韩不卡一二三区| 久久久久久久网| 日本韩国一区二区三区视频| 图片区小说区区亚洲影院| 日韩美女视频在线| 成人av综合一区| 久久久精品2019中文字幕之3| 亚洲成人自拍一区| 欧美成人综合网站| 色综合天天狠狠| 老汉av免费一区二区三区| 中文字幕一区在线| 欧美一级片在线| 天天综合色天天综合| 欧美伊人精品成人久久综合97| 午夜不卡av在线| 欧美日高清视频| 亚洲一区二区三区在线看| 日韩亚洲欧美综合| 99久久伊人网影院| 久久国产精品99久久久久久老狼 | 欧美精品一区二区在线观看| 99re亚洲国产精品| 国内精品嫩模私拍在线| 国产精品丝袜久久久久久app| 国产真实乱对白精彩久久| 日韩亚洲欧美中文三级| 91免费看片在线观看| 亚洲啪啪综合av一区二区三区| av电影在线观看不卡| 国产欧美精品日韩区二区麻豆天美| 国产做a爰片久久毛片| 一区二区三区日韩| 欧美无人高清视频在线观看| 国产精品99久久不卡二区| 午夜精品久久久久久久蜜桃app| 欧美在线|欧美| 成人动漫一区二区在线| 日本欧美一区二区| 91麻豆精品91久久久久同性| a美女胸又www黄视频久久| 国模娜娜一区二区三区| 国产日产精品1区| 91啪九色porn原创视频在线观看| 国产在线精品一区二区三区不卡| 欧美精品一区男女天堂| 日韩一卡二卡三卡四卡| 精品视频123区在线观看| 免费精品视频在线| 天天影视涩香欲综合网| 亚洲一二三四久久| 日韩视频在线你懂得| 欧美三日本三级三级在线播放| 99精品国产一区二区三区不卡| 一区二区三区在线观看视频| 国产精品久久久久久久久搜平片| 色综合天天综合网国产成人综合天| 国产成人免费在线观看| 激情综合网激情| 激情综合网av| 一区二区三区自拍| 欧美一区二区视频在线观看2020| 欧美日韩成人综合天天影院 | 欧美高清www午色夜在线视频| 国产一区视频导航| 一区二区三区加勒比av| √…a在线天堂一区| 亚洲欧美日韩在线| 伊人夜夜躁av伊人久久| 亚洲成人tv网| 国产精品福利一区二区三区| 亚洲视频免费观看| 亚洲va欧美va人人爽| 美腿丝袜亚洲三区| 亚洲黄色小说网站| 午夜av电影一区| 韩国成人精品a∨在线观看| 国产91精品在线观看| 91蜜桃视频在线| 成人av在线播放网站| 狠狠狠色丁香婷婷综合激情 | 成人欧美一区二区三区小说| 一区二区三区在线观看动漫| 午夜亚洲福利老司机| 久久成人av少妇免费| 99精品欧美一区二区蜜桃免费| 欧美日韩精品一区视频| 91丨porny丨最新| 国产精品一二二区| 国产一区欧美二区| 蜜桃一区二区三区在线观看| 亚洲成人激情社区| 亚洲国产毛片aaaaa无费看| 韩国欧美国产一区| 波多野结衣中文字幕一区 | 久久一二三国产| 欧美电影一区二区| 欧美激情一区二区三区全黄| 久久久久久一级片| 一区二区三区不卡在线观看 | 成人的网站免费观看| 国产一区二区不卡在线| 毛片av一区二区| 91精彩视频在线观看| 91黄色免费版| 欧美唯美清纯偷拍|