hana

package
v0.20.0 Latest Latest
Warning

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

Go to latest
Published: Apr 8, 2024 License: MIT Imports: 26 Imported by: 0

README

HANA

The HANA provider manages querying for tile requests against an SAP HANA database. The connection between tegola and HANA is configured in a tegola.toml file. An example minimum connection config:

[[providers]]
name = "test_hana"       # provider name is referenced from map layers (required)
type = "hana"            # the type of data provider must be "hana" for this data provider (required)
uri = "hdb://myuser:mypassword@something.hanacloud.ondemand.com:443?" # HANA connection string (required)
Connection Properties
  • uri (string): [Required] HANA connection string
  • name (string): [Required] provider name is referenced from map layers
  • type (string): [Required] the type of data provider. must be "hana" to use this data provider
  • srid (int): [Optional] The default SRID for the provider. Defaults to WebMercator (3857) but also supports WGS84 (4326)
Connection string properties

Example

# {protocol}://{user}:{password}@{host}:{port}/{database}?{options}=
hdb://myuser:mypassword@something.hanacloud.ondemand.com:443?TLSInsecureSkipVerify&timeout=3600&max_connections=30

Options

  • timeout: [Optional] Driver side connection timeout in seconds.
  • TLSRootCAFile [Optional] Path,- filename to root certificate(s).
  • TLSServerName [Optional] ServerName to verify the hostname. By setting TLSServerName=host, the provider will set TLSServerName same as 'host' value in uri.
  • TLSInsecureSkipVerify [Optional] Controls whether a client verifies the server's certificate chain and host name.
  • max_connections: [Optional] The max connections to maintain in the connection pool. Defaults to 100. 0 means no max.
  • max_connection_idle_time: [Optional] The maximum time an idle connection is kept alive. Defaults to "30m".
  • max_connection_life_time [Optional] The maximum time a connection lives before it is terminated and recreated. Defaults to "1h".

Provider Layers

In addition to the connection configuration above, Provider Layers need to be configured. A Provider Layer tells tegola how to query HANA for a certain layer. An example minimum config:

[[providers.layers]]
name = "landuse"
# this table uses "geom" for the geometry_fieldname and "gid" for the id_fieldname so they don't need to be configured
tablename = "gis.zoning_base_3857"
Provider Layers Properties
  • name (string): [Required] the name of the layer. This is used to reference this layer from map layers.
  • tablename (string): [*Required] the name of the database table to query against. Required if sql is not defined.
  • geometry_fieldname (string): [Optional] the name of the filed which contains the geometry for the feature. defaults to geom.
  • id_fieldname (string): [Optional] the name of the feature id field. defaults to gid.
  • fields ([]string): [Optional] a list of fields to include alongside the feature. Can be used if sql is not defined.
  • srid (int): [Optional] the SRID of the layer. Supports 3857 (WebMercator) or 4326 (WGS84).
  • geometry_type (string): [Optional] the layer geometry type. If not set, the table will be inspected at startup to try and infer the gemetry type. Valid values are: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection.
  • sql (string): [*Required] custom SQL to use use. Required if tablename is not defined. Supports the following tokens:
    • !BBOX! - [Required] will be replaced with the bounding box of the tile before the query is sent to the database. !bbox! and!BOX! are supported as well for compatibilitiy with queries from Mapnik and MapServer styles.
    • !ZOOM! - [Optional] will be replaced with the "Z" (zoom) value of the requested tile.
    • !X! - [Optional] will be replaced with the "X" value of the requested tile.
    • !Y! - [Optional] will be replaced with the "Y" value of the requested tile.
    • !Z! - [Optional] will be replaced with the "Z" value of the requested tile.
    • !SCALE_DENOMINATOR! - [Optional] scale denominator, assuming 90.7 DPI (i.e. 0.28mm pixel size).
    • !PIXEL_WIDTH! - [Optional] the pixel width in meters, assuming 256x256 tiles.
    • !PIXEL_HEIGHT! - [Optional] the pixel height in meters, assuming 256x256 tiles.
    • !ID_FIELD! - [Optional] the id field name.
    • !GEOM_FIELD! - [Optional] the geom field name.
    • !GEOM_TYPE! - [Optional] the geom type field name.

*Required: either the tablename or sql must be defined, but not both.

Example minimum custom SQL config

[[providers.layers]]
name = "rivers"
# Custom sql to be used for this layer as a sub query. ST_AsBinary and !BBOX! filter are applied automatically.
sql = "(SELECT id, geom FROM gis.rivers) AS sub"

