# gosnowflake **Repository Path**: mirrors_cockroachdb/gosnowflake ## Basic Information - **Project Name**: gosnowflake - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-11 - **Last Updated**: 2024-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Support For official support and urgent, production-impacting issues, please [contact Snowflake Support](https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge). # Go Snowflake Driver Coverage This topic provides instructions for installing, running, and modifying the Go Snowflake Driver. The driver supports Go's [database/sql](https://golang.org/pkg/database/sql/) package. # Prerequisites The following software packages are required to use the Go Snowflake Driver. ## Go The latest driver requires the [Go language](https://golang.org/) 1.20 or higher. The supported operating systems are Linux, Mac OS, and Windows, but you may run the driver on other platforms if the Go language works correctly on those platforms. # Installation If you don't have a project initialized, set it up. ```sh go mod init example.com/snowflake ``` Get Gosnowflake source code, if not installed. ```sh go get -u github.com/snowflakedb/gosnowflake ``` # Docs For detailed documentation and basic usage examples, please see the documentation at [godoc.org](https://godoc.org/github.com/snowflakedb/gosnowflake/). # Sample Programs Snowflake provides a set of sample programs to test with. Set the environment variable ``$GOPATH`` to the top directory of your workspace, e.g., ``~/go`` and make certain to include ``$GOPATH/bin`` in the environment variable ``$PATH``. Run the ``make`` command to build all sample programs. ``` make install ``` In the following example, the program ``select1.go`` is built and installed in ``$GOPATH/bin`` and can be run from the command line: ``` SNOWFLAKE_TEST_ACCOUNT= \ SNOWFLAKE_TEST_USER= \ SNOWFLAKE_TEST_PASSWORD= \ select1 Congrats! You have successfully run SELECT 1 with Snowflake DB! ``` # Development The developer notes are hosted with the source code on [GitHub](https://github.com/snowflakedb/gosnowflake). ## Testing Code Set the Snowflake connection info in ``parameters.json``: ``` { "testconnection": { "SNOWFLAKE_TEST_USER": "", "SNOWFLAKE_TEST_PASSWORD": "", "SNOWFLAKE_TEST_ACCOUNT": "", "SNOWFLAKE_TEST_WAREHOUSE": "", "SNOWFLAKE_TEST_DATABASE": "", "SNOWFLAKE_TEST_SCHEMA": "", "SNOWFLAKE_TEST_ROLE": "" } } ``` Install [jq](https://stedolan.github.io/jq) so that the parameters can get parsed correctly, and run ``make test`` in your Go development environment: ``` make test ``` ## customizing Logging Tags If you would like to ensure that certain tags are always present in the logs, `RegisterClientLogContextHook` can be used in your init function. See example below. ``` import "github.com/snowflakedb/gosnowflake" func init() { // each time the logger is used, the logs will contain a REQUEST_ID field with requestID the value extracted // from the context gosnowflake.RegisterClientLogContextHook("REQUEST_ID", func(ctx context.Context) interface{} { return requestIdFromContext(ctx) }) } ``` ## Setting Log Level If you want to change the log level, `SetLogLevel` can be used in your init function like this: ``` import "github.com/snowflakedb/gosnowflake" func init() { // The following line changes the log level to debug _ = gosnowflake.GetLogger().SetLogLevel("debug") } ``` The following is a list of options you can pass in to set the level from least to most verbose: - `"OFF"` - `"error"` - `"warn"` - `"print"` - `"trace"` - `"debug"` - `"info"` ## Capturing Code Coverage Configure your testing environment as described above and run ``make cov``. The coverage percentage will be printed on the console when the testing completes. ``` make cov ``` For more detailed analysis, results are printed to ``coverage.txt`` in the project directory. To read the coverage report, run: ``` go tool cover -html=coverage.txt ``` ## Submitting Pull Requests You may use your preferred editor to edit the driver code. Make certain to run ``make fmt lint`` before submitting any pull request to Snowflake. This command formats your source code according to the standard Go style and detects any coding style issues. ## Runaway `dbus-daemon` processes on certain OS This only affects certain Linux distributions, one of them is confirmed to be RHEL. Due to a bug in one of the dependencies (`keyring`), on the affected OS, each invocation of a program depending on gosnowflake (or any other program depending on the same `keyring`), will generate a new instance of `dbus-daemon` fork which can, due to not being cleaned up, eventually fill the fd limits. Until we replace the offending dependency with one which doesn't have the bug, a workaround needs to be applied, which can be: * cleaning up the runaway processes periodically * setting envvar `DBUS_SESSION_BUS_ADDRESS=$XDG_RUNTIME_DIR/bus` (if that socket exists, or create it) or even `DBUS_SESSION_BUS_ADDRESS=/dev/null` Details in [issue 773](https://github.com/snowflakedb/gosnowflake/issues/773)