avatica

package module
v2.3.1+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 4, 2018 License: Apache-2.0 Imports: 27 Imported by: 5

README

Apache Phoenix/Avatica SQL Driver

GoDoc wercker status Coverage Status

An Apache Phoenix/Avatica driver for Go's database/sql package

Getting started

Install using the go tool or your dependency management tool:

$ go get github.com/Boostport/avatica

Usage

The Phoenix/Avatica driver implements Go's database/sql/driver interface, so, import Go's database/sql package and the driver:

import "database/sql"
import _ "github.com/Boostport/avatica"

db, err := sql.Open("avatica", "http://localhost:8765")

Then simply use the database connection to query some data, for example:

rows := db.Query("SELECT COUNT(*) FROM test")
DSN (Data Source Name)

The DSN has the following format (optional parts are marked by square brackets):

http://[username:password@]address:port[/schema][?parameter1=value&...parameterN=value]

In other words, the scheme (http), address and port is mandatory, but the schema and parameters are optional.

username

This is the JDBC username that is passed directly to the backing database. It is NOT used for authenticating against Avatica.

password

This is the JDBC password that is passed directly to the backing database. It is NOT used for authenticating against Avatica.

schema

The schema path sets the default schema to use for this connection. For example, if you set it to myschema, then executing the query SELECT * FROM my_table will have the equivalence of SELECT * FROM myschema.my_table. If schema is set, you can still work on tables in other schemas by supplying a schema prefix: SELECT * FROM myotherschema.my_other_table.

The following parameters are supported:

authentication

The authentication type to use when authenticating against Avatica. Valid values are BASIC for HTTP Basic authentication, DIGEST for HTTP Digest authentication, and SPNEGO for Kerberos with SPNEGO authentication.

avaticaUser

The user to use when authenticating against Avatica. This parameter is required if authentication is BASIC or DIGEST.

avaticaPassword

The password to use when authenticating against Avatica. This parameter is required if authentication is BASIC or DIGEST.

principal

The Kerberos principal to use when authenticating against Avatica. It should be in the form primary/instance@realm, where the instance is optional. This parameter is required if authentication is SPNEGO and you want the driver to perform the Kerberos login.

keytab

The path to the Kerberos keytab to use when authenticating against Avatica. This parameter is required if authentication is SPNEGO and you want the driver to perform the Kerberos login.

krb5Conf

The path to the Kerberos configuration to use when authenticating against Avatica. This parameter is required if authentication is SPNEGO and you want the driver to perform the Kerberos login.

krb5CredentialsCache

The path to the Kerberos credential cache file to use when authenticating against Avatica. This parameter is required if authentication is SPNEGO and you have logged into Kerberos already and want the driver to use the existing credentials.

location

The location will be set as the location of unserialized time.Time values. It must be a valid timezone. If you want to use the local timezone, use Local. By default, this is set to UTC.

maxRowsTotal

The maxRowsTotal parameter sets the maximum number of rows to return for a given query. By default, this is set to -1, so that there is no limit on the number of rows returned.

frameMaxSize

The frameMaxSize parameter sets the maximum number of rows to return in a frame. Depending on the number of rows returned and subject to the limits of maxRowsTotal, a query result set can contain rows in multiple frames. These additional frames are then fetched on a as-needed basis. frameMaxSize allows you to control the number of rows in each frame to suit your application's performance profile. By default this is set to -1, so that there is no limit on the number of rows in a frame.

transactionIsolation

Setting transactionIsolation allows you to set the isolation level for transactions using the connection. The value should be a positive integer analogous to the transaction levels defined by the JDBC specification. The default value is 0, which means transactions are not supported. This is to deal with the fact that Calcite/Avatica works with many types of backends, with some backends having no transaction support. If you are using Apache Phoenix 4.7 onwards, we recommend setting it to 4, which is the maximum isolation level supported.

The supported values for transactionIsolation are:

