@@ -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-
4437func (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
225186type 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
235195func (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-
286236func (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
0 commit comments