亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲精品午夜久久久| 国产电影精品久久禁18| 国内成人自拍视频| 一本色道亚洲精品aⅴ| 日韩精品影音先锋| 一区二区三区久久久| 国产原创一区二区| 7799精品视频| 亚洲欧美日韩综合aⅴ视频| 久久国产精品一区二区| 日本久久电影网| 中文字幕第一区综合| 麻豆久久一区二区| 欧美色成人综合| 亚洲女厕所小便bbb| 国产a久久麻豆| 久久综合五月天婷婷伊人| 亚洲午夜电影在线观看| 成人av资源在线| 久久久精品免费网站| 理论片日本一区| 欧美美女直播网站| 亚洲综合免费观看高清在线观看| 成人精品gif动图一区| 久久久久久亚洲综合影院红桃| 美女视频一区二区三区| 欧美日韩成人激情| 五月婷婷激情综合| 91成人免费网站| 一区二区成人在线| 95精品视频在线| 中文字幕中文字幕在线一区| 激情六月婷婷久久| 精品国产免费人成在线观看| 日韩在线一区二区| 91麻豆精品国产91久久久更新时间| 亚洲国产精品欧美一二99| 日本伦理一区二区| 亚洲一级电影视频| 欧美日韩一区在线观看| 午夜视频一区在线观看| 欧美色精品在线视频| 天涯成人国产亚洲精品一区av| 欧美精品免费视频| 秋霞国产午夜精品免费视频| 欧美一区二区视频在线观看| 天堂成人免费av电影一区| 欧美一区中文字幕| 狠狠狠色丁香婷婷综合久久五月| 久久一日本道色综合| 国产成人午夜片在线观看高清观看| 久久久久国产精品厨房| 99久久婷婷国产综合精品电影 | 国产精品一区久久久久| 国产欧美一区二区精品性色超碰 | 韩国精品一区二区| 国产女人aaa级久久久级| 91欧美一区二区| 亚洲第一激情av| 精品国产一区二区在线观看| 精彩视频一区二区| 国产精品久久久久久久午夜片| 91免费视频大全| 日韩国产在线一| 日韩精品一区二| av高清不卡在线| 亚洲成人免费看| 久久久久免费观看| 日本高清成人免费播放| 久久99精品国产麻豆婷婷洗澡| 国产精品久久久久永久免费观看| 欧美日韩免费在线视频| 国产老女人精品毛片久久| 亚洲精品国产品国语在线app| 欧美一区二区三区免费在线看 | 毛片av中文字幕一区二区| 国产日韩一级二级三级| 欧美系列一区二区| 国产91在线观看丝袜| 亚洲国产另类av| 国产日韩欧美精品在线| 欧美精品自拍偷拍| 99久久综合狠狠综合久久| 免费在线看成人av| 一区二区三区在线播放| 久久久精品中文字幕麻豆发布| 欧美亚洲综合在线| 91在线一区二区三区| 久草在线在线精品观看| 亚洲综合精品久久| 中文字幕免费不卡| 精品国产乱码久久久久久浪潮| 在线视频欧美精品| 成人美女视频在线观看18| 日本不卡视频一二三区| 亚洲精品大片www| 国产精品私房写真福利视频| 日韩精品一区二区三区老鸭窝| 欧美三级日韩在线| 91视视频在线观看入口直接观看www | 国产精品不卡一区二区三区| 日韩欧美国产系列| 色综合天天综合网国产成人综合天| 精品一区二区三区不卡| 日韩精品亚洲一区二区三区免费| 亚洲乱码精品一二三四区日韩在线| 国产欧美va欧美不卡在线| 久久久精品欧美丰满| 久久美女艺术照精彩视频福利播放| 8v天堂国产在线一区二区| 欧美猛男超大videosgay| 精品视频在线免费看| 色狠狠一区二区| 91麻豆免费观看| 97精品国产露脸对白| 波多野洁衣一区| 99久久久无码国产精品| 成人av动漫网站| 91麻豆国产福利在线观看| 不卡电影一区二区三区| 成人精品gif动图一区| 波多野结衣亚洲一区| 91视视频在线观看入口直接观看www| 99re这里只有精品视频首页| 99精品视频一区二区| 91性感美女视频| 在线看国产日韩| 欧美浪妇xxxx高跟鞋交| 日韩欧美亚洲一区二区| 2021中文字幕一区亚洲| 国产精品天美传媒| 亚洲一二三四在线| 蜜桃av噜噜一区二区三区小说| 免播放器亚洲一区| 粉嫩13p一区二区三区| 91在线精品一区二区三区| 欧美日韩国产一区二区三区地区| 在线电影院国产精品| 精品国产99国产精品| 国产精品美女久久久久aⅴ国产馆| 国产精品欧美一区二区三区| 亚洲激情男女视频| 日韩中文欧美在线| 国产精品一区二区久激情瑜伽| 99久久伊人网影院| 7777女厕盗摄久久久| 久久久www成人免费毛片麻豆 | 日韩欧美中文字幕公布| 国产亚洲欧美日韩日本| 一区二区三区小说| 久久精品国产秦先生| 99久久er热在这里只有精品15| 欧美视频精品在线| 久久久久久久久久久久久夜| 亚洲激情五月婷婷| 精品系列免费在线观看| 99久久精品国产一区二区三区| 欧美日韩国产另类不卡| 2021久久国产精品不只是精品| 亚洲伦理在线精品| 国产在线看一区| 欧美日韩综合不卡| 国产精品免费视频观看| 日本女人一区二区三区| 成人深夜视频在线观看| 欧美一级在线视频| 一区二区三区在线播放| 国产精品亚洲午夜一区二区三区| 欧美日韩在线三区| 亚洲欧洲另类国产综合| 久久草av在线| 欧美日韩一卡二卡| 国产精品久久久久三级| 黑人巨大精品欧美一区| 欧美精品电影在线播放| 亚洲天堂福利av| 风流少妇一区二区| 精品久久一二三区| 五月激情综合网| 在线视频中文字幕一区二区| 国产精品视频一二| 国产一区免费电影| 日韩欧美国产综合在线一区二区三区| 亚洲精品videosex极品| bt欧美亚洲午夜电影天堂| 久久精品一区八戒影视| 精品无人码麻豆乱码1区2区 | 欧美区一区二区三区| 亚洲色图色小说| 99久久精品国产导航| 国产日韩精品一区二区三区| 国产主播一区二区| 久久这里只有精品视频网| 久久精品国产精品亚洲红杏| 7777精品伊人久久久大香线蕉| 亚洲成人资源网| 欧美日韩综合色| 日韩成人av影视| 91精品黄色片免费大全| 日韩激情av在线|