Value JDBC Constant Description
0 none Transactions are not supported
1 TRANSACTION_READ_UNCOMMITTED Dirty reads, non-repeatable reads and phantom reads may occur.
2 TRANSACTION_READ_COMMITTED Dirty reads are prevented, but non-repeatable reads and phantom reads may occur.
4 TRANSACTION_REPEATABLE_READ Dirty reads and non-repeatable reads are prevented, but phantom reads may occur.
8 TRANSACTION_SERIALIZABLE Dirty reads, non-repeatable reads, and phantom reads are all prevented.
time.Time support

The following Phoenix/Avatica datatypes are automatically converted to and from time.Time: TIME, DATE and TIMESTAMP.

It is important to understand that avatica and the underlying database ignores the timezone. If you save a time.Time to the database, the timezone is ignored and vice-versa. This is why you need to make sure the location parameter in your DSN is set to the same value as the location of the time.Time values you are inserting into the database.

We recommend using UTC, which is the default value of location.

Version compatibility

Driver Version Phoenix Version Calcite-Avatica Version
1.x.x >= 4.8.0 >= 1.8.0
2.x.x >= 4.8.0 >= 1.8.0

Development

To run tests, but skip tests in the vendor directory, run:

go test $(go list ./... | grep -v /vendor/)

The driver is not feature-complete yet, so contributions are very appreciated.

Updating protocol buffer definitions

To update the procotol buffer definitions, update CALCITE_VER in gen-protobuf.bat and gen-protobuf.sh to match the version included by Phoenix and then run the appropriate script for your platform.

About the moby.yml file

The moby.yml file is used by our internal tool to automatically reload and test the code during development. We hope to have this tool open-sourced soon.

License

The driver is licensed under the Apache 2 license.

Documentation

Overview

Package avatica provides an Apache Phoenix Query Server/Avatica driver for Go's database/sql package.

Quickstart

Import the database/sql package along with the avatica driver.

import "database/sql"
import _ "github.com/Boostport/avatica"

db, err := sql.Open("avatica", "http://phoenix-query-server:8765")

See https://github.com/Boostport/avatica#usage for more details

Index

Constants

View Source
const (
	Eunknown int8 = iota
	Efatal
	Eerror
	Ewarning
)

Error severity codes

Variables

This section is empty.

Functions

func NewHTTPClient

func NewHTTPClient(host string, authenticationConf httpClientAuthConfig) (*httpClient, error)

NewHTTPClient creates a new httpClient from a host.

Types

type Config

type Config struct {
	// contains filtered or unexported fields
}

Config is a configuration parsed from a DSN string

func ParseDSN

func ParseDSN(dsn string) (*Config, error)

ParseDSN parses a DSN string to a Config

type Driver

type Driver struct{}

Driver is exported to allow it to be used directly.

func (*Driver) Open

func (a *Driver) Open(dsn string) (driver.Conn, error)

Open a Connection to the server. See https://github.com/Boostport/avatica#dsn for more information on how the DSN is formatted.

type ErrorCode

type ErrorCode uint32

ErrorCode represents the error code returned by the avatica server

type RPCMetadata

type RPCMetadata struct {
	ServerAddress string
}

RPCMetadata contains metadata about the call that caused the error.

type ResponseError

type ResponseError struct {
	Exceptions    []string
	HasExceptions bool
	ErrorMessage  string
	Severity      int8
	ErrorCode     ErrorCode
	SqlState      SQLState
	Metadata      *RPCMetadata
}

ResponseError is an error type that contains detailed information on what caused the server to return an error.

func (ResponseError) Error

func (r ResponseError) Error() string

func (ResponseError) Name

func (r ResponseError) Name() string

Name returns the name of the error encountered by the server.

type SQLState

type SQLState string

SQLState represents the SQL code returned by the avatica server

Directories

Path Synopsis
Package message is a generated protocol buffer package.
Package message is a generated protocol buffer package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL