MCPcopy Create free account
hub / github.com/cloudquery/cloudquery / New

Function New

plugins/destination/duckdb/client/client.go:36–73  ·  view source on GitHub ↗
(ctx context.Context, logger zerolog.Logger, spec []byte, _ plugin.NewClientOptions)

Source from the content-addressed store, hash-verified

34var _ plugin.Client = (*Client)(nil)
35
36func New(ctx context.Context, logger zerolog.Logger, spec []byte, _ plugin.NewClientOptions) (plugin.Client, error) {
37 var err error
38 c := &Client{
39 logger: logger.With().Str("module", "duckdb-dest").Logger(),
40 }
41 if err := json.Unmarshal(spec, &c.spec); err != nil {
42 return nil, fmt.Errorf("failed to unmarshal spec: %w", err)
43 }
44 c.spec.SetDefaults()
45 c.writer, err = batchwriter.New(c, batchwriter.WithBatchSize(c.spec.BatchSize), batchwriter.WithBatchSizeBytes(c.spec.BatchSizeBytes), batchwriter.WithLogger(c.logger))
46 if err != nil {
47 return nil, fmt.Errorf("failed to create batch writer: %w", err)
48 }
49
50 c.connector, err = duckdb.NewConnector(amendConnectionString(c.spec.ConnectionString), nil)
51 if err != nil {
52 return nil, err
53 }
54 c.db = sql.OpenDB(c.connector)
55
56 err = c.exec(ctx, "INSTALL 'json'; LOAD 'json';")
57 if err != nil {
58 return nil, err
59 }
60 err = c.exec(ctx, "INSTALL 'parquet'; LOAD 'parquet';")
61 if err != nil {
62 return nil, err
63 }
64
65 // Unregister the built-in UUID type to avoid conflicts with our own UUID type
66 if _, ok := arrow.GetExtensionType(extensions.NewUUIDType().ExtensionName()).(*extensions.UUIDType); ok {
67 if err := arrow.UnregisterExtensionType(extensions.NewUUIDType().ExtensionName()); err != nil {
68 return nil, err
69 }
70 }
71
72 return c, nil
73}
74
75func (c *Client) Close(ctx context.Context) error {
76 if c.db == nil {

Callers

nothing calls this directly

Calls 5

execMethod · 0.95
amendConnectionStringFunction · 0.85
ErrorfMethod · 0.80
LoggerMethod · 0.45
SetDefaultsMethod · 0.45

Tested by

no test coverage detected