Skip to content

Commit 5444d85

Browse files
committed
sql: make Row a concrete implementation.
* Row is now a slice instead of an interface. * MemoryRow is removed.
1 parent 48b4a0c commit 5444d85

31 files changed

+167
-167
lines changed

Diff for: cmd/gitql/query.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,12 @@ func (c *CmdQuery) printQuery(schema sql.Schema, iter sql.RowIter) error {
114114
return err
115115
}
116116

117-
if err := f.Write(row.Fields()); err != nil {
117+
record := make([]interface{}, len(row))
118+
for i := 0; i < len(row); i++ {
119+
record[i] = row[i]
120+
}
121+
122+
if err := f.Write(record); err != nil {
118123
return err
119124
}
120125
}

Diff for: engine.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package gitql
33
import (
44
"github.com/gitql/gitql/sql"
55
"github.com/gitql/gitql/sql/analyzer"
6-
"github.com/gitql/gitql/sql/parse"
76
"github.com/gitql/gitql/sql/expression"
7+
"github.com/gitql/gitql/sql/parse"
88
)
99

1010
type Engine struct {

Diff for: engine_test.go

+13-13
Original file line numberDiff line numberDiff line change
@@ -16,46 +16,46 @@ func TestEngine_Query(t *testing.T) {
1616
testQuery(t, e,
1717
"SELECT i FROM mytable;",
1818
[]sql.Row{
19-
sql.NewMemoryRow(int64(1)),
20-
sql.NewMemoryRow(int64(2)),
21-
sql.NewMemoryRow(int64(3)),
19+
sql.NewRow(int64(1)),
20+
sql.NewRow(int64(2)),
21+
sql.NewRow(int64(3)),
2222
},
2323
)
2424

2525
testQuery(t, e,
2626
"SELECT i FROM mytable WHERE i = 2;",
2727
[]sql.Row{
28-
sql.NewMemoryRow(int64(2)),
28+
sql.NewRow(int64(2)),
2929
},
3030
)
3131

3232
testQuery(t, e,
3333
"SELECT i FROM mytable ORDER BY i DESC;",
3434
[]sql.Row{
35-
sql.NewMemoryRow(int64(3)),
36-
sql.NewMemoryRow(int64(2)),
37-
sql.NewMemoryRow(int64(1)),
35+
sql.NewRow(int64(3)),
36+
sql.NewRow(int64(2)),
37+
sql.NewRow(int64(1)),
3838
},
3939
)
4040

4141
testQuery(t, e,
4242
"SELECT i FROM mytable WHERE s = 'a' ORDER BY i DESC;",
4343
[]sql.Row{
44-
sql.NewMemoryRow(int64(1)),
44+
sql.NewRow(int64(1)),
4545
},
4646
)
4747

4848
testQuery(t, e,
4949
"SELECT i FROM mytable WHERE s = 'a' ORDER BY i DESC LIMIT 1;",
5050
[]sql.Row{
51-
sql.NewMemoryRow(int64(1)),
51+
sql.NewRow(int64(1)),
5252
},
5353
)
5454

5555
testQuery(t, e,
5656
"SELECT COUNT(*) FROM mytable;",
5757
[]sql.Row{
58-
sql.NewMemoryRow(int32(3)),
58+
sql.NewRow(int32(3)),
5959
},
6060
)
6161
}
@@ -91,9 +91,9 @@ func newEngine(t *testing.T) *gitql.Engine {
9191
{"i", sql.BigInteger},
9292
{"s", sql.String},
9393
})
94-
assert.Nil(table.Insert(int64(1), "a"))
95-
assert.Nil(table.Insert(int64(2), "b"))
96-
assert.Nil(table.Insert(int64(3), "c"))
94+
assert.Nil(table.Insert(sql.NewRow(int64(1), "a")))
95+
assert.Nil(table.Insert(sql.NewRow(int64(2), "b")))
96+
assert.Nil(table.Insert(sql.NewRow(int64(3), "c")))
9797

9898
db := mem.NewDatabase("mydb")
9999
db.AddTable("mytable", table)

