Skip to content

Commit 02f64ea

Browse files
committed
Revert "implement file results so the buffer for the memory does not allocate other memory"
This reverts commit 20c994a.
1 parent 20c994a commit 02f64ea

File tree

3 files changed

+14
-84
lines changed

3 files changed

+14
-84
lines changed

chdb/driver/arrow.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package chdbdriver
33
import (
44
"database/sql/driver"
55
"fmt"
6-
"os"
76
"reflect"
87
"time"
98

@@ -20,7 +19,6 @@ type arrowRows struct {
2019
reader *ipc.FileReader
2120
curRecord arrow.Record
2221
curRow int64
23-
fd *os.File
2422
}
2523

2624
func (r *arrowRows) Columns() (out []string) {
@@ -39,10 +37,6 @@ func (r *arrowRows) Close() error {
3937
_ = r.reader.Close()
4038
r.reader = nil
4139
r.localResult = nil
42-
if r.fd != nil {
43-
_ = r.fd.Close()
44-
_ = os.Remove(r.fd.Name())
45-
}
4640
return nil
4741
}
4842

chdb/driver/driver.go

Lines changed: 14 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,8 @@ import (
66
"database/sql"
77
"database/sql/driver"
88
"fmt"
9-
"math/rand"
10-
"os"
119
"strconv"
1210
"strings"
13-
"time"
1411

1512
"github.com/chdb-io/chdb-go/chdb"
1613
"github.com/chdb-io/chdb-go/chdbstable"
@@ -37,10 +34,6 @@ const (
3734
defaultBufferSize = 512
3835
)
3936

40-
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
41-
42-
var seededRand *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))
43-
4437
func (d DriverType) String() string {
4538
switch d {
4639
case ARROW:
@@ -53,51 +46,20 @@ func (d DriverType) String() string {
5346
return ""
5447
}
5548

56-
func (d DriverType) PrepareRows(result *chdbstable.LocalResult, buf []byte, bufSize int, useUnsafe bool, filePath string) (driver.Rows, error) {
49+
func (d DriverType) PrepareRows(result *chdbstable.LocalResult, buf []byte, bufSize int, useUnsafe bool) (driver.Rows, error) {
5750
switch d {
5851
case ARROW:
59-
var reader *ipc.FileReader
60-
var err error
61-
var fd *os.File
62-
if filePath != "" {
63-
fd, err = os.Open(filePath)
64-
if err != nil {
65-
return nil, err
66-
}
67-
68-
reader, err = ipc.NewFileReader(fd)
69-
if err != nil {
70-
return nil, err
71-
}
72-
73-
} else {
74-
reader, err = ipc.NewFileReader(bytes.NewReader(buf))
75-
if err != nil {
76-
return nil, err
77-
}
52+
reader, err := ipc.NewFileReader(bytes.NewReader(buf))
53+
if err != nil {
54+
return nil, err
7855
}
79-
80-
return &arrowRows{localResult: result, reader: reader, fd: fd}, nil
56+
return &arrowRows{localResult: result, reader: reader}, nil
8157
case PARQUET:
82-
var reader *parquet.GenericReader[any]
83-
var fd *os.File
84-
if filePath != "" {
85-
fl, err := os.Open(filePath)
86-
if err != nil {
87-
return nil, err
88-
}
89-
fd = fl
90-
91-
reader = parquet.NewGenericReader[any](fl)
92-
} else {
93-
reader = parquet.NewGenericReader[any](bytes.NewReader(buf))
94-
}
95-
58+
reader := parquet.NewGenericReader[any](bytes.NewReader(buf))
9659
return &parquetRows{
9760
localResult: result, reader: reader,
9861
bufferSize: bufSize, needNewBuffer: true,
9962
useUnsafeStringReader: useUnsafe,
100-
fd: fd,
10163
}, nil
10264
}
10365
return nil, fmt.Errorf("Unsupported driver type")
@@ -135,8 +97,7 @@ func (c *connector) Connect(ctx context.Context) (driver.Conn, error) {
13597
cc := &conn{
13698
udfPath: c.udfPath, session: c.session,
13799
driverType: c.driverType, bufferSize: c.bufferSize,
138-
useUnsafe: c.useUnsafe,
139-
useFileInsteadOfMemory: true,
100+
useUnsafe: c.useUnsafe,
140101
}
141102
cc.SetupQueryFun()
142103
return cc, nil
@@ -223,13 +184,12 @@ func (d Driver) OpenConnector(name string) (driver.Connector, error) {
223184
}
224185

225186
type conn struct {
226-
udfPath string
227-
driverType DriverType
228-
bufferSize int
229-
useUnsafe bool
230-
useFileInsteadOfMemory bool
231-
session *chdb.Session
232-
QueryFun queryHandle
187+
udfPath string
188+
driverType DriverType
189+
bufferSize int
190+
useUnsafe bool
191+
session *chdb.Session
192+
QueryFun queryHandle
233193
}
234194

235195
func (c *conn) Close() error {
@@ -270,31 +230,14 @@ func (c *conn) compileArguments(query string, args []driver.NamedValue) (string,
270230
} else {
271231
compiledQuery = query
272232
}
273-
274233
return compiledQuery, nil
275234
}
276235

277-
func (c *conn) createRandomFilePath(size int) string {
278-
b := make([]byte, size)
279-
for i := range b {
280-
b[i] = charset[seededRand.Intn(len(charset))]
281-
}
282-
return string(b)
283-
284-
}
285-
286236
func (c *conn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) {
287237
compiledQuery, err := c.compileArguments(query, args)
288238
if err != nil {
289239
return nil, err
290240
}
291-
var filePath string
292-
if c.useFileInsteadOfMemory {
293-
compiledQuery = strings.TrimSuffix(compiledQuery, ";")
294-
compiledQuery += " INTO OUTFILE "
295-
filePath = fmt.Sprintf("/tmp/%s.%s", c.createRandomFilePath(16), strings.ToLower(c.driverType.String()))
296-
compiledQuery += fmt.Sprintf("'%s'", filePath)
297-
}
298241
result, err := c.QueryFun(compiledQuery, c.driverType.String(), c.udfPath)
299242
if err != nil {
300243
return nil, err
@@ -304,7 +247,7 @@ func (c *conn) QueryContext(ctx context.Context, query string, args []driver.Nam
304247
if buf == nil {
305248
return nil, fmt.Errorf("result is nil")
306249
}
307-
return c.driverType.PrepareRows(result, buf, c.bufferSize, c.useUnsafe, filePath)
250+
return c.driverType.PrepareRows(result, buf, c.bufferSize, c.useUnsafe)
308251

309252
}
310253

chdb/driver/parquet.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"database/sql/driver"
55
"fmt"
66
"io"
7-
"os"
87
"time"
98
"unsafe"
109

@@ -34,7 +33,6 @@ type parquetRows struct {
3433
curRow int64 // row counter
3534
needNewBuffer bool
3635
useUnsafeStringReader bool
37-
fd *os.File
3836
}
3937

4038
func (r *parquetRows) Columns() (out []string) {
@@ -55,11 +53,6 @@ func (r *parquetRows) Close() error {
5553
r.reader = nil
5654
r.localResult = nil
5755
r.buffer = nil
58-
if r.fd != nil {
59-
r.fd.Close()
60-
os.Remove(r.fd.Name())
61-
r.fd = nil
62-
}
6356
return nil
6457
}
6558

0 commit comments

Comments
 (0)