CtrlCenter.cpp
上传用户:lkd6667
上传日期:2015-05-13
资源大小:1448k
文件大小:19k
源码类别:

其他数据库

开发平台:

C/C++

  1. //!CtrlCenter.cpp
  2. #include <iostream>
  3. #include "CtrlCenter.h"
  4. #include "Glob_Var.h"
  5. #include "Catalog.h"
  6. #include "Record.h"
  7. #include "BPTree.h"
  8. using namespace std;
  9. extern _M_Buffer  Buffer;
  10. //////////////////////////////////////////////////////////////////////////////////////
  11. // PS:
  12. // IncludeMin == 0 --------  exclude min
  13. // IncludeMin == 1 --------  include min
  14. // IncludeMax == 0 --------  exclude max
  15. // IncludeMax == 1 --------  include max
  16. //////////////////////////////////////////////////////////////////////////////////////
  17. // this method creates the database file and the index file
  18. void Create( TB_Create_Info& CreateInfo) {
  19. char KeyInfo[256];
  20. HCatalog catalog; 
  21. catalog.Create(CreateInfo,KeyInfo);  // create and initialize *.dbf file
  22. BPTree tree;
  23. tree.create(KeyInfo);                // create and initialize the *.idx file
  24. }
  25. //////////////////////////////////////////////////////////////////////////////////////
  26. // this method selects the records and prints them out 
  27. void Select( TB_Select_Info& SelectInfo) {
  28. Condition_Info ConditionInfo;  //for index
  29. Select_Rec_Info SelectRecInfo; //for record
  30. HCatalog catalog;
  31. Record   rec;
  32. // check the validity of the SelectInfo 
  33. catalog.Select(SelectInfo, ConditionInfo, SelectRecInfo);
  34. rec.PrintHead(SelectRecInfo);  // print the head
  35. BPTree tree;
  36. if( tree.isEmpty() )
  37. throw 1027;
  38. Key_Location min, max;
  39. bool IncludeMin,IncludeMax;
  40.   
  41. // set the address of min and max keys in the select operation
  42. switch(ConditionInfo.OperType) {
  43. case ALL: {  // select all fields
  44.   min = tree.getStart();
  45.   max = tree.getEnd();
  46.   IncludeMin = 1;
  47.   IncludeMax = 1;
  48.   Print(tree, SelectRecInfo, IncludeMin, min, IncludeMax, max);
  49.   break;
  50. }
  51. case B : {
  52.   max = tree.getEnd();
  53.   BPTreeNode node;
  54.   node.readNodeFromFile(max.ptr);
  55.   // compare with the biggest key
  56.   if( node.compare(node.k[node.ItemOnNode-1], ConditionInfo.min) <= 0)
  57. throw 1027;
  58.   if( tree.search(ConditionInfo.min, &min) )  // the min key is existed
  59. min = tree.moveToNextKey(min);
  60.   if( min.offset == node.MaxItem )
  61. min = tree.moveToNextKey(min);
  62.   IncludeMin = 1; IncludeMax =1;  // include the max&min key when printing
  63.   Print(tree, SelectRecInfo, IncludeMin, min, IncludeMax, max);              
  64.   break;
  65. }
  66.     case BE : {
  67.   max = tree.getEnd();
  68.   BPTreeNode node;
  69.   node.readNodeFromFile(max.ptr);
  70.   // compare with the biggest key
  71.   if( node.compare(node.k[node.ItemOnNode-1],ConditionInfo.min) < 0)
  72. throw 1027;
  73.   tree.search(ConditionInfo.min, &min);
  74.   if( min.offset == node.MaxItem )  // can't find and reach the end of a node
  75. min = tree.moveToNextKey(min);
  76.   IncludeMin = 1; IncludeMax =1;  // include the max&min key when printing
  77.   Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);              
  78.   break;
  79. }
  80.     case L  : {
  81.   min = tree.getStart();
  82.   BPTreeNode node;
  83.   node.readNodeFromFile(min.ptr);
  84.   // compare with the smallest key
  85.   if( node.compare(node.k[0],ConditionInfo.max) >= 0)
  86. throw 1027;
  87.   tree.search(ConditionInfo.max, &max);
  88.   BPTreeNode EndNode;
  89.   EndNode.readNodeFromFile(max.ptr);
  90.   // exceed the biggest key in tree
  91.   if( max.offset == EndNode.MaxItem ) {
  92. IncludeMax = 1;
  93. max.offset = EndNode.ItemOnNode - 1;
  94.   }
  95.   else 
  96. IncludeMax = 0;
  97.   IncludeMin = 1;  // include the min key when printing
  98.   Print(tree, SelectRecInfo, IncludeMin, min, IncludeMax, max);      
  99.   break;
  100. }
  101.     case LE : {
  102.   min = tree.getStart();
  103.   BPTreeNode node;
  104.   node.readNodeFromFile(min.ptr);
  105.   if( node.compare(node.k[0],ConditionInfo.max) > 0)
  106. throw 1027;
  107.   if( tree.search(ConditionInfo.max,&max) )  // the max key is existed
  108. IncludeMax = 1;
  109.   else 
  110.   {
  111. /*Key_Location end;
  112. end = tree.GetEnd();*/
  113. BPTreeNode EndNode;
  114. EndNode.readNodeFromFile(max.ptr);
  115. // exceed the biggest key in tree
  116. if( max.offset == EndNode.MaxItem/* && max.ptr == end.ptr*/ ) 
  117. {
  118.   IncludeMax = 1;
  119.   max.offset = EndNode.ItemOnNode - 1;
  120. }
  121.        
  122. else 
  123.   IncludeMax = 0;
  124.   }
  125.   IncludeMin = 1;  // include the min key when printing
  126.   Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max); 
  127.   break;
  128. }
  129.     case E  :
  130.   if( !tree.search(ConditionInfo.min,&min) )
  131. throw 1026;  // Error 1026: the Key name isn't existed    
  132.   max = min;
  133.   IncludeMin = 1;  IncludeMax = 1;
  134.   Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);
  135.   break;
  136.     case NE :
  137.   Key_Location temp;
  138.   if( !tree.search(ConditionInfo.min,&temp) ) {
  139. min = tree.getStart();
  140. max = tree.getEnd();
  141. IncludeMin = 1;
  142. IncludeMax = 1;
  143. // print all record;
  144. Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);
  145. break;
  146.   }
  147.   else {
  148. min = tree.getStart();
  149. max = tree.getEnd();
  150. IncludeMin = 1;
  151. IncludeMax = 1;                       
  152. // the key is in the middle of the tree
  153. IncludeMin = 1;
  154. IncludeMax = 0;
  155. Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,temp);
  156. IncludeMin = 0;
  157. IncludeMax = 1;
  158. Print(tree,SelectRecInfo,IncludeMin,temp,IncludeMax,max);
  159. break;
  160.   }
  161.     case BETWEEN: {
  162.   //the first leaf node
  163.   Key_Location temp;                     
  164.   temp = tree.getStart();             
  165.   BPTreeNode StartNode;                 
  166.   StartNode.readNodeFromFile(temp.ptr);  
  167.   //the last leaf node
  168.   temp = tree.getEnd();                
  169.   BPTreeNode EndNode;                 
  170.   EndNode.readNodeFromFile(temp.ptr);   
  171.   // two conditions throw error
  172.   if( StartNode.compare(StartNode.k[0], ConditionInfo.max) > 0)
  173. throw 1027;              
  174.   if( EndNode.compare(EndNode.k[EndNode.ItemOnNode - 1], ConditionInfo.min) < 0)
  175. throw 1027;
  176.   // print all records
  177.   if( StartNode.compare(StartNode.k[0], ConditionInfo.min) >= 0 &&
  178.   EndNode.compare(EndNode.k[EndNode.ItemOnNode - 1], ConditionInfo.max) <= 0) {
  179. min = tree.getStart();
  180. max = tree.getEnd();
  181. IncludeMin = 1;
  182. IncludeMax = 1;
  183. Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max);
  184. break;
  185.   }
  186.   // print from the leftest to some middle record(max)
  187.   if( StartNode.compare(StartNode.k[0],ConditionInfo.min) >= 0 &&
  188.   EndNode.compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.max) > 0) {
  189. min = tree.getStart();
  190. BPTreeNode node;
  191. node.readNodeFromFile(min.ptr);
  192. if( tree.search(ConditionInfo.max, &max) )  // the max key is existed
  193.   IncludeMax = 1;
  194. else {
  195.   Key_Location end;
  196.   end = tree.getEnd();
  197.   // exceed the biggest key in tree
  198.   // may not need here
  199.   if( max.offset == node.MaxItem && max.ptr == end.ptr )  
  200.   {
  201. IncludeMax = 1;
  202. max.offset = node.ItemOnNode - 1;
  203.   }
  204.   else if( max.offset == node.MaxItem )  // exceed the biggest key in node
  205.   {
  206. max = tree.moveToNextKey(max);       // move to the next key
  207. IncludeMax = 0;
  208.   }
  209.   else 
  210. IncludeMax = 0;
  211. }      
  212. IncludeMin = 1;
  213. Print(tree, SelectRecInfo, IncludeMin, min, IncludeMax, max); 
  214. break;
  215.   }
  216.   // print from min to max
  217.   if( StartNode.compare(StartNode.k[0],ConditionInfo.min) < 0 &&
  218.   EndNode.compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.max) <= 0) {
  219. max = tree.getEnd();
  220. BPTreeNode node;
  221. node.readNodeFromFile(max.ptr);
  222. tree.search(ConditionInfo.min,&min);
  223. if( min.offset == node.MaxItem )  // can't find and reach the end of a node
  224. min = tree.moveToNextKey(min);
  225. IncludeMin = 1;   IncludeMax =1;  // include the max&min key when printing
  226. Print(tree, SelectRecInfo, IncludeMin, min, IncludeMax, max); 
  227. break;
  228.    }
  229.   // print from min to the last record
  230.   if( StartNode.compare(StartNode.k[0],ConditionInfo.min) < 0 &&
  231.   EndNode.compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.max) > 0) {
  232. Key_Location temp;
  233. temp = tree.getEnd();
  234. BPTreeNode node;
  235. node.readNodeFromFile(temp.ptr);
  236. tree.search(ConditionInfo.min,&min);
  237. if( min.offset == node.MaxItem )  // can't find and reach the end of a node
  238.   min = tree.moveToNextKey(min);
  239. IncludeMin = 1;   // include the min key when printing
  240. if( tree.search(ConditionInfo.max,&max) )  // the max key is existed
  241.   IncludeMax = 1;
  242. else 
  243. {
  244.   if( max.offset == node.MaxItem )  // exceed the biggest key in node
  245.   {
  246. max = tree.moveToNextKey(max);
  247. IncludeMax = 0;
  248.   }
  249.   else 
  250. IncludeMax = 0;
  251. }
  252. Print(tree,SelectRecInfo,IncludeMin,min,IncludeMax,max); 
  253. break;     
  254.   }
  255. }
  256. }
  257. rec.PrintEnd(SelectRecInfo);
  258. }     
  259. /////////////////////////////////////////////////////////////////////////////////////////////
  260. // insert a new record and adjust the B+ tree
  261. void Insert( TB_Insert_Info& InsertInfo ) {
  262. pKey_Attr pKey = new Key_Attr;
  263. Key_Location KeyLoca;
  264. Rec_Info RecInfo;
  265. HCatalog catalog;
  266. Record   rec;
  267. BPTree tree;
  268. catalog.Insert(InsertInfo, (*pKey), RecInfo);
  269. if( tree.search(pKey, &KeyLoca) )
  270. throw 1025;  // Error 1025: the Key is existed
  271. _F_FileAddr pRec = rec.Insert(RecInfo);
  272. tree.insert(pKey, pRec);
  273. }
  274. //////////////////////////////////////////////////////////////////////////////////////
  275. // update a record 
  276. void Update( TB_Update_Info& UpdateInfo) {
  277. cout<<"begin update"<<endl; //===//
  278. Condition_Info ConditionInfo;
  279. Rec_Info RecInfo;
  280. HCatalog catalog;
  281. BPTree tree;
  282. //error if index tree is empty
  283. if( tree.isEmpty() )
  284. throw 1027; 
  285. cout<<"begin catalog update"<<endl; //====//
  286. catalog.Update(UpdateInfo, ConditionInfo, RecInfo);
  287. cout<<"end catalog update"<<endl; //====//
  288.   
  289. Key_Location min,max;
  290. bool IncludeMin,IncludeMax;
  291. switch(ConditionInfo.OperType) {
  292.     case ALL:
  293.     {
  294. min = tree.getStart();
  295. max = tree.getEnd();
  296. IncludeMin = 1;
  297. IncludeMax = 1;
  298. UpdateRec(tree, RecInfo, IncludeMin, min, IncludeMax, max);
  299. break;
  300.     }
  301.     case B :
  302.     {
  303. max = tree.getEnd();
  304. BPTreeNode node;
  305. node.readNodeFromFile(max.ptr);
  306. // compare with the biggest key
  307. if( node.compare(node.k[node.ItemOnNode-1],ConditionInfo.min) <= 0)
  308. throw 1027; 
  309. // the min key is existed
  310. if( tree.search(ConditionInfo.min,&min) )
  311. min = tree.moveToNextKey(min);
  312. if( min.offset == node.MaxItem )
  313. min = tree.moveToNextKey(min);
  314. IncludeMin = 1; IncludeMax =1;
  315. UpdateRec(tree, RecInfo, IncludeMin, min, IncludeMax, max);              
  316. break;
  317.     }
  318.     case BE : 
  319.     {
  320. max = tree.getEnd();
  321. BPTreeNode node;
  322. node.readNodeFromFile(max.ptr);
  323. // compare with the biggest key
  324. if( node.compare(node.k[node.ItemOnNode-1],ConditionInfo.min) < 0)
  325. throw 1027;
  326. tree.search(ConditionInfo.min, &min);
  327. if( min.offset == node.MaxItem )
  328. min = tree.moveToNextKey(min);
  329. IncludeMin = 1; IncludeMax =1;
  330. UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,max);              
  331. break;
  332.     }
  333.     case L :
  334.     {
  335. min = tree.getStart();
  336. BPTreeNode node;
  337. node.readNodeFromFile(min.ptr);
  338. // compare with the smallest key
  339. if( node.compare(node.k[0],ConditionInfo.max) >= 0)
  340. throw 1027;
  341. tree.search(ConditionInfo.max, &max);
  342.          
  343. BPTreeNode EndNode;
  344. EndNode.readNodeFromFile(max.ptr);
  345. // exceed the biggest key in tree
  346. if( max.offset == EndNode.MaxItem ) {
  347. IncludeMax = 1;
  348. max.offset = EndNode.ItemOnNode - 1;
  349. }
  350. else 
  351. IncludeMax = 0;
  352. IncludeMin = 1;
  353. UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,max);      
  354. break;
  355.     }
  356.     case LE :
  357.     {
  358. min = tree.getStart();
  359. BPTreeNode node;
  360. node.readNodeFromFile(min.ptr);
  361. if( node.compare(node.k[0],ConditionInfo.max) > 0)
  362. throw 1027;
  363. if( tree.search(ConditionInfo.max, &max) )
  364. IncludeMax = 1;
  365. else {
  366. BPTreeNode EndNode;
  367. EndNode.readNodeFromFile(max.ptr);
  368. // exceed the biggest key in tree
  369. if( max.offset == EndNode.MaxItem ) {
  370. IncludeMax = 1;
  371. max.offset = EndNode.ItemOnNode - 1;
  372. }
  373. else 
  374. IncludeMax = 0;
  375. }
  376. IncludeMin = 1;
  377. UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,max); 
  378. break;
  379.     }
  380.     case E :
  381.     {
  382. if( !tree.search(ConditionInfo.min,&min) )
  383. throw 1026;   
  384. max = min;
  385. IncludeMin = 1;  IncludeMax = 1;
  386. UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,max);
  387. break;
  388.     }
  389.     case NE :
  390.     {
  391. Key_Location temp;
  392. //condition update all records
  393. if( !tree.search(ConditionInfo.min,&temp) ) {
  394. min = tree.getStart();
  395. max = tree.getEnd();
  396. IncludeMin = 1;
  397. IncludeMax = 1;
  398. UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,max);
  399. break;
  400. }
  401. else { //condition having some nodes equal the key
  402. min = tree.getStart();
  403. max = tree.getEnd();      
  404. IncludeMin = 1;
  405. IncludeMax = 0;
  406. UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,temp);
  407. IncludeMin = 0;
  408. IncludeMax = 1;
  409. UpdateRec(tree,RecInfo,IncludeMin,temp,IncludeMax,max);
  410. break;
  411. }
  412.     }
  413.     case BETWEEN:
  414.     {                                        
  415. Key_Location temp;                     
  416. temp = tree.getStart();              
  417. BPTreeNode StartNode;                 
  418. StartNode.readNodeFromFile(temp.ptr);  
  419.                                            
  420. temp = tree.getEnd();                
  421. BPTreeNode EndNode;                  
  422. EndNode.readNodeFromFile(temp.ptr);
  423. // max < k[0]
  424. if( StartNode.compare(StartNode.k[0], ConditionInfo.max) > 0)
  425. throw 1027;               
  426. // k[n-1] < min
  427. if( EndNode.compare(EndNode.k[EndNode.ItemOnNode - 1], ConditionInfo.min) < 0)
  428. throw 1027;
  429. // update all records
  430. if( StartNode.compare(StartNode.k[0],ConditionInfo.min) >= 0 &&
  431. EndNode.compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.max) <= 0) {
  432. // print all record
  433. min = tree.getStart();
  434. max = tree.getEnd();
  435. IncludeMin = 1;
  436. IncludeMax = 1;
  437. UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,max);
  438. break;
  439. }
  440. // update from k[0] to max
  441. if( StartNode.compare(StartNode.k[0],ConditionInfo.min) >= 0 &&
  442. EndNode.compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.max) > 0) {
  443. min = tree.getStart();
  444. BPTreeNode node;
  445. node.readNodeFromFile(min.ptr);
  446. if( tree.search(ConditionInfo.max,&max) )
  447. IncludeMax = 1;
  448. else {
  449. Key_Location end;
  450. end = tree.getEnd();
  451. // exceed the biggest key in tree
  452. if( max.offset == node.MaxItem && max.ptr == end.ptr ) {
  453. IncludeMax = 1;
  454. max.offset = node.ItemOnNode - 1;
  455. }
  456. else if( max.offset == node.MaxItem ) {
  457. max = tree.moveToNextKey(max);
  458. IncludeMax = 0;
  459. }
  460. else 
  461. IncludeMax = 0;
  462. }
  463. IncludeMin = 1;  // include the max key when updating
  464. UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,max); 
  465. break;
  466. }
  467. // update from min to k[n-1]
  468. if( StartNode.compare(StartNode.k[0],ConditionInfo.min) < 0 &&
  469. EndNode.compare(EndNode.k[EndNode.ItemOnNode - 1],ConditionInfo.max) <= 0) {
  470. max = tree.getEnd();
  471. BPTreeNode node;
  472. node.readNodeFromFile(max.ptr);
  473. tree.search(ConditionInfo.min,&min);
  474. if( min.offset == node.MaxItem )
  475. min = tree.moveToNextKey(min);
  476. IncludeMin = 1; IncludeMax =1; 
  477. UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,max); 
  478. break;
  479. }
  480. // update from min to max
  481. if( StartNode.compare(StartNode.k[0], ConditionInfo.min) < 0 &&
  482. EndNode.compare(EndNode.k[EndNode.ItemOnNode - 1], ConditionInfo.max) > 0) {
  483. Key_Location temp;
  484. temp = tree.getEnd();
  485. BPTreeNode node;
  486. node.readNodeFromFile(temp.ptr);
  487. tree.search(ConditionInfo.min,&min);
  488. if( min.offset == node.MaxItem )
  489. min = tree.moveToNextKey(min);
  490. IncludeMin = 1; 
  491. if( tree.search(ConditionInfo.max,&max) )
  492. IncludeMax = 1;
  493. else {
  494. if( max.offset == node.MaxItem ) {
  495. max = tree.moveToNextKey(max);
  496. IncludeMax = 0;
  497. }
  498. else 
  499. IncludeMax = 0;
  500. }
  501. UpdateRec(tree,RecInfo,IncludeMin,min,IncludeMax,max); 
  502. break;     
  503. }
  504. }
  505.   }  
  506.   cout<<"end update"<<endl; //===//
  507. }
  508. //////////////////////////////////////////////////////////////////////////////////////
  509. // delete a record and adjust the B+ tree
  510. void Delete( TB_Delete_Info& DeleteInfo ) {
  511. Condition_Info ConditionInfo;
  512. Key_Location KeyLoca;
  513. Rec_Info RecInfo;
  514. HCatalog catalog;
  515. Record   rec;
  516. BPTree tree;
  517. catalog.Delete(DeleteInfo,ConditionInfo);
  518. if( !tree.search(ConditionInfo.min, &KeyLoca) )
  519. throw 1026;  // Error 1026: the Key name isn't existed
  520. _F_FileAddr ptr;
  521. tree.myDelete(ConditionInfo.min, ptr); 
  522. rec.Delete(ptr);
  523. }
  524. //////////////////////////////////////////////////////////////////////////////////////
  525. // print the record
  526. void Print(BPTree & tree, Select_Rec_Info & SelectRecInfo,      
  527.            bool IncludeMin, Key_Location min, bool IncludeMax, Key_Location max) {
  528. Record rec;
  529. Key_Location temp;
  530. if( (min == max) && ((0==IncludeMin) || (0==IncludeMax)) ) {
  531. return;
  532. }
  533. if( IncludeMin == 0 )
  534. min = tree.moveToNextKey(min);
  535. //not include the max
  536. if(IncludeMax == 0 ) {
  537. temp = min;
  538. _F_FileAddr ptr;
  539. if(temp == max )
  540. throw 1027;  // no record
  541. while( temp != max ) {
  542. ptr = tree.getCurRecAddr(temp);
  543. rec.Print(ptr, SelectRecInfo);     // print the record
  544. temp = tree.moveToNextKey(temp);  // move to next
  545. }
  546. }
  547. else { // include max
  548. temp = min;
  549. _F_FileAddr ptr;
  550. do {
  551. ptr = tree.getCurRecAddr(temp);
  552. rec.Print(ptr, SelectRecInfo);     // print the record
  553. if(temp == max)
  554. break;
  555. temp = tree.moveToNextKey(temp);  // move to next
  556. }while(1);
  557. }
  558. }
  559. //////////////////////////////////////////////////////////////////////////////////////
  560. // update the record
  561. void UpdateRec(BPTree & tree,Rec_Info & RecInfo,              
  562.    bool IncludeMin,Key_Location min,bool IncludeMax,Key_Location max) {
  563. cout<<"begin updateRec"<<endl; //====//
  564. Record rec;
  565. Key_Location temp;
  566. if( (min == max) && ((0==IncludeMin) || (0==IncludeMax)) )
  567. return;
  568. if( IncludeMin == 0 ) 
  569. min = tree.moveToNextKey(min);
  570. cout<<"in updaterec"<<endl; //===//
  571. if(IncludeMax == 0 ) {
  572. temp = min;
  573. _F_FileAddr ptr;
  574. if(temp == max )
  575. throw 1027;
  576. while( temp != max ) {
  577. ptr = tree.getCurRecAddr(temp);
  578. rec.Update(ptr,RecInfo); 
  579. temp = tree.moveToNextKey(temp);
  580. }
  581. }
  582. else { //( IncludeMax == 1)
  583. temp = min;
  584. _F_FileAddr ptr;
  585. do {
  586. ptr = tree.getCurRecAddr(temp);
  587. rec.Update(ptr,RecInfo); 
  588. if(temp == max)
  589. break;
  590. temp = tree.moveToNextKey(temp);
  591. } while(1);
  592. }
  593. cout<<"end updateRec"<<endl; //==//
  594. }
  595. //////////////////////////////////////////////////////////////////////////////////////
  596. // drop the table
  597. void Ctrl_DropTB() {
  598. char address[256];
  599. strcpy(address,CurLocation);
  600. strcat(address,CurRelationName);
  601. strcat(address,".dbf");
  602. _M_File table1 = Buffer[address];
  603. table1.Close();  // close the file whose path is 'address'
  604. strcpy(address,CurLocation);
  605. strcat(address,CurRelationName);
  606. DelTB(address);  // delete the file
  607. }
  608. //////////////////////////////////////////////////////////////////////////////////////
  609. // drop the database
  610. void Ctrl_DropDB() {
  611. Buffer.End();   // close the buffer,write all page from memory to file
  612. char address[256];
  613. strcpy(address,CurLocation);
  614. DelDB(address); // delete datebase 
  615. Buffer.Start(); // initialize a new buffer
  616. }
  617. //////////////////////////////////////////////////////////////////////////////////////