in driver.go [67:123]
func (c *Connector) Connect(ctx context.Context) (driver.Conn, error) {
config, err := ParseDSN(c.dsn)
if err != nil {
return nil, fmt.Errorf("unable to open connection: %w", err)
}
// propagate user and password to connector info so that it's available in JDBC context for example
if config.avaticaUser != "" {
c.Info["user"] = config.avaticaUser
}
if config.avaticaPassword != "" {
c.Info["password"] = config.avaticaPassword
}
connectionId, err := uuid.NewRandom()
if err != nil {
return nil, fmt.Errorf("error generating connection id: %w", err)
}
httpClient, err := NewHTTPClient(config.endpoint, c.Client, config)
if err != nil {
return nil, fmt.Errorf("unable to create HTTP client: %w", err)
}
conn := &conn{
connectionId: connectionId.String(),
httpClient: httpClient,
config: config,
connectorInfo: c.Info,
}
err = registerConn(conn)
if err != nil {
return nil, err
}
response, err := conn.httpClient.post(ctx, message.DatabasePropertyRequest_builder{
ConnectionId: conn.connectionId,
}.Build())
if err != nil {
return nil, conn.avaticaErrorToResponseErrorOrError(err)
}
databasePropertyResponse := response.(*message.DatabasePropertyResponse)
adapter := ""
for _, property := range databasePropertyResponse.GetProps() {
if property.GetKey().GetName() == "GET_DRIVER_NAME" {
adapter = property.GetValue().GetStringValue()
}
}
conn.adapter = getAdapter(adapter)
return conn, nil
}