@@ -6,11 +6,8 @@ import (
6
6
"database/sql"
7
7
"database/sql/driver"
8
8
"fmt"
9
- "math/rand"
10
- "os"
11
9
"strconv"
12
10
"strings"
13
- "time"
14
11
15
12
"github.com/chdb-io/chdb-go/chdb"
16
13
"github.com/chdb-io/chdb-go/chdbstable"
@@ -37,10 +34,6 @@ const (
37
34
defaultBufferSize = 512
38
35
)
39
36
40
- const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
41
-
42
- var seededRand * rand.Rand = rand .New (rand .NewSource (time .Now ().UnixNano ()))
43
-
44
37
func (d DriverType ) String () string {
45
38
switch d {
46
39
case ARROW :
@@ -53,51 +46,20 @@ func (d DriverType) String() string {
53
46
return ""
54
47
}
55
48
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 ) {
57
50
switch d {
58
51
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
78
55
}
79
-
80
- return & arrowRows {localResult : result , reader : reader , fd : fd }, nil
56
+ return & arrowRows {localResult : result , reader : reader }, nil
81
57
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 ))
96
59
return & parquetRows {
97
60
localResult : result , reader : reader ,
98
61
bufferSize : bufSize , needNewBuffer : true ,
99
62
useUnsafeStringReader : useUnsafe ,
100
- fd : fd ,
101
63
}, nil
102
64
}
103
65
return nil , fmt .Errorf ("Unsupported driver type" )
@@ -135,8 +97,7 @@ func (c *connector) Connect(ctx context.Context) (driver.Conn, error) {
135
97
cc := & conn {
136
98
udfPath : c .udfPath , session : c .session ,
137
99
driverType : c .driverType , bufferSize : c .bufferSize ,
138
- useUnsafe : c .useUnsafe ,
139
- useFileInsteadOfMemory : true ,
100
+ useUnsafe : c .useUnsafe ,
140
101
}
141
102
cc .SetupQueryFun ()
142
103
return cc , nil
@@ -223,13 +184,12 @@ func (d Driver) OpenConnector(name string) (driver.Connector, error) {
223
184
}
224
185
225
186
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
233
193
}
234
194
235
195
func (c * conn ) Close () error {
@@ -270,31 +230,14 @@ func (c *conn) compileArguments(query string, args []driver.NamedValue) (string,
270
230
} else {
271
231
compiledQuery = query
272
232
}
273
-
274
233
return compiledQuery , nil
275
234
}
276
235
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
-
286
236
func (c * conn ) QueryContext (ctx context.Context , query string , args []driver.NamedValue ) (driver.Rows , error ) {
287
237
compiledQuery , err := c .compileArguments (query , args )
288
238
if err != nil {
289
239
return nil , err
290
240
}
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
- }
298
241
result , err := c .QueryFun (compiledQuery , c .driverType .String (), c .udfPath )
299
242
if err != nil {
300
243
return nil , err
@@ -304,7 +247,7 @@ func (c *conn) QueryContext(ctx context.Context, query string, args []driver.Nam
304
247
if buf == nil {
305
248
return nil , fmt .Errorf ("result is nil" )
306
249
}
307
- return c .driverType .PrepareRows (result , buf , c .bufferSize , c .useUnsafe , filePath )
250
+ return c .driverType .PrepareRows (result , buf , c .bufferSize , c .useUnsafe )
308
251
309
252
}
310
253
0 commit comments