func()

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
}