Skip to content

Commit c8b7439

Browse files
committed
re-organize code
1 parent c4d7bbf commit c8b7439

File tree

11 files changed

+61
-16
lines changed

11 files changed

+61
-16
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ exit
5656

5757
## Spec
5858

59+
### Database File Format
60+
61+
The database file format mimicked that of SQLite but with some differences.
62+
5963
### 数据类型
6064

6165
只要求支持三种基本数据类型:int,char(n),float,其中char(n)满足 1 <= n <= 255 。
@@ -78,7 +82,7 @@ exit
7882

7983
## Architecture
8084

81-
![](img/2020-06-15-21-29-42.png)
85+
![](img/2020-06-16-14-33-06.png)
8286

8387
### Interpreter
8488

img/2020-06-15-21-29-42.png

-47.9 KB
Binary file not shown.

img/2020-06-16-14-33-06.png

44.4 KB
Loading

src/MiniSQL.Api/Api.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,6 @@ private SelectResult HandleSelectStatement(SelectStatement statement)
160160
{
161161
isIndexTreeAvailable = true;
162162
// find out the primary key
163-
// List<AtomValue> indexPrimaryKeyPair = _recordManager.SelectRecord(statement.Condition.Ands[indexSchema.Name].RightOperand.ConcreteValue, indexSchema.RootPage);
164-
// primaryKey = indexPrimaryKeyPair[1];
165163
List<AtomValue> wrappedPrimaryKey = _recordManager.SelectRecord(statement.Condition.Ands[indexSchema.SQL.AttributeName].RightOperand.ConcreteValue, indexSchema.RootPage);
166164
primaryKey = wrappedPrimaryKey?[0];
167165
break;
@@ -190,8 +188,8 @@ private SelectResult HandleSelectStatement(SelectStatement statement)
190188
}
191189
else // the primary key is null.
192190
// if primaryKey is null,
193-
// it means from the index tree could not find the primary key.
194-
// in order words, there is not a row with the condition existing in table tree.
191+
// it means that from the index tree it could not find the primary key.
192+
// in order words, there is not a row existing in the table tree satisfying the condition.
195193
// thus, no need to visit the table tree
196194
{
197195
// assign an empty list

src/MiniSQL.Api/Controllers/View.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ public View(IIndexManager bTreeController, IInterpreter interpreter, ICatalogMan
3737
_bTreeController = bTreeController;
3838
_interpreter = interpreter;
3939
_catalogManager = catalogManager;
40-
// IIndexManager indexManager = new IndexManager();
4140
_recordManager = recordManager;
4241
_api = api;
4342
}

src/MiniSQL.IndexManager/Controllers/FreeList.cs renamed to src/MiniSQL.BufferManager/Controllers/FreeList.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
using System;
2-
using System.Collections;
3-
using System.Collections.Generic;
4-
using MiniSQL.BufferManager.Controllers;
52
using MiniSQL.BufferManager.Models;
6-
using MiniSQL.IndexManager.Models;
73

8-
namespace MiniSQL.IndexManager.Controllers
4+
namespace MiniSQL.BufferManager.Controllers
95
{
106
// a link list recording all free pages
117
public class FreeList

src/MiniSQL.BufferManager/Controllers/Pager.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ public void WritePage(MemoryPage page)
170170

171171
this.Stream.Seek((page.PageNumber - 1) * this.PageSize, SeekOrigin.Begin);
172172
this.Stream.Write(page.Data, 0, page.PageSize);
173-
this.Stream.Flush(true);
173+
// WORK AROUND: make good use of OS-level buffer XD
174+
// this.Stream.Flush(true);
174175
page.IsDirty = false;
175176
}
176177

src/MiniSQL.IndexManager/Models/FreeListTruck.cs renamed to src/MiniSQL.BufferManager/Models/FreeListTruck.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
2-
using MiniSQL.BufferManager.Models;
32

4-
namespace MiniSQL.IndexManager.Models
3+
namespace MiniSQL.BufferManager.Models
54
{
65
public class FreeListTruck
76
{

src/MiniSQL.BufferManager/Program.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,57 @@ static void Main(string[] args)
1818

1919
// TestPagerSwapping();
2020

21+
// TestFreeList();
22+
2123
Console.WriteLine("[BufferManager] Test End");
2224
}
2325

26+
static void TestFreeList()
27+
{
28+
string dbPath = "./testdbfile.minidb";
29+
File.Delete(dbPath);
30+
31+
Pager pager = new Pager(dbPath, 4096, 100);
32+
33+
List<MemoryPage> pageList = new List<MemoryPage>();
34+
pageList.Add(pager.GetNewPage()); // page #2
35+
pageList.Add(pager.GetNewPage()); // page #3
36+
pageList.Add(pager.GetNewPage()); // page #4
37+
pageList.Add(pager.GetNewPage()); // page #5
38+
39+
FreeList freeList = new FreeList(pager);
40+
41+
// test initialization
42+
MemoryPage newPage = null;
43+
newPage = freeList.AllocatePage(); // freeList is now empty
44+
Debug.Assert(newPage == null);
45+
46+
// recycle pages
47+
// MemoryPage tempPage = pager.ReadPage(3);
48+
freeList.RecyclePage(pageList[2]); // freeList->4
49+
freeList.RecyclePage(pageList[1]); // freeList->3->4
50+
freeList.RecyclePage(pageList[3]); // freeList->5->3->4
51+
52+
// fetch page from free list
53+
newPage = freeList.AllocatePage(); // freeList->3->4
54+
Debug.Assert(newPage.PageNumber == 5);
55+
newPage = freeList.AllocatePage(); // freeList->4
56+
Debug.Assert(newPage.PageNumber == 3);
57+
58+
// recycle a page
59+
freeList.RecyclePage(pageList[3]); // freeList->5->4
60+
61+
// fetch remaining pages
62+
newPage = freeList.AllocatePage(); // freeList->4
63+
Debug.Assert(newPage.PageNumber == 5);
64+
newPage = freeList.AllocatePage(); // freeList->null
65+
Debug.Assert(newPage.PageNumber == 4);
66+
newPage = freeList.AllocatePage(); // freeList->null
67+
Debug.Assert(newPage == null);
68+
69+
pager.Close();
70+
}
71+
2472
private static Expression GetAndsExpression()
2573
{
2674
// __tree structure__

src/MiniSQL.IndexManager/Controllers/BTreeController.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Runtime;
43
using MiniSQL.BufferManager.Controllers;
54
using MiniSQL.IndexManager.Models;
65
using MiniSQL.BufferManager.Models;

src/MiniSQL.Interpreter/Grammar/tests/table-insert-delete-1.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,5 @@ delete from person where age <= 20 and height < 170 and name = "Person16";
3636

3737
select * from person;
3838

39-
drop table persion;
39+
-- drop table persion;
40+
drop table person;

0 commit comments

Comments
 (0)