Environment Variable support

Helpful debugging environment variables:

  • TEGOLA_SQL_DEBUG: specify the type of SQL debug information to output. Supports the following values:
    • LAYER_SQL: print layer SQL as they’re parsed from the config file.
    • EXECUTE_SQL: print SQL that is executed for each tile request and the number of items it returns or an error.
    • LAYER_SQL:EXECUTE_SQL: print LAYER_SQL and EXECUTE_SQL.

Example:

$ TEGOLA_SQL_DEBUG=LAYER_SQL tegola serve --config=/path/to/conf.toml

Testing

Testing is designed to work against a live SAP HANA database. To see how to set up a database check this github actions script. To run the HANA tests, the following environment variables need to be set:

$ export RUN_HANA_TESTS=yes
$ export HANA_CONNECTION_STRING="hdb://myuser:mypassword@something.hanacloud.ondemand.com:443?TLSInsecureSkipVerify"

Documentation

Index

Constants

View Source
const (
	EnvSQLDebugName    = "TEGOLA_SQL_DEBUG"
	EnvSQLDebugLayer   = "LAYER_SQL"
	EnvSQLDebugExecute = "EXECUTE_SQL"
)
View Source
const (
	DefaultURI             = ""
	DefaultMaxConn         = 100
	DefaultMaxConnIdleTime = "30m"
	DefaultMaxConnLifetime = "1h"
)
View Source
const (
	ConfigKeyName            = "name"
	ConfigKeyURI             = "uri"
	ConfigKeyMaxConn         = "max_connections"
	ConfigKeyMaxConnIdleTime = "max_connection_idle_time"
	ConfigKeyMaxConnLifetime = "max_connection_life_time"
	ConfigKeySRID            = "srid"
	ConfigKeyLayers          = "layers"
	ConfigKeyLayerName       = "name"
	ConfigKeyTablename       = "tablename"
	ConfigKeySQL             = "sql"
	ConfigKeyFields          = "fields"
	ConfigKeyGeomField       = "geometry_fieldname"
	ConfigKeyFeatureIDField  = "id_fieldname"
	ConfigKeyGeomType        = "geometry_type"
	ConfigKeyBuffer          = "buffer"
	ConfigKeyClipGeometry    = "clip_geometry"
)
View Source
const (
	MVTProviderType = "mvt_hana"
	ProviderType    = "hana"
)
View Source
const Name = "hana"
View Source
const (
	PLANAR_SRID_OFFSET = 1000000000
)

Variables

View Source
var (
	ErrNilLayer = errors.New("layer is nil")
)

Functions

func Cleanup

func Cleanup()

Cleanup will close all database connections and destroy all previously instantiated Provider instances

func CreateConnection

func CreateConnection(config dict.Dicter) (*sql.DB, error)

CreateConnection creates a connection from config values

func NewMVTTileProvider

func NewMVTTileProvider(config dict.Dicter, maps []provider.Map) (provider.MVTTiler, error)

func NewTileProvider

func NewTileProvider(config dict.Dicter, maps []provider.Map) (provider.Tiler, error)

NewTileProvider instantiates and returns a new HANA provider or an error. The function will validate that the config object looks good before trying to create a driver. This Provider supports the following fields in the provided map[string]interface{} map:

uri (string): [Required] HANA connection string
name (string): [Required] Provider name is referenced from map layers
srid (int): [Optional] The default SRID for the provider. Defaults to WebMercator (3857) but also supports WGS84 (4326)
type (string): [Required] The type of data provider. must be "hana" to use this data provider
layers (map[string]struct{})  — This is map of layers keyed by the layer name. Supports the following properties

	name (string): [Required] the name of the layer. This is used to reference this layer from map layers.
	tablename (string): [*Required] the name of the database table to query against. Required if sql is not defined.
	geometry_fieldname (string): [Optional] the name of the filed which contains the geometry for the feature. defaults to geom
	id_fieldname (string): [Optional] the name of the feature id field. defaults to gid
	fields ([]string): [Optional] a list of fields to include alongside the feature. Can be used if sql is not defined.
	srid (int): [Optional] the SRID of the layer. Supports 3857 (WebMercator) or 4326 (WGS84).
	sql (string): [*Required] custom SQL to use use. Required if tablename is not defined. Supports the following tokens:

		!BBOX! - [Required] will be replaced with the bounding box of the tile before the query is sent to the database.
		!ZOOM! - [Optional] will be replaced with the "Z" (zoom) value of the requested tile.

