Skip to content

Commit

Permalink
Merge branch 'main' into alisha/neos-1554-cli-sync
Browse files Browse the repository at this point in the history
  • Loading branch information
alishakawaguchi committed Oct 24, 2024
2 parents 0beadd9 + 94dfbe0 commit 4c9e559
Show file tree
Hide file tree
Showing 13 changed files with 670 additions and 603 deletions.
96 changes: 0 additions & 96 deletions backend/pkg/dbconnect-config/dbconnect-config.go

This file was deleted.

108 changes: 0 additions & 108 deletions backend/pkg/dbconnect-config/dbconnect-config_test.go

This file was deleted.

6 changes: 6 additions & 0 deletions backend/pkg/dbconnect-config/interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package dbconnectconfig

type DbConnectConfig interface {
String() string
GetUser() string
}
60 changes: 23 additions & 37 deletions backend/pkg/dbconnect-config/mssql.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,62 +4,48 @@ import (
"errors"
"fmt"
"net/url"
"strconv"
"strings"

mgmtv1alpha1 "github.com/nucleuscloud/neosync/backend/gen/go/protos/mgmt/v1alpha1"
nucleuserrors "github.com/nucleuscloud/neosync/backend/internal/errors"
"github.com/nucleuscloud/neosync/worker/pkg/workflows/datasync/activities/shared"
)

func NewFromMssqlConnection(config *mgmtv1alpha1.ConnectionConfig_MssqlConfig, connectionTimeout *uint32) (*GeneralDbConnectConfig, error) {
type mssqlConnectConfig struct {
url string
user string
}

var _ DbConnectConfig = (*mssqlConnectConfig)(nil)

func (m *mssqlConnectConfig) String() string {
return m.url
}
func (m *mssqlConnectConfig) GetUser() string {
return m.user
}

func NewFromMssqlConnection(
config *mgmtv1alpha1.ConnectionConfig_MssqlConfig,
connectionTimeout *uint32,
) (DbConnectConfig, error) {
switch cc := config.MssqlConfig.ConnectionConfig.(type) {
case *mgmtv1alpha1.MssqlConnectionConfig_Url:
u, err := url.Parse(cc.Url)
uriconfig, err := url.Parse(cc.Url)
if err != nil {
var urlErr *url.Error
if errors.As(err, &urlErr) {
return nil, fmt.Errorf("unable to parse mssql url [%s]: %w", urlErr.Op, urlErr.Err)
}
return nil, fmt.Errorf("unable to parse mssql url: %w", err)
}
user := u.User.Username()
pass, _ := u.User.Password()

host, portStr := u.Hostname(), u.Port()

query := u.Query()

var port *int32
if portStr != "" {
parsedPort, err := strconv.ParseInt(portStr, 10, 32)
if err != nil {
return nil, fmt.Errorf("invalid port when processing mssql connection url: %w", err)
}
port = shared.Ptr(int32(parsedPort))
}

var instance *string
if u.Path != "" {
trimmed := strings.TrimPrefix(u.Path, "/")
if trimmed != "" {
instance = &trimmed
}
}
query := uriconfig.Query()

if connectionTimeout != nil {
if !query.Has("connection timeout") && connectionTimeout != nil {
query.Add("connection timeout", fmt.Sprintf("%d", *connectionTimeout))
}
uriconfig.RawQuery = query.Encode()

return &GeneralDbConnectConfig{
driver: mssqlDriver,
host: host,
port: port,
database: instance,
user: user,
pass: pass,
queryParams: query,
}, nil
return &mssqlConnectConfig{url: uriconfig.String(), user: getUserFromInfo(uriconfig.User)}, nil
default:
return nil, nucleuserrors.NewBadRequest(fmt.Sprintf("must provide valid mssql connection: %T", cc))
}
Expand Down
Loading

0 comments on commit 4c9e559

Please sign in to comment.