Skip to content

Commit 72697c6

Browse files
Richard BaahRichard Baah
authored andcommitted
resolve merge conflict
2 parents 8ee0e82 + e5ea405 commit 72697c6

File tree

9 files changed

+2268
-14
lines changed

9 files changed

+2268
-14
lines changed

src/Backend/opti-sql-go/coverage.out

Lines changed: 0 additions & 2 deletions
This file was deleted.

src/Backend/opti-sql-go/go.mod

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
11
module opti-sql-go
22

33
go 1.24.0
4+
5+
require github.com/apache/arrow/go/v17 v17.0.0
6+
7+
require (
8+
github.com/goccy/go-json v0.10.3 // indirect
9+
github.com/google/flatbuffers v24.3.25+incompatible // indirect
10+
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
11+
github.com/zeebo/xxh3 v1.0.2 // indirect
12+
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect
13+
golang.org/x/mod v0.18.0 // indirect
14+
golang.org/x/sync v0.7.0 // indirect
15+
golang.org/x/sys v0.21.0 // indirect
16+
golang.org/x/tools v0.22.0 // indirect
17+
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
18+
)

src/Backend/opti-sql-go/go.sum

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
github.com/apache/arrow/go/v17 v17.0.0 h1:RRR2bdqKcdbss9Gxy2NS/hK8i4LDMh23L6BbkN5+F54=
2+
github.com/apache/arrow/go/v17 v17.0.0/go.mod h1:jR7QHkODl15PfYyjM2nU+yTLScZ/qfj7OSUZmJ8putc=
3+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
4+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5+
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
6+
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
7+
github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI=
8+
github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
9+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
10+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
11+
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
12+
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
13+
github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
14+
github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
15+
github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
16+
github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
17+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
18+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
19+
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
20+
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
21+
github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
22+
github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
23+
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
24+
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
25+
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ=
26+
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
27+
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
28+
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
29+
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
30+
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
31+
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
32+
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
33+
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
34+
golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
35+
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
36+
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
37+
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
38+
gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
39+
gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
40+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
41+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

src/Backend/opti-sql-go/main.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
package main
22

3-
import "fmt"
4-
53
func main() {
6-
fmt.Println("Hello World")
74
}
Lines changed: 275 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,277 @@
11
package operators
22

