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

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

?? ctrl_center.cpp

?? 實現一個精簡型單用戶SQL引擎(DBMS)MiniSQL
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************** 

** Filename : ZBtree.cpp

** Copyright (c) 2001-2002 Computer Science & Technology Zhejiang University 

** Editor   : zhousen(周森)

** Date     : 2001-12-18 To 2002-01-05

** Version  : 1.00

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

#include "iostream"
#include "Ctrl_Center.h"
#include "Glob_Var.h"
#include "catalog.h"
#include "Record.h"
#include "ZBTree.h"
extern _M_Buffer Buffer;

void Create(TB_Create_Info & CreateInfo) 
{
  char KeyInfo[256];		           //for example "c12fiic34f"
  HCatalog catalog; 
  catalog.Create(CreateInfo,KeyInfo);  // create and initialize *.dbf file
  ZBTree tree;
  tree.Create(KeyInfo);                // create and initialize the *.idx file
}

// IncludeMin == 0 --------  exclude min
// IncludeMin == 1 --------  include min
// IncludeMax == 0 --------  exclude max
// IncludeMax == 1 --------  include max
void Select( TB_Select_Info & SelectInfo)
{ 
  Condition_Info ConditionInfo;
  Select_Rec_Info SelectRecInfo;
  HCatalog catalog;
  Record   rec;
  // check the validity of the SelectInfo 
  catalog.Select(SelectInfo,ConditionInfo,SelectRecInfo);
  rec.PrintHead(SelectRecInfo);  // print the head

  ZBTree tree;
  if( tree.IsEmpty() )  // the tree is empty
    throw 1027;         // no record
  Key_Location min,max;
  bool IncludeMin,IncludeMax;
  
  // set the address of min and max keys in the select operation
  switch(ConditionInfo.OperType)
  {
    case ALL:  // select all fields
    {
      min = tree.GetStart();
      max = tree.GetEnd();
      IncludeMin = 1;
      IncludeMax = 1;
      Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);
      break;
    }
    case B  :  // '>'
    {
      max = tree.GetEnd();
      ZBTree_Node node;
      node.ReadNodeFromFile(max.ptr);
      // compare with the biggest key
      if( node.Compare(node.k[node.ItemOnNode-1],ConditionInfo.min) <= 0)
      throw 1027;  // Error 1027: No Reocrd
      if( tree.Search(ConditionInfo.min,&min) )  // the min key is existed
        min = tree.MoveToNextKey(min);
      if( min.offset == node.MaxItem )
        min = tree.MoveToNextKey(min);
      IncludeMin = 1; IncludeMax =1;  // include the max&min key when printing
      Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);              
      break;
    }
    case BE :  // '>='
    {
      max = tree.GetEnd();
      ZBTree_Node node;
      node.ReadNodeFromFile(max.ptr);
      // compare with the biggest key
      if( node.Compare(node.k[node.ItemOnNode-1],ConditionInfo.min) < 0)
      throw 1027;  // Error 1027: No Reocrd
      tree.Search(ConditionInfo.min,&min);
      if( min.offset == node.MaxItem )  // can't find and reach the end of a node
        min = tree.MoveToNextKey(min);
      IncludeMin = 1; IncludeMax =1;  // include the max&min key when printing
      Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);              
      break;
    }
    case L  :  // '<'
    {
      min = tree.GetStart();
      ZBTree_Node node;
      node.ReadNodeFromFile(min.ptr);
      // compare with the smallest key
      if( node.Compare(node.k[0],ConditionInfo.max) >= 0)
        throw 1027;  // Error 1027: No Reocrd
      tree.Search(ConditionInfo.max,&max);
         
     /* Key_Location end;
      end = tree.GetEnd();*/
      ZBTree_Node EndNode;
      EndNode.ReadNodeFromFile(max.ptr);
      // exceed the biggest key in tree
      if( max.offset == EndNode.MaxItem ) 
      {
        IncludeMax = 1;
        max.offset = EndNode.ItemOnNode - 1;
      }

      else 
        IncludeMax = 0;

        IncludeMin = 1;  // include the min key when printing
        Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);      
        break;
    }
    case LE :  // '<='
    {
      min = tree.GetStart();
      ZBTree_Node node;
      node.ReadNodeFromFile(min.ptr);
      if( node.Compare(node.k[0],ConditionInfo.max) > 0)
        throw 1027;// no record
      if( tree.Search(ConditionInfo.max,&max) )  // the max key is existed
        IncludeMax = 1;
      else 
      {
        /*Key_Location end;
        end = tree.GetEnd();*/
        ZBTree_Node EndNode;
        EndNode.ReadNodeFromFile(max.ptr);
        // exceed the biggest key in tree
        if( max.offset == EndNode.MaxItem/* && max.ptr == end.ptr*/ ) 
        {
          IncludeMax = 1;
          max.offset = EndNode.ItemOnNode - 1;
        }
       
        else 
          IncludeMax = 0;
      }
      IncludeMin = 1;  // include the min key when printing
      Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max); 
      break;
    }
    case E  :  // '='
    {
      if( !tree.Search(ConditionInfo.min,&min) )
        throw 1026;  // Error 1026: the Key name isn't existed    
      max = min;
      IncludeMin = 1;  IncludeMax = 1;
      Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);
      break;
    }
    case NE :  // '!='
    {
      Key_Location temp;
      if( !tree.Search(ConditionInfo.min,&temp) ) // the key isn't existed
      {
        min = tree.GetStart();
        max = tree.GetEnd();
        IncludeMin = 1;
        IncludeMax = 1;
        // print all record;
        Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);
        break;
      }
      else  // the key is existed
      {
        min = tree.GetStart();
        max = tree.GetEnd();
        IncludeMin = 1;
        IncludeMax = 1;
                       
        // the key is in the middle of the tree
        IncludeMin = 1;
        IncludeMax = 0;
        Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,temp);
        IncludeMin = 0;
        IncludeMax = 1;
        Print(tree,SelectRecInfo,IncludeMin,temp,IncludeMax,max);
        break;
      }
    }
    case BETWEEN:  // between ... and ...
    {                                        //  **************************************    
      Key_Location temp;                     //  6 conditions
      temp = tree.GetStart();                //    * * | |
      ZBTree_Node StartNode;                 //    | | * *    | -- the boundary of tree
      StartNode.ReadNodeFromFile(temp.ptr);  //    * | | *    * -- the value in SQL
                                             //    * | * |
      temp = tree.GetEnd();                  //    | * | * 
      ZBTree_Node EndNode;                   //    | * * |
      EndNode.ReadNodeFromFile(temp.ptr);    //  **************************************

      // compare with the start key  * * | |
      if( StartNode.Compare(StartNode.k[0],ConditionInfo.max) > 0)
        throw 1027;  // Error 1027: No Reocrd            
              
      // compare with the end key    | | * *
      if( EndNode.Compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.min) < 0)
        throw 1027;  // Error 1027: No Reocrd

      // * | | *
      if( StartNode.Compare(StartNode.k[0],ConditionInfo.min) >= 0 &&
          EndNode.Compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.max) <= 0)
      {
        // print all record
        min = tree.GetStart();
        max = tree.GetEnd();
        IncludeMin = 1;
        IncludeMax = 1;
        Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);
        break;
      }
      // * | * |  similiar as LE
      if( StartNode.Compare(StartNode.k[0],ConditionInfo.min) >= 0 &&
          EndNode.Compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.max) > 0)
      {
        min = tree.GetStart();
        ZBTree_Node node;
        node.ReadNodeFromFile(min.ptr);

        if( tree.Search(ConditionInfo.max,&max) )  // the max key is existed
          IncludeMax = 1;
        else
        {
          Key_Location end;
          end = tree.GetEnd();
          // exceed the biggest key in tree
          if( max.offset == node.MaxItem && max.ptr == end.ptr )  
          {
            IncludeMax = 1;
            max.offset = node.ItemOnNode - 1;
          }
          else if( max.offset == node.MaxItem )  // exceed the biggest key in node
          {
            max = tree.MoveToNextKey(max);       // move to the next key
            IncludeMax = 0;
          }
          else 
            IncludeMax = 0;
        }
        
        IncludeMin = 1;  // include the max key when printing
        Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max); 
        break;
      }
      // | * | *  similiar as BE
      if( StartNode.Compare(StartNode.k[0],ConditionInfo.min) < 0 &&
          EndNode.Compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.max) <= 0)
      {
        max = tree.GetEnd();
        ZBTree_Node node;
        node.ReadNodeFromFile(max.ptr);
        tree.Search(ConditionInfo.min,&min);
        if( min.offset == node.MaxItem )  // can't find and reach the end of a node
          min = tree.MoveToNextKey(min);
        IncludeMin = 1;   IncludeMax =1;  // include the max&min key when printing
        Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max); 
        break;
       }

      // | * * | 
      if( StartNode.Compare(StartNode.k[0],ConditionInfo.min) < 0 &&
          EndNode.Compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.max) > 0)
      {
        Key_Location temp;
        temp = tree.GetEnd();
        ZBTree_Node node;
        node.ReadNodeFromFile(temp.ptr);
        tree.Search(ConditionInfo.min,&min);
        if( min.offset == node.MaxItem )  // can't find and reach the end of a node
          min = tree.MoveToNextKey(min);
        IncludeMin = 1;   // include the min key when printing

        if( tree.Search(ConditionInfo.max,&max) )  // the max key is existed
          IncludeMax = 1;
        else 
        {
          if( max.offset == node.MaxItem )  // exceed the biggest key in node
          {
            max = tree.MoveToNextKey(max);
            IncludeMax = 0;
          }
          else 
            IncludeMax = 0;
        }
        Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max); 
        break;     
      }
    }
  }     

}
void Insert(TB_Insert_Info & InsertInfo)  //TB_Insert_Info
{
  pKey_Attr pKey = new Key_Attr;
  Key_Location KeyLoca;
  Rec_Info RecInfo;
  HCatalog catalog;
  Record   rec;
  ZBTree tree;
  // chech the validity of InsertInfo and produce pKey & RecInfo
  catalog.Insert(InsertInfo,(*pKey),RecInfo);
  if( tree.Search(pKey,&KeyLoca) )
    throw 1025;  // Error 1025: the Key is existed
  _F_FileAddr pRec = rec.Insert(RecInfo);
  tree.Insert(pKey,pRec);  // insert the key in the b+ tree
}