func OpenDB

func OpenDB(uri string) (*sql.DB, error)

Types

type DataType

type DataType byte
const (
	DtTinyint DataType = iota
	DtSmallint
	DtInteger
	DtBigint
	DtDecimal
	DtSmalldecimal
	DtReal
	DtDouble
	DtChar
	DtVarchar
	DtNChar
	DtNVarchar
	DtShorttext
	DtAlphanum
	DtBinary
	DtVarbinary
	DtDate
	DtTime
	DtTimestamp
	DtSeconddate
	DtClob
	DtNClob
	DtBlob
	DtText
	DtBoolean
	DtSTPoint
	DtSTGeometry
	DtUnknown
)

type ErrGeomFieldNotFound

type ErrGeomFieldNotFound struct {
	GeomFieldName string
	LayerName     string
}

func (ErrGeomFieldNotFound) Error

func (e ErrGeomFieldNotFound) Error() string

type ErrInvalidURI

type ErrInvalidURI struct {
	Err error
	Msg string
}

func (ErrInvalidURI) Error

func (e ErrInvalidURI) Error() string

func (ErrInvalidURI) Unwrap

func (e ErrInvalidURI) Unwrap() error

type ErrLayerNotFound

type ErrLayerNotFound struct {
	LayerName string
}

func (ErrLayerNotFound) Error

func (e ErrLayerNotFound) Error() string

type FieldDescription

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

type Layer

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

layer holds information about a query.

func (Layer) FieldDescriptions

func (l Layer) FieldDescriptions() []FieldDescription

func (Layer) GeomFieldName

func (l Layer) GeomFieldName() string

func (Layer) GeomType

func (l Layer) GeomType() geom.Geometry

func (Layer) IDFieldName

func (l Layer) IDFieldName() string

func (Layer) Name

func (l Layer) Name() string

func (Layer) SRID

func (l Layer) SRID() uint64

type Provider

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

Provider provides the HANA data provider.

func CreateProvider

func CreateProvider(config dict.Dicter, maps []provider.Map, providerType string) (*Provider, error)

CreateProvider instantiates and returns a new postgis provider or an error. The function will validate that the config object looks good before trying to create a driver. This Provider supports the following fields in the provided map[string]interface{} map:

uri (string): [Required] HANA database host
srid (int): [Optional] The default SRID for the provider. Defaults to WebMercator (3857) but also supports WGS84 (4326)
max_connections : [Optional] The max connections to maintain in the connection pool. Default is 100. 0 means no max.
layers (map[string]struct{})  — This is map of layers keyed by the layer name. supports the following properties

	name (string): [Required] the name of the layer. This is used to reference this layer from map layers.
	tablename (string): [*Required] the name of the database table to query against. Required if sql is not defined.
	geometry_fieldname (string): [Optional] the name of the filed which contains the geometry for the feature. defaults to geom
	id_fieldname (string): [Optional] the name of the feature id field. defaults to gid
	fields ([]string): [Optional] a list of fields to include alongside the feature. Can be used if sql is not defined.
	srid (int): [Optional] the SRID of the layer. Supports 3857 (WebMercator) or 4326 (WGS84).
	sql (string): [*Required] custom SQL to use use. Required if tablename is not defined. Supports the following tokens:

		!BBOX! - [Required] will be replaced with the bounding box of the tile before the query is sent to the database.
		!ZOOM! - [Optional] will be replaced with the "Z" (zoom) value of the requested tile.

func (*Provider) Close

func (p *Provider) Close()

Close will close the Provider's database connectio

func (*Provider) Collectors

func (p *Provider) Collectors(prefix string, cfgFn func(configKey string) map[string]interface{}) ([]observability.Collector, error)

func (*Provider) Layer

func (p *Provider) Layer(name string) (Layer, bool)

Layer fetches an individual layer from the provider, if it's configured if no name is provider, the first layer is returned

func (Provider) Layers

func (p Provider) Layers() ([]provider.LayerInfo, error)

Layers returns meta data about the various layers which are configured with the provider

func (Provider) MVTForLayers

func (p Provider) MVTForLayers(ctx context.Context, tile provider.Tile, params provider.Params, layers []provider.Layer) ([]byte, error)

func (Provider) TileFeatures

func (p Provider) TileFeatures(ctx context.Context, layer string, tile provider.Tile, params provider.Params, fn func(f *provider.Feature) error) error

TileFeatures adheres to the provider.Tiler interface

Jump to

Keyboard shortcuts

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