3-
// This is what everything is going to be working off of
3+
import (
4+
"fmt"
5+
"strings"
6+
7+
"github.com/apache/arrow/go/v17/arrow"
8+
"github.com/apache/arrow/go/v17/arrow/array"
9+
"github.com/apache/arrow/go/v17/arrow/memory"
10+
)
11+
12+
var (
13+
ErrInvalidSchema = func(info string) error {
14+
return fmt.Errorf("invalid schema was provided. context: %s", info)
15+
}
16+
)
17+
18+
type RecordBatch struct {
19+
Schema *arrow.Schema
20+
Columns []arrow.Array
21+
}
22+
23+
type SchemaBuilder struct {
24+
fields []arrow.Field
25+
}
26+
27+
type RecordBatchBuilder struct {
28+
SchemaBuilder *SchemaBuilder
29+
}
30+
31+
func NewRecordBatchBuilder() *RecordBatchBuilder {
32+
return &RecordBatchBuilder{
33+
SchemaBuilder: &SchemaBuilder{
34+
fields: make([]arrow.Field, 0, 10),
35+
},
36+
}
37+
}
38+
39+
func (sb *SchemaBuilder) WithField(name string, dtype arrow.DataType, nullable bool) *SchemaBuilder {
40+
sb.fields = append(sb.fields, arrow.Field{
41+
Name: name,
42+
Type: dtype,
43+
Nullable: nullable,
44+
})
45+
return sb
46+
}
47+
func (sb *SchemaBuilder) WithoutField(names ...string) *SchemaBuilder {
48+
nameSet := make(map[string]struct{}, len(names))
49+
for _, n := range names {
50+
nameSet[n] = struct{}{}
51+
}
52+
53+
newFields := make([]arrow.Field, 0, len(sb.fields))
54+
for _, field := range sb.fields {
55+
_, found := nameSet[field.Name]
56+
if !found {
57+
newFields = append(newFields, field)
58+
}
59+
}
60+
sb.fields = newFields
61+
return sb
62+
63+
}
64+
65+
func (sb *SchemaBuilder) Build() *arrow.Schema {
66+
return arrow.NewSchema(sb.fields, nil)
67+
}
68+
func (rbb *RecordBatchBuilder) Schema() *arrow.Schema {
69+
return arrow.NewSchema(rbb.SchemaBuilder.fields, nil)
70+
}
71+
72+
// schema is always right in case of type mismatches
73+
func (rbb *RecordBatchBuilder) validate(schema *arrow.Schema, columns []arrow.Array) error {
74+
if len(schema.Fields()) != len(columns) {
75+
return ErrInvalidSchema("schema fields and column count do not match")
76+
}
77+
// make sure that the array data types line up with whats expected of the schema
78+
// Ensure array data types align with schema expectations.
79+
var errors []string
80+
for i := 0; i < len(columns); i++ {
81+
field := schema.Field(i)
82+
colType := columns[i].DataType()
83+
84+
if !arrow.TypeEqual(colType, field.Type) {
85+
errors = append(errors,
86+
fmt.Sprintf("Type mismatch at position %d: column '%s' has type '%s', but schema expects '%s'.",
87+
i, field.Name, colType, field.Type))
88+
}
89+
}
90+
if len(errors) > 0 {
91+
return ErrInvalidSchema(strings.Join(errors, " "))
92+
}
93+
return nil
94+
}
95+
func (rbb *RecordBatchBuilder) NewRecordBatch(schema *arrow.Schema, columns []arrow.Array) (*RecordBatch, error) {
96+
if err := rbb.validate(schema, columns); err != nil {
97+
return nil, err
98+
}
99+
return &RecordBatch{
100+
Schema: schema,
101+
Columns: columns,
102+
}, nil
103+
}
104+
func (rb *RecordBatch) DeepEqual(other *RecordBatch) bool {
105+
if !rb.Schema.Equal(other.Schema) {
106+
return false
107+
}
108+
if len(rb.Columns) != len(other.Columns) {
109+
return false
110+
}
111+
for i := 0; i < len(rb.Columns); i++ {
112+
if !array.Equal(rb.Columns[i], other.Columns[i]) {
113+
return false
114+
}
115+
}
116+
return true
117+
}
118+
func (rbb *RecordBatchBuilder) GenIntArray(values ...int) arrow.Array {
119+
mem := memory.NewGoAllocator()
120+
builder := array.NewInt32Builder(mem)
121+
defer builder.Release()
122+
for _, v := range values {
123+
builder.Append(int32(v))
124+
}
125+
return builder.NewArray()
126+
}
127+
128+
func (rbb *RecordBatchBuilder) GenFloatArray(values ...float64) arrow.Array {
129+
mem := memory.NewGoAllocator()
130+
builder := array.NewFloat64Builder(mem)
131+
defer builder.Release()
132+
for _, v := range values {
133+
builder.Append(v)
134+
}
135+
return builder.NewArray()
136+
}
137+
138+
func (rbb *RecordBatchBuilder) GenStringArray(values ...string) arrow.Array {
139+
mem := memory.NewGoAllocator()
140+
builder := array.NewStringBuilder(mem)
141+
defer builder.Release()
142+
for _, v := range values {
143+
builder.Append(v)
144+
}
145+
return builder.NewArray()
146+
}
147+
148+
func (rbb *RecordBatchBuilder) GenBoolArray(values ...bool) arrow.Array {
149+
mem := memory.NewGoAllocator()
150+
builder := array.NewBooleanBuilder(mem)
151+
defer builder.Release()
152+
for _, v := range values {
153+
builder.Append(v)
154+
}
155+
return builder.NewArray()
156+
}
157+
158+
// GenInt8Array generates an Int8 array
159+
func (rbb *RecordBatchBuilder) GenInt8Array(values ...int8) arrow.Array {
160+
mem := memory.NewGoAllocator()
161+
builder := array.NewInt8Builder(mem)
162+
defer builder.Release()
163+
for _, v := range values {
164+
builder.Append(v)
165+
}
166+
return builder.NewArray()
167+
}
168+
169+
// GenInt16Array generates an Int16 array
170+
func (rbb *RecordBatchBuilder) GenInt16Array(values ...int16) arrow.Array {
171+
mem := memory.NewGoAllocator()
172+
builder := array.NewInt16Builder(mem)
173+
defer builder.Release()
174+
for _, v := range values {
175+
builder.Append(v)
176+
}
177+
return builder.NewArray()
178+
}
179+
180+
// GenInt64Array generates an Int64 array
181+
func (rbb *RecordBatchBuilder) GenInt64Array(values ...int64) arrow.Array {
182+
mem := memory.NewGoAllocator()
183+
builder := array.NewInt64Builder(mem)
184+
defer builder.Release()
185+
for _, v := range values {
186+
builder.Append(v)
187+
}
188+
return builder.NewArray()
189+
}
190+
191+
// GenUint8Array generates a Uint8 array
192+
func (rbb *RecordBatchBuilder) GenUint8Array(values ...uint8) arrow.Array {
193+
mem := memory.NewGoAllocator()
194+
builder := array.NewUint8Builder(mem)
195+
defer builder.Release()
196+
for _, v := range values {
197+
builder.Append(v)
198+
}
199+
return builder.NewArray()
200+
}
201+
202+
// GenUint16Array generates a Uint16 array
203+
func (rbb *RecordBatchBuilder) GenUint16Array(values ...uint16) arrow.Array {
204+
mem := memory.NewGoAllocator()
205+
builder := array.NewUint16Builder(mem)
206+
defer builder.Release()
207+
for _, v := range values {
208+
builder.Append(v)
209+
}
210+
return builder.NewArray()
211+
}
212+
213+
// GenUint32Array generates a Uint32 array
214+
func (rbb *RecordBatchBuilder) GenUint32Array(values ...uint32) arrow.Array {
215+
mem := memory.NewGoAllocator()
216+
builder := array.NewUint32Builder(mem)
217+
defer builder.Release()
218+
for _, v := range values {
219+
builder.Append(v)
220+
}
221+
return builder.NewArray()
222+
}
223+
224+
// GenUint64Array generates a Uint64 array
225+
func (rbb *RecordBatchBuilder) GenUint64Array(values ...uint64) arrow.Array {
226+
mem := memory.NewGoAllocator()
227+
builder := array.NewUint64Builder(mem)
228+
defer builder.Release()
229+
for _, v := range values {
230+
builder.Append(v)
231+
}
232+
return builder.NewArray()
233+
}
234+
235+
// GenFloat32Array generates a Float32 array
236+
func (rbb *RecordBatchBuilder) GenFloat32Array(values ...float32) arrow.Array {
237+
mem := memory.NewGoAllocator()
238+
builder := array.NewFloat32Builder(mem)
239+
defer builder.Release()
240+
for _, v := range values {
241+
builder.Append(v)
242+
}
243+
return builder.NewArray()
244+
}
245+
246+
// GenBinaryArray generates a Binary array
247+
func (rbb *RecordBatchBuilder) GenBinaryArray(values ...[]byte) arrow.Array {
248+
mem := memory.NewGoAllocator()
249+
builder := array.NewBinaryBuilder(mem, arrow.BinaryTypes.Binary)
250+
defer builder.Release()
251+
for _, v := range values {
252+
builder.Append(v)
253+
}
254+
return builder.NewArray()
255+
}
256+
257+
// GenLargeStringArray generates a LargeString array
258+
func (rbb *RecordBatchBuilder) GenLargeStringArray(values ...string) arrow.Array {
259+
mem := memory.NewGoAllocator()
260+
builder := array.NewLargeStringBuilder(mem)
261+
defer builder.Release()
262+
for _, v := range values {
263+
builder.Append(v)
264+
}
265+
return builder.NewArray()
266+
}
267+
268+
// GenLargeBinaryArray generates a LargeBinary array
269+
func (rbb *RecordBatchBuilder) GenLargeBinaryArray(values ...[]byte) arrow.Array {
270+
mem := memory.NewGoAllocator()
271+
builder := array.NewBinaryBuilder(mem, arrow.BinaryTypes.LargeBinary)
272+
defer builder.Release()
273+
for _, v := range values {
274+
builder.Append(v)
275+
}
276+
return builder.NewArray()
277+
}

0 commit comments

Comments
 (0)