void Update(TB_Update_Info & UpdateInfo)
{
  Condition_Info ConditionInfo;
  Rec_Info RecInfo;
  HCatalog catalog;
  ZBTree tree;
  
  if( tree.IsEmpty() )  // the tree is empty
    throw 1027;         // no record
  // check the validity of UpdateInfo and produce Condition & RecInfo
  catalog.Update(UpdateInfo,ConditionInfo,RecInfo);
  
  Key_Location min,max;
  bool IncludeMin,IncludeMax;

  // set the address of min and max keys in the select operation
  switch(ConditionInfo.OperType)
  {
    case ALL:  // select all fields
    {
      min = tree.GetStart();
      max = tree.GetEnd();
      IncludeMin = 1;
      IncludeMax = 1;
      UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,max);
      break;
    }
    case B  :  // '>'
    {
      max = tree.GetEnd();
      ZBTree_Node node;
      node.ReadNodeFromFile(max.ptr);
      // compare with the biggest key
      if( node.Compare(node.k[node.ItemOnNode-1],ConditionInfo.min) <= 0)
      throw 1027;  // Error 1027: No Reocrd
      if( tree.Search(ConditionInfo.min,&min) )  // the min key is existed
        min = tree.MoveToNextKey(min);
      if( min.offset == node.MaxItem )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲高清一区二区三区不卡| 欧美精品一区二区三区视频| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产又粗又猛又爽又黄91精品| 午夜天堂影视香蕉久久| 亚洲制服丝袜一区| 亚洲已满18点击进入久久| 一级做a爱片久久| 亚洲在线成人精品| 亚洲国产aⅴ成人精品无吗| 亚洲第一福利视频在线| 日韩国产一二三区| 蜜臀精品久久久久久蜜臀| 久久99精品国产麻豆不卡| 国产在线精品国自产拍免费| 国产精品系列在线播放| 成人精品国产免费网站| 99r国产精品| 欧美三电影在线| 91精品国产一区二区三区| 日韩精品资源二区在线| 久久久久久亚洲综合| 中文字幕高清不卡| 一区二区三区四区av| 日韩精品国产精品| 国产伦精一区二区三区| 91在线播放网址| 91精品欧美福利在线观看| 精品国产乱码久久久久久免费 | 亚洲老司机在线| 亚洲国产精品久久不卡毛片| 青青草原综合久久大伊人精品优势| 韩国毛片一区二区三区| 99视频精品免费视频| 欧美精品在线一区二区三区| 日韩三级免费观看| 国产精品伦理一区二区| 亚洲电影第三页| 国产激情91久久精品导航| 91日韩在线专区| 欧美一区二区啪啪| 国产精品免费aⅴ片在线观看| 亚洲一区电影777| 韩国毛片一区二区三区| 欧日韩精品视频| 精品成人免费观看| 亚洲国产日韩av| 国产精品夜夜嗨| 欧美色综合久久| 国产欧美一区二区三区沐欲| 亚洲在线一区二区三区| 国产精品一品二品| 欧美日韩电影在线播放| 国产色产综合色产在线视频| 亚洲一区二三区| 国产大陆精品国产| 欧美一级淫片007| 1024成人网| 国产一区二区三区| 欧美唯美清纯偷拍| 国产精品久久久久一区二区三区 | 国产一区二区美女| 91黄色免费网站| 国产日韩欧美在线一区| 首页欧美精品中文字幕| av成人老司机| 国产视频在线观看一区二区三区| 日韩国产精品久久| 91色婷婷久久久久合中文| 精品国产91乱码一区二区三区| 亚洲最大成人网4388xx| 大胆亚洲人体视频| 久久亚洲精品小早川怜子| 日韩精品三区四区| 色婷婷激情一区二区三区| 国产日本亚洲高清| 久久电影网电视剧免费观看| 欧美日韩电影在线| 亚洲一区在线看| 色久综合一二码| 国产精品盗摄一区二区三区| 国产精品一二三区| 2023国产精品| 精品午夜久久福利影院| 日韩一区二区麻豆国产| 亚洲午夜精品网| 欧美在线不卡视频| 亚洲精品第一国产综合野| 成人免费视频网站在线观看| 久久久久99精品国产片| 国产美女主播视频一区| 亚洲精品在线三区| 紧缚奴在线一区二区三区| 日韩一区二区三区视频| 青娱乐精品视频在线| 91精品国产日韩91久久久久久| 亚洲成人自拍网| 欧美日韩在线观看一区二区| 亚洲一区电影777| 久久婷婷久久一区二区三区| 久久激五月天综合精品| 精品少妇一区二区三区日产乱码| 日本sm残虐另类| 日韩欧美一级片| 极品少妇xxxx精品少妇| 久久婷婷一区二区三区| 国产成人亚洲综合a∨猫咪| 久久久国产一区二区三区四区小说| 九九精品视频在线看| 亚洲精品在线网站| 风流少妇一区二区| 亚洲欧洲av色图| 一本一道综合狠狠老| 一区二区国产盗摄色噜噜| 在线国产电影不卡| 日韩国产在线一| 日韩精品一区二| 国产激情91久久精品导航| 中文字幕制服丝袜一区二区三区| www.视频一区| 艳妇臀荡乳欲伦亚洲一区| 欧美男人的天堂一二区| 免费成人在线观看视频| 久久在线观看免费| 成人开心网精品视频| 亚洲精品菠萝久久久久久久| 欧美午夜精品一区二区三区| 日韩和欧美的一区| 久久精品人人爽人人爽| a在线欧美一区| 亚洲成精国产精品女| 欧美不卡视频一区| 成人av资源网站| 三级久久三级久久久| 久久综合成人精品亚洲另类欧美 | 欧美又粗又大又爽| 午夜激情一区二区三区| 精品久久99ma| 波多野结衣中文字幕一区| 亚洲国产日韩av| 久久亚洲精品国产精品紫薇| 97se亚洲国产综合自在线不卡| 亚洲国产精品一区二区尤物区| 精品裸体舞一区二区三区| 成人国产电影网| 秋霞电影网一区二区| 国产精品国产精品国产专区不蜜 | 91精品欧美一区二区三区综合在| 国产一区二区毛片| 亚洲图片欧美视频| 久久亚区不卡日本| 欧美在线视频全部完| 国产九九视频一区二区三区| 一区二区三区.www| 久久夜色精品国产噜噜av| 91麻豆精品在线观看| 久久99国内精品| 尤物视频一区二区| 久久久国产精华| 在线不卡a资源高清| 成人亚洲一区二区一| 日欧美一区二区| 国产精品三级视频| 日韩三级视频中文字幕| 91久久精品一区二区三区| 精品一区二区综合| 亚洲妇熟xx妇色黄| 中文字幕欧美日韩一区| 欧美一区二区私人影院日本| 成人av网站免费| 极品少妇一区二区三区精品视频| 亚洲高清不卡在线| 最好看的中文字幕久久| 亚洲精品一区在线观看| 欧美日韩一区二区三区四区五区| 成人丝袜高跟foot| 国产一级精品在线| 麻豆91小视频| 亚洲电影一区二区三区| 亚洲视频在线观看三级| 久久众筹精品私拍模特| 欧美一区二区三区四区久久| 欧日韩精品视频| 91麻豆精东视频| 成人h动漫精品一区二区| 激情都市一区二区| 久久99国产精品久久99 | 91丨九色porny丨蝌蚪| 国产经典欧美精品| 国产一区二区三区电影在线观看| 日韩不卡一二三区| 午夜久久电影网| 婷婷六月综合亚洲| 亚洲国产日韩精品| 亚洲午夜精品17c| 一个色在线综合| 亚洲高清久久久| 日韩综合小视频| 日韩在线一二三区| 日本亚洲免费观看|