@@ -41,11 +41,11 @@ func init() {
4141}
4242
4343type config struct {
44- authToken * string
45- readYourWrites * bool
46- encryptionKey * string
44+ authToken * string
45+ readYourWrites * bool
46+ encryptionKey * string
4747 remoteEncryptionKey * string
48- syncInterval * time.Duration
48+ syncInterval * time.Duration
4949}
5050
5151type Option interface {
@@ -217,8 +217,9 @@ func (d driver) OpenConnector(dbAddress string) (sqldriver.Connector, error) {
217217 fallthrough
218218 case "libsql" :
219219 authToken := u .Query ().Get ("authToken" )
220+ remoteEncryptionKey := u .Query ().Get ("remoteEncryptionKey" )
220221 u .RawQuery = ""
221- return openRemoteConnector (u .String (), authToken )
222+ return openRemoteConnector (u .String (), authToken , remoteEncryptionKey )
222223 }
223224 return nil , fmt .Errorf ("unsupported URL scheme: %s\n This driver supports only URLs that start with libsql://, file:, https:// or http://" , u .Scheme )
224225}
@@ -242,8 +243,8 @@ func openLocalConnector(dbPath string) (*Connector, error) {
242243 return & Connector {nativeDbPtr : nativeDbPtr }, nil
243244}
244245
245- func openRemoteConnector (primaryUrl , authToken string ) (* Connector , error ) {
246- nativeDbPtr , err := libsqlOpenRemote (primaryUrl , authToken )
246+ func openRemoteConnector (primaryUrl , authToken , remoteEncryptionKey string ) (* Connector , error ) {
247+ nativeDbPtr , err := libsqlOpenRemote (primaryUrl , authToken , remoteEncryptionKey )
247248 if err != nil {
248249 return nil , err
249250 }
@@ -346,15 +347,26 @@ func libsqlOpenLocal(dataSourceName string) (C.libsql_database_t, error) {
346347 return db , nil
347348}
348349
349- func libsqlOpenRemote (url , authToken string ) (C.libsql_database_t , error ) {
350+ func libsqlOpenRemote (url , authToken , remoteEncryptionKey string ) (C.libsql_database_t , error ) {
350351 connectionString := C .CString (url )
351352 defer C .free (unsafe .Pointer (connectionString ))
352353 authTokenNativeString := C .CString (authToken )
353354 defer C .free (unsafe .Pointer (authTokenNativeString ))
354355
356+ var remoteEncryptionKeyNativeString * C.char
357+ if remoteEncryptionKey != "" {
358+ remoteEncryptionKeyNativeString = C .CString (remoteEncryptionKey )
359+ defer C .free (unsafe .Pointer (remoteEncryptionKeyNativeString ))
360+ }
361+
355362 var db C.libsql_database_t
356363 var errMsg * C.char
357- statusCode := C .libsql_open_remote (connectionString , authTokenNativeString , & db , & errMsg )
364+ var statusCode C.int
365+ if remoteEncryptionKey == "" {
366+ statusCode = C .libsql_open_remote (connectionString , authTokenNativeString , & db , & errMsg )
367+ } else {
368+ statusCode = C .libsql_open_remote_with_remote_encryption (connectionString , authTokenNativeString , remoteEncryptionKeyNativeString , & db , & errMsg )
369+ }
358370 if statusCode != 0 {
359371 return nil , libsqlError (fmt .Sprint ("failed to open remote database " , url ), statusCode , errMsg )
360372 }
0 commit comments