Diff for: git/blobs.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func (i *blobIter) Next() (sql.Row, error) {
6565
}
6666

6767
func blobToRow(c *object.Blob) sql.Row {
68-
return sql.NewMemoryRow(
68+
return sql.NewRow(
6969
c.Hash.String(),
7070
c.Size,
7171
)

Diff for: git/commits.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (i *commitIter) Next() (sql.Row, error) {
7070
}
7171

7272
func commitToRow(c *object.Commit) sql.Row {
73-
return sql.NewMemoryRow(
73+
return sql.NewRow(
7474
c.Hash.String(),
7575
c.Author.Name,
7676
c.Author.Email,

Diff for: git/objects.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func (i *objectIter) Next() (sql.Row, error) {
6565
}
6666

6767
func objectToRow(o object.Object) sql.Row {
68-
return sql.NewMemoryRow(
68+
return sql.NewRow(
6969
o.ID().String(),
7070
o.Type().String(),
7171
)

Diff for: git/references.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func (i *referenceIter) Next() (sql.Row, error) {
7171
}
7272

7373
func referenceToRow(c *plumbing.Reference) sql.Row {
74-
return sql.NewMemoryRow(
74+
return sql.NewRow(
7575
c.Hash().String(),
7676
c.Name().String(),
7777
c.IsBranch(),

Diff for: git/tags.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (i *tagIter) Next() (sql.Row, error) {
7070
}
7171

7272
func tagToRow(c *object.Tag) sql.Row {
73-
return sql.NewMemoryRow(
73+
return sql.NewRow(
7474
c.Hash.String(),
7575
c.Name,
7676
c.Tagger.Email,

Diff for: git/tree_entries.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func (i *treeEntryIter) Next() (sql.Row, error) {
8686
}
8787

8888
func treeEntryToRow(t *object.Tree, e object.TreeEntry) sql.Row {
89-
return sql.NewMemoryRow(
89+
return sql.NewRow(
9090
t.ID().String(),
9191
e.Hash.String(),
9292
strconv.FormatInt(int64(e.Mode), 8),

Diff for: internal/format/json_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ func TestNewJsonFormat(t *testing.T) {
1919
}, w, t)
2020
}
2121

22-
2322
func TestNewFormat_Json(t *testing.T) {
2423
testNewFormat("json", t)
25-
}
24+
}

Diff for: mem/table.go

+14-12
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@ import (
1010
type Table struct {
1111
name string
1212
schema sql.Schema
13-
data [][]interface{}
13+
data []sql.Row
1414
}
1515

1616
func NewTable(name string, schema sql.Schema) *Table {
1717
return &Table{
1818
name: name,
1919
schema: schema,
20-
data: [][]interface{}{},
2120
}
2221
}
2322

@@ -38,7 +37,7 @@ func (t *Table) Children() []sql.Node {
3837
}
3938

4039
func (t *Table) RowIter() (sql.RowIter, error) {
41-
return &iter{data: t.data}, nil
40+
return &iter{rows: t.data}, nil
4241
}
4342

4443
func (t *Table) TransformUp(f func(sql.Node) sql.Node) sql.Node {
@@ -49,30 +48,33 @@ func (t *Table) TransformExpressionsUp(f func(sql.Expression) sql.Expression) sq
4948
return t
5049
}
5150

52-
func (t *Table) Insert(values ...interface{}) error {
53-
if len(values) != len(t.schema) {
54-
return fmt.Errorf("insert expected %d values, got %d", len(t.schema), len(values))
51+
func (t *Table) Insert(row sql.Row) error {
52+
if len(row) != len(t.schema) {
53+
return fmt.Errorf("insert expected %d values, got %d", len(t.schema), len(row))
5554
}
56-
for idx, value := range values {
55+
56+
for idx, value := range row {
5757
f := t.schema[idx]
5858
if !f.Type.Check(value) {
5959
return sql.ErrInvalidType
6060
}
6161
}
62-
t.data = append(t.data, values)
62+
63+
t.data = append(t.data, row.Copy())
6364
return nil
6465
}
6566

6667
type iter struct {
6768
idx int
68-
data [][]interface{}
69+
rows []sql.Row
6970
}
7071

7172
func (i *iter) Next() (sql.Row, error) {
72-
if i.idx >= len(i.data) {
73+
if i.idx >= len(i.rows) {
7374
return nil, io.EOF
7475
}
75-
row := sql.NewMemoryRow(i.data[i.idx]...)
76+
77+
row := i.rows[i.idx]
7678
i.idx++
77-
return row, nil
79+
return row.Copy(), nil
7880
}

Diff for: mem/table_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ func TestTable_Insert_RowIter(t *testing.T) {
2929
assert.Nil(err)
3030
assert.Len(rows, 0)
3131

32-
err = table.Insert("foo")
32+
err = table.Insert(sql.NewRow("foo"))
3333
rows, err = sql.NodeToRows(table)
3434
assert.Nil(err)
3535
assert.Len(rows, 1)
3636
assert.Nil(s.CheckRow(rows[0]))
3737

38-
err = table.Insert("bar")
38+
err = table.Insert(sql.NewRow("bar"))
3939
rows, err = sql.NodeToRows(table)
4040
assert.Nil(err)
4141
assert.Len(rows, 2)

Diff for: sql/expression/aggregation.go

+10-20
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func NewCount(e sql.Expression) *Count {
1515
}
1616

1717
func (c *Count) NewBuffer() sql.Row {
18-
return sql.NewMemoryRow(int32(0))
18+
return sql.NewRow(int32(0))
1919
}
2020

2121
func (c *Count) Type() sql.Type {
@@ -40,7 +40,6 @@ func (c *Count) TransformUp(f func(sql.Expression) sql.Expression) sql.Expressio
4040
}
4141

4242
func (c *Count) Update(buffer, row sql.Row) {
43-
mr := buffer.(sql.MemoryRow)
4443
var inc bool
4544
if _, ok := c.Child.(*Star); ok {
4645
inc = true
@@ -52,17 +51,16 @@ func (c *Count) Update(buffer, row sql.Row) {
5251
}
5352

5453
if inc {
55-
mr[0] = getInt32At(buffer, 0) + int32(1)
54+
buffer[0] = buffer[0].(int32) + int32(1)
5655
}
5756
}
5857

5958
func (c *Count) Merge(buffer, partial sql.Row) {
60-
mb := buffer.(sql.MemoryRow)
61-
mb[0] = getInt32At(buffer, 0) + getInt32At(partial, 0)
59+
buffer[0] = buffer[0].(int32) + partial[0].(int32)
6260
}
6361

6462
func (c *Count) Eval(buffer sql.Row) interface{} {
65-
return getInt32At(buffer, 0)
63+
return buffer[0]
6664
}
6765

6866
type First struct {
@@ -74,7 +72,7 @@ func NewFirst(e sql.Expression) *First {
7472
}
7573

7674
func (e *First) NewBuffer() sql.Row {
77-
return sql.NewMemoryRow(nil)
75+
return sql.NewRow(nil)
7876
}
7977

8078
func (e *First) Type() sql.Type {
@@ -91,25 +89,17 @@ func (e *First) TransformUp(f func(sql.Expression) sql.Expression) sql.Expressio
9189
}
9290

9391
func (e *First) Update(buffer, row sql.Row) {
94-
mr := buffer.(sql.MemoryRow)
95-
if mr[0] == nil {
96-
mr[0] = e.Child.Eval(row)
92+
if buffer[0] == nil {
93+
buffer[0] = e.Child.Eval(row)
9794
}
9895
}
9996

10097
func (e *First) Merge(buffer, partial sql.Row) {
101-
mb := buffer.(sql.MemoryRow)
102-
if mb[0] == nil {
103-
mp := partial.(sql.MemoryRow)
104-
mb[0] = mp[0]
98+
if buffer[0] == nil {
99+
buffer[0] = partial[0]
105100
}
106101
}
107102

108103
func (e *First) Eval(buffer sql.Row) interface{} {
109-
return buffer.Fields()[0]
110-
}
111-
112-
func getInt32At(row sql.Row, i int) int32 {
113-
f := row.Fields()
114-
return f[i].(int32)
104+
return buffer[0]
115105
}

Diff for: sql/expression/aggregation_test.go

+17-17
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ func TestCount_Eval_1(t *testing.T) {
2222
b := c.NewBuffer()
2323
assert.Equal(int32(0), c.Eval(b))
2424

25-
c.Update(b, sql.NewMemoryRow())
26-
c.Update(b, sql.NewMemoryRow("foo"))
27-
c.Update(b, sql.NewMemoryRow(1))
28-
c.Update(b, sql.NewMemoryRow(1, 2, 3))
25+
c.Update(b, nil)
26+
c.Update(b, sql.NewRow("foo"))
27+
c.Update(b, sql.NewRow(1))
28+
c.Update(b, sql.NewRow(1, 2, 3))
2929
assert.Equal(int32(4), c.Eval(b))
3030

3131
b2 := c.NewBuffer()
32-
c.Update(b2, sql.NewMemoryRow())
33-
c.Update(b2, sql.NewMemoryRow("foo"))
32+
c.Update(b2, nil)
33+
c.Update(b2, sql.NewRow("foo"))
3434
c.Merge(b, b2)
3535
assert.Equal(int32(6), c.Eval(b))
3636
}
@@ -42,15 +42,15 @@ func TestCount_Eval_Star(t *testing.T) {
4242
b := c.NewBuffer()
4343
assert.Equal(int32(0), c.Eval(b))
4444

45-
c.Update(b, sql.NewMemoryRow())
46-
c.Update(b, sql.NewMemoryRow("foo"))
47-
c.Update(b, sql.NewMemoryRow(1))
48-
c.Update(b, sql.NewMemoryRow(1, 2, 3))
45+
c.Update(b, nil)
46+
c.Update(b, sql.NewRow("foo"))
47+
c.Update(b, sql.NewRow(1))
48+
c.Update(b, sql.NewRow(1, 2, 3))
4949
assert.Equal(int32(4), c.Eval(b))
5050

5151
b2 := c.NewBuffer()
52-
c.Update(b2, sql.NewMemoryRow())
53-
c.Update(b2, sql.NewMemoryRow("foo"))
52+
c.Update(b2, sql.NewRow())
53+
c.Update(b2, sql.NewRow("foo"))
5454
c.Merge(b, b2)
5555
assert.Equal(int32(6), c.Eval(b))
5656
}
@@ -62,10 +62,10 @@ func TestCount_Eval_String(t *testing.T) {
6262
b := c.NewBuffer()
6363
assert.Equal(int32(0), c.Eval(b))
6464

65-
c.Update(b, sql.NewMemoryRow("foo"))
65+
c.Update(b, sql.NewRow("foo"))
6666
assert.Equal(int32(1), c.Eval(b))
6767

68-
c.Update(b, sql.NewMemoryRow(nil))
68+
c.Update(b, sql.NewRow(nil))
6969
assert.Equal(int32(1), c.Eval(b))
7070
}
7171

@@ -83,14 +83,14 @@ func TestFirst_Eval(t *testing.T) {
8383
b := c.NewBuffer()
8484
assert.Nil(c.Eval(b))
8585

86-
c.Update(b, sql.NewMemoryRow(int32(1)))
86+
c.Update(b, sql.NewRow(int32(1)))
8787
assert.Equal(int32(1), c.Eval(b))
8888

89-
c.Update(b, sql.NewMemoryRow(int32(2)))
89+
c.Update(b, sql.NewRow(int32(2)))
9090
assert.Equal(int32(1), c.Eval(b))
9191

9292
b2 := c.NewBuffer()
93-
c.Update(b2, sql.NewMemoryRow(int32(2)))
93+
c.Update(b2, sql.NewRow(int32(2)))
9494
c.Merge(b, b2)
9595
assert.Equal(int32(1), c.Eval(b))
9696
}

0 commit comments

Comments
 (0)