Skip to content

Commit 21f6cad

Browse files
committed
feat: plan
1 parent 3c6af93 commit 21f6cad

40 files changed

+576
-66
lines changed

.github/copilot-instructions.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
コードスタイル
2+
- エラー文言はパッケージ名を先頭に含める(ex. `fmt.Errorf("pkg: error message")`
3+
-

pkg/buffer/buffer_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func TestBuffer_WriteContents(t *testing.T) {
1717
lsn = 2
1818
)
1919
dir, _, cleanup := testutil.SetupFile(logFileName)
20-
defer cleanup()
20+
t.Cleanup(cleanup)
2121
fileMgr := file.NewFileMgr(dir, blockSize)
2222
logMgr, err := log.NewLogMgr(fileMgr, logFileName)
2323
assert.NoError(t, err)
@@ -43,7 +43,7 @@ func TestBuffer_Flush(t *testing.T) {
4343
t.Parallel()
4444
const logFileName = "test_buffer_flush_skip"
4545
dir, _, cleanup := testutil.SetupFile(logFileName)
46-
defer cleanup()
46+
t.Cleanup(cleanup)
4747
fileMgr := file.NewFileMgr(dir, blockSize)
4848
logMgr, err := log.NewLogMgr(fileMgr, logFileName)
4949
assert.NoError(t, err)
@@ -58,7 +58,7 @@ func TestBuffer_Flush(t *testing.T) {
5858
t.Parallel()
5959
const logFileName = "test_buffer_flush"
6060
dir, _, cleanup := testutil.SetupFile(logFileName)
61-
defer cleanup()
61+
t.Cleanup(cleanup)
6262
fileMgr := file.NewFileMgr(dir, blockSize)
6363
logMgr, err := log.NewLogMgr(fileMgr, logFileName)
6464
assert.NoError(t, err)
@@ -92,7 +92,7 @@ func TestBuffer_AssignToBlock(t *testing.T) {
9292
logFileName = "test_buffer_assign_to_block"
9393
)
9494
dir, _, cleanup := testutil.SetupFile(logFileName)
95-
defer cleanup()
95+
t.Cleanup(cleanup)
9696
fileMgr := file.NewFileMgr(dir, blockSize)
9797
logMgr, err := log.NewLogMgr(fileMgr, logFileName)
9898
assert.NoError(t, err)

pkg/buffer_mgr/buffer_mgr_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func TestBufferMgr_Pin(t *testing.T) {
2020
logFileName = "test_buffer_mgr_pin_no_buffer_assigned"
2121
)
2222
dir, _, cleanup := testutil.SetupFile(logFileName)
23-
defer cleanup()
23+
t.Cleanup(cleanup)
2424
fileMgr := file.NewFileMgr(dir, blockSize)
2525
logMgr, err := log.NewLogMgr(fileMgr, logFileName)
2626
assert.NoError(t, err)
@@ -45,7 +45,7 @@ func TestBufferMgr_Pin(t *testing.T) {
4545
buffNum = 1
4646
)
4747
dir, _, cleanup := testutil.SetupFile(logFileName)
48-
defer cleanup()
48+
t.Cleanup(cleanup)
4949
fileMgr := file.NewFileMgr(dir, blockSize)
5050
logMgr, err := log.NewLogMgr(fileMgr, logFileName)
5151
assert.NoError(t, err)
@@ -73,7 +73,7 @@ func TestBufferMgr_Pin(t *testing.T) {
7373
buffNum = 1
7474
)
7575
dir, _, cleanup := testutil.SetupFile(logFileName)
76-
defer cleanup()
76+
t.Cleanup(cleanup)
7777
fileMgr := file.NewFileMgr(dir, blockSize)
7878
logMgr, err := log.NewLogMgr(fileMgr, logFileName)
7979
assert.NoError(t, err)
@@ -103,7 +103,7 @@ func TestBufferMgrImpl_Unpin(t *testing.T) {
103103
logFileName = "test_buffer_mgr_unpin_available_increment"
104104
)
105105
dir, _, cleanup := testutil.SetupFile(logFileName)
106-
defer cleanup()
106+
t.Cleanup(cleanup)
107107
fileMgr := file.NewFileMgr(dir, blockSize)
108108
logMgr, err := log.NewLogMgr(fileMgr, logFileName)
109109
assert.NoError(t, err)
@@ -137,7 +137,7 @@ func TestBufferMgrImpl_FlushAll(t *testing.T) {
137137
txNum = 1
138138
)
139139
dir, _, cleanup := testutil.SetupFile(logFileName)
140-
defer cleanup()
140+
t.Cleanup(cleanup)
141141
fileMgr := file.NewFileMgr(dir, blockSize)
142142
logMgr, err := log.NewLogMgr(fileMgr, logFileName)
143143
assert.NoError(t, err)

pkg/file/file_mgr_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func TestFileMgr_Read(t *testing.T) {
5454
t.Parallel()
5555
const fileName = "read_test"
5656
f, cleanup := setupFile(fileName)
57-
defer cleanup()
57+
t.Cleanup(cleanup)
5858
bytes := []byte("hello world!!!!")
5959
_, err := f.Write(bytes)
6060
assert.NoError(t, err)
@@ -73,7 +73,7 @@ func TestFileMgr_Read(t *testing.T) {
7373
blockSize = 4096
7474
)
7575
_, cleanup := setupFile(fileName)
76-
defer cleanup()
76+
t.Cleanup(cleanup)
7777
page := NewPage(blockSize)
7878
page.SetString(0, "hello world!!!!")
7979
id := NewBlockId(fileName, 0)
@@ -89,7 +89,7 @@ func TestFileMgr_Read(t *testing.T) {
8989
t.Parallel()
9090
const fileName = "append_test"
9191
_, cleanup := setupFile(fileName)
92-
defer cleanup()
92+
t.Cleanup(cleanup)
9393

9494
id, err := mgr.Append(fileName)
9595

pkg/log/log_iterator_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func TestNewLogIterator(t *testing.T) {
1515
blockSize = 8
1616
)
1717
dir, _, cleanup := testutil.SetupFile(fileName)
18-
defer cleanup()
18+
t.Cleanup(cleanup)
1919
fileMgr := file.NewFileMgr(dir, blockSize)
2020
writePage := file.NewPage(blockSize)
2121
writePage.SetInt(0, blockSize)
@@ -36,7 +36,7 @@ func TestLogIterator_HasNext(t *testing.T) {
3636
filename = "test_log_iterator_has_next"
3737
)
3838
dir, _, cleanup := testutil.SetupFile(filename)
39-
defer cleanup()
39+
t.Cleanup(cleanup)
4040
fileMgr := file.NewFileMgr(dir, blockSize)
4141
block := file.NewBlockId(filename, 0)
4242

@@ -55,7 +55,7 @@ func TestLogIterator_HasNext(t *testing.T) {
5555
filename = "test_log_iterator_has_next"
5656
)
5757
dir, _, cleanup := testutil.SetupFile(filename)
58-
defer cleanup()
58+
t.Cleanup(cleanup)
5959
fileMgr := file.NewFileMgr(dir, blockSize)
6060
block := file.NewBlockId(filename, 1)
6161

@@ -76,7 +76,7 @@ func TestLogIterator_Next(t *testing.T) {
7676
filename = "test_log_iterator_next_not_finished"
7777
)
7878
dir, _, cleanup := testutil.SetupFile(filename)
79-
defer cleanup()
79+
t.Cleanup(cleanup)
8080
fileMgr := file.NewFileMgr(dir, blockSize)
8181
block := file.NewBlockId(filename, 0)
8282
page := file.NewPage(blockSize)
@@ -102,7 +102,7 @@ func TestLogIterator_Next(t *testing.T) {
102102
filename = "test_log_iterator_next_block_finished"
103103
)
104104
dir, _, cleanup := testutil.SetupFile(filename)
105-
defer cleanup()
105+
t.Cleanup(cleanup)
106106
fileMgr := file.NewFileMgr(dir, blockSize)
107107
block0 := file.NewBlockId(filename, 0)
108108
page0 := file.NewPage(blockSize)

pkg/log/log_mgr_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func TestNewLogMgr(t *testing.T) {
1616
blockSize = 4096
1717
)
1818
dir, _, cleanup := testutil.SetupFile(testFileName)
19-
defer cleanup()
19+
t.Cleanup(cleanup)
2020
fileMgr := file.NewFileMgr(dir, blockSize)
2121

2222
lm, err := NewLogMgr(fileMgr, testFileName)
@@ -33,7 +33,7 @@ func TestNewLogMgr(t *testing.T) {
3333
blockSize = 5
3434
)
3535
dir, f, cleanup := testutil.SetupFile(testFileName)
36-
defer cleanup()
36+
t.Cleanup(cleanup)
3737
record := []byte("hello world!!")
3838
_, err := f.Write(record)
3939
f.Close()
@@ -58,7 +58,7 @@ func TestLogMgr_Append(t *testing.T) {
5858
blockIdx = 0
5959
)
6060
dir, _, cleanup := testutil.SetupFile(testFileName)
61-
defer cleanup()
61+
t.Cleanup(cleanup)
6262
page := file.NewPage(blockSize)
6363
page.SetInt(0, blockSize)
6464
fileMgr := file.NewFileMgr(dir, blockSize)
@@ -82,7 +82,7 @@ func TestLogMgr_Append(t *testing.T) {
8282
blockIdx = 0
8383
)
8484
dir, _, cleanup := testutil.SetupFile(testFileName)
85-
defer cleanup()
85+
t.Cleanup(cleanup)
8686
page := file.NewPage(blockSize)
8787
page.SetInt(0, blockSize)
8888
fileMgr := file.NewFileMgr(dir, blockSize)
@@ -110,7 +110,7 @@ func TestLogMgr_Flush(t *testing.T) {
110110
blockSize = 10
111111
)
112112
dir, _, cleanup := testutil.SetupFile(testFileName)
113-
defer cleanup()
113+
t.Cleanup(cleanup)
114114
fileMgr := file.NewFileMgr(dir, blockSize)
115115
lm, err := NewLogMgr(fileMgr, testFileName)
116116
assert.NoError(t, err)
@@ -131,7 +131,7 @@ func TestLogMgr_Flush(t *testing.T) {
131131
blockSize = 10
132132
)
133133
dir, _, cleanup := testutil.SetupFile(testFileName)
134-
defer cleanup()
134+
t.Cleanup(cleanup)
135135
fileMgr := file.NewFileMgr(dir, blockSize)
136136
lm, err := NewLogMgr(fileMgr, testFileName)
137137
assert.NoError(t, err)

pkg/metadata/metadata.go

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ type TableMgr interface {
99
CreateTable(table string, schema record.Schema, tx tx.Transaction) error
1010
GetLayout(table string, tx tx.Transaction) (record.Layout, error)
1111
HasTable(table string, tx tx.Transaction) (bool, error)
12+
TableCatalog() string
13+
FieldCatalog() string
1214
}
1315

1416
type ViewMgr interface {

pkg/metadata/metadata_mgr.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ type MetadataMgrImpl struct {
1212
idxMgr IndexMgr
1313
}
1414

15-
func NewMetadataMgr(tx tx.Transaction) (MetadataMgr, error) {
16-
tm, err := NewTableMgr(tx)
15+
func NewMetadataMgr(tx tx.Transaction, opts ...TableMgrOption) (MetadataMgr, error) {
16+
tm, err := NewTableMgr(tx, opts...)
1717
if err != nil {
1818
return nil, err
1919
}

pkg/metadata/stat_mgr.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ func (sm *StatMgrImpl) refreshStatistics(tx tx.Transaction) error {
6161
sm.tableStats = make(map[string]StatInfo, INIT_STAT_CAP)
6262
sm.numCalls = 0
6363

64-
tableCatLayout, err := sm.tableMgr.GetLayout(tableTableCatalog, tx)
64+
tableCatLayout, err := sm.tableMgr.GetLayout(sm.tableMgr.TableCatalog(), tx)
6565
if err != nil {
6666
return err
6767
}
68-
tcat, err := record.NewTableScan(tx, tableTableCatalog, tableCatLayout)
68+
tcat, err := record.NewTableScan(tx, sm.tableMgr.TableCatalog(), tableCatLayout)
6969
if err != nil {
7070
return err
7171
}

pkg/metadata/stat_mgr_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func TestStatMgr(t *testing.T) {
2020
blockSize = 1024
2121
)
2222
dir, _, cleanup := testutil.SetupFile(logFileName)
23-
defer cleanup()
23+
t.Cleanup(cleanup)
2424
fileMgr := file.NewFileMgr(dir, blockSize)
2525
logMgr, err := log.NewLogMgr(fileMgr, logFileName)
2626
assert.NoError(t, err)

pkg/metadata/table_mgr.go

+43-13
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import (
99
)
1010

1111
const (
12-
tableFieldCatalog = "fldcat"
13-
tableTableCatalog = "tblcat"
12+
defaultTableFieldCatalog = "fldcat"
13+
defaultTableTableCatalog = "tblcat"
1414

1515
fieldTableName = "tblname"
1616
fieldSlotSize = "slotsize"
@@ -21,17 +21,39 @@ const (
2121
)
2222

2323
type TableMgrImpl struct {
24+
tableCatalog string
25+
fieldCatalog string
2426
tblCatLayout record.Layout
2527
fldCatLayout record.Layout
2628
mu sync.Mutex
2729
}
2830

31+
type TableMgrOption func(*TableMgrImpl)
32+
33+
func WithTableTableCatalog(name string) TableMgrOption {
34+
return func(tm *TableMgrImpl) {
35+
tm.tableCatalog = name
36+
}
37+
}
38+
39+
func WithTableFieldCatalog(name string) TableMgrOption {
40+
return func(tm *TableMgrImpl) {
41+
tm.fieldCatalog = name
42+
}
43+
}
44+
2945
// MaxName is the maximum character length a tablename or fieldname can have.
3046
const MAX_NAME_LENGTH = 16
3147

3248
// NewTableMgr creates a new catalog manager for the database system.
33-
func NewTableMgr(tx tx.Transaction) (*TableMgrImpl, error) {
34-
tm := &TableMgrImpl{}
49+
func NewTableMgr(tx tx.Transaction, opts ...TableMgrOption) (*TableMgrImpl, error) {
50+
tm := &TableMgrImpl{
51+
tableCatalog: defaultTableTableCatalog,
52+
fieldCatalog: defaultTableFieldCatalog,
53+
}
54+
for _, opt := range opts {
55+
opt(tm)
56+
}
3557

3658
var err error
3759

@@ -47,10 +69,10 @@ func NewTableMgr(tx tx.Transaction) (*TableMgrImpl, error) {
4769
return nil, fmt.Errorf("metadata: failed to create field catalog layout from schema: %w", err)
4870
}
4971

50-
if err := tm.CreateTable(tableTableCatalog, tblCatSchema, tx); err != nil {
72+
if err := tm.CreateTable(tm.tableCatalog, tblCatSchema, tx); err != nil {
5173
return nil, err
5274
}
53-
if err := tm.CreateTable(tableFieldCatalog, fldCatSchema, tx); err != nil {
75+
if err := tm.CreateTable(defaultTableFieldCatalog, fldCatSchema, tx); err != nil {
5476
return nil, err
5577
}
5678
return tm, nil
@@ -100,7 +122,7 @@ func (tm *TableMgrImpl) CreateTable(tblname string, sch record.Schema, tx tx.Tra
100122
}
101123

102124
func (tm *TableMgrImpl) HasTable(tblname string, tx tx.Transaction) (bool, error) {
103-
tcat, err := record.NewTableScan(tx, tableTableCatalog, tm.tblCatLayout)
125+
tcat, err := record.NewTableScan(tx, tm.tableCatalog, tm.tblCatLayout)
104126
if err != nil {
105127
return false, fmt.Errorf("metadata: failed to create table scan: %w", err)
106128
}
@@ -118,7 +140,7 @@ func (tm *TableMgrImpl) HasTable(tblname string, tx tx.Transaction) (bool, error
118140
}
119141

120142
func (tm *TableMgrImpl) addToTableCatalog(tblname string, slotSize int, tx tx.Transaction) error {
121-
tcat, err := record.NewTableScan(tx, tableTableCatalog, tm.tblCatLayout)
143+
tcat, err := record.NewTableScan(tx, tm.tableCatalog, tm.tblCatLayout)
122144
if err != nil {
123145
return fmt.Errorf("metadata: failed to create table scan: %w", err)
124146
}
@@ -140,7 +162,7 @@ func (tm *TableMgrImpl) addToFieldCatalog(tblname string, schema record.Schema,
140162
if err != nil {
141163
return fmt.Errorf("metadata: failed to create layout from schema: %w", err)
142164
}
143-
fcat, err := record.NewTableScan(tx, tableFieldCatalog, tm.fldCatLayout)
165+
fcat, err := record.NewTableScan(tx, tm.fieldCatalog, tm.fldCatLayout)
144166
if err != nil {
145167
return fmt.Errorf("metadata: failed to create table scan: %w", err)
146168
}
@@ -179,7 +201,7 @@ func (tm *TableMgrImpl) addToFieldCatalog(tblname string, schema record.Schema,
179201
func (tm *TableMgrImpl) DropTable(tblname string, tx tx.Transaction) error {
180202
tm.mu.Lock()
181203
defer tm.mu.Unlock()
182-
tcat, err := record.NewTableScan(tx, tableTableCatalog, tm.tblCatLayout)
204+
tcat, err := record.NewTableScan(tx, tm.tableCatalog, tm.tblCatLayout)
183205
if err != nil {
184206
return fmt.Errorf("metadata: failed to create table scan: %w", err)
185207
}
@@ -198,7 +220,7 @@ func (tm *TableMgrImpl) DropTable(tblname string, tx tx.Transaction) error {
198220
}
199221
tcat.Close()
200222

201-
fcat, err := record.NewTableScan(tx, tableFieldCatalog, tm.fldCatLayout)
223+
fcat, err := record.NewTableScan(tx, tm.fieldCatalog, tm.fldCatLayout)
202224
if err != nil {
203225
return fmt.Errorf("metadata: failed to create table scan: %w", err)
204226
}
@@ -233,7 +255,7 @@ func (tm *TableMgrImpl) GetLayout(tblname string, tx tx.Transaction) (record.Lay
233255
}
234256

235257
func (tm *TableMgrImpl) getTableSlotSize(tblname string, tx tx.Transaction) (int, error) {
236-
tcat, err := record.NewTableScan(tx, tableTableCatalog, tm.tblCatLayout)
258+
tcat, err := record.NewTableScan(tx, tm.tableCatalog, tm.tblCatLayout)
237259
if err != nil {
238260
return 0, fmt.Errorf("metadata: failed to create table scan: %w", err)
239261
}
@@ -254,7 +276,7 @@ func (tm *TableMgrImpl) getTableSlotSize(tblname string, tx tx.Transaction) (int
254276
func (tm *TableMgrImpl) getTableSchemaOffset(tblName string, tx tx.Transaction) (record.Schema, map[string]int, error) {
255277
sch := record.NewSchema()
256278
offsets := make(map[string]int)
257-
fcat, err := record.NewTableScan(tx, tableFieldCatalog, tm.fldCatLayout)
279+
fcat, err := record.NewTableScan(tx, defaultTableFieldCatalog, tm.fldCatLayout)
258280
if err != nil {
259281
return nil, nil, fmt.Errorf("metadata: failed to create table scan: %w", err)
260282
}
@@ -288,3 +310,11 @@ func (tm *TableMgrImpl) getTableSchemaOffset(tblName string, tx tx.Transaction)
288310
}
289311
return sch, offsets, nil
290312
}
313+
314+
func (tm *TableMgrImpl) TableCatalog() string {
315+
return tm.tableCatalog
316+
}
317+
318+
func (tm *TableMgrImpl) FieldCatalog() string {
319+
return tm.fieldCatalog
320+
}

0 commit comments

Comments
 (0)