database

package
v1.0.2 Latest Latest
Warning

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

Go to latest
Published: May 15, 2023 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Apply added in v0.6.0

func Apply(opts ...ReadJobOptions) readJobOptions

Types

type GeocubeBackend

type GeocubeBackend interface {
	/******************** Records *************************/
	// Create a batch of records in database
	CreateRecords(ctx context.Context, records []*geocube.Record) error
	// Delete a batch of records from the database iif no dataset has reference on.
	// Returns the number of deleted records
	DeleteRecords(ctx context.Context, ids []string) (int64, error)
	// FindRecords fetchs all the records that match the criterias
	// [Optional] namelike: filter by name (support "*?" and "(?i)" suffix for case insensitivity)
	// [Optional] fromTime, toTime: filter by datetime
	// [Optional] jobID: filter the records whom some datasets are locked by the job
	// [Optional] aoi: filter the records that intersects the AOI
	// [Optional] page, limit : limits the number of results
	// [Optional] order : order results by date
	// [Optional] loadAOI : load AOI of records
	FindRecords(ctx context.Context, namelike string, tags geocube.Metadata, fromTime, toTime time.Time, jobID string, aoi *geocube.AOI, page, limit int, order, loadAOI bool) ([]*geocube.Record, error)
	// AddRecordsTags add tags on list of records
	AddRecordsTags(ctx context.Context, ids []string, tags geocube.Metadata) (int64, error)
	// RemoveRecordsTags remove tags on list of records
	RemoveRecordsTags(ctx context.Context, ids []string, tagsKey []string) (int64, error)
	// DeletePendingRecords deletes records that are not linked to any datasets
	DeletePendingRecords(ctx context.Context) (int64, error)
	// ReadRecords with the given ids
	// Preserve order, removing duplicates
	// Raise EntityNotFound
	ReadRecords(ctx context.Context, ids []string) ([]*geocube.Record, error)
	// CreateAOI creates the aoi in database
	// Raise EntityAlreadyExists
	CreateAOI(ctx context.Context, aoi *geocube.AOI) error
	// ReadAOI retrieves the aoi from database
	// Raise EntityAlreadyNotFound
	ReadAOI(ctx context.Context, aoiID string) (*geocube.AOI, error)
	// GetUnionAOI returns the union of AOI of all the provided records
	// TODO delete ? GetUnionAOI(ctx context.Context, recordsID []string) (*geom.MultiPolygon, error)
	// DeletePendingAOIs deletes aois that are not linked to any records
	DeletePendingAOIs(ctx context.Context) (int64, error)

	/******************** Variables *************************/
	// CreateVariable creates the variable in database
	// Raise EntityAlreadyExists
	CreateVariable(ctx context.Context, variable *geocube.Variable) error
	// UpdateVariable updates the field (name, unit, description, palette, resampling) in database
	// Raise geocube.EntityNotFound, geocube.EntityAlreadyExists
	UpdateVariable(ctx context.Context, variable *geocube.Variable) error
	// DeleteVariable deletes the variable in the database
	DeleteVariable(ctx context.Context, variableID string) error
	// DeletePendingVariables deletes instances that are not linked to any variable
	DeletePendingVariables(ctx context.Context) (int64, error)
	// CreateInstance creates the instance in database
	CreateInstance(ctx context.Context, variableID string, instance *geocube.VariableInstance) (err error)
	// UpdateInstance updates the name and the metadata of the instance in the database
	// Raise geocube.EntityNotFound, geocube.EntityAlreadyExists
	UpdateInstance(ctx context.Context, instance *geocube.VariableInstance) error
	// DeleteInstance deletes the instance in the database
	DeleteInstance(ctx context.Context, instanceID string) error
	// DeletePendingInstances deletes instances that are not linked to any dataset
	DeletePendingInstances(ctx context.Context) (int64, error)

	// ReadVariable retrieves the variable and all its instances with the given id (but not the ConsolidationParams)
	// Raise an error geocube.EntityNotFound
	ReadVariable(ctx context.Context, variableID string) (*geocube.Variable, error)
	// ReadVariableFromInstanceID retrieves the variable with the instance given (other instances are not fetched) (but not the ConsolidationParams)
	// Raise an error geocube.EntityNotFound
	ReadVariableFromInstanceID(ctx context.Context, instanceID string) (*geocube.Variable, error)
	// ReadVariableFromName retrieves the variable and all its instances with the given name (but not the ConsolidationParams)
	// Raise an error geocube.EntityNotFound
	ReadVariableFromName(ctx context.Context, variableName string) (*geocube.Variable, error)
	// FindVariables retrieves all the variable having a similar name (support "*?"" and "(?i)" suffix for case insensitivity)
	// FindVariables does not retrieve ConsolidationParams
	FindVariables(ctx context.Context, namelike string, page, limit int) ([]*geocube.Variable, error)

	// CreateConsolidationParams creates or updates the consolidation parameters associated to the given id
	CreateConsolidationParams(ctx context.Context, id string, consolidationParams geocube.ConsolidationParams) error
	// ReadConsolidationParams reads and returns the consolidation paramaters associated to the given id
	ReadConsolidationParams(ctx context.Context, id string) (*geocube.ConsolidationParams, error)
	// DeleteConsolidationParams deletes the consolidation paramaters associated to the given id
	DeleteConsolidationParams(ctx context.Context, id string) error
	// DeletePendingConsolidationParams deletes consolidationParams that are not linked to any jobs nor variable
	DeletePendingConsolidationParams(ctx context.Context) (int64, error)

	/******************** Palettes *************************/
	// CreatePalette creates the palette in database
	// Raise EntityAlreadyExists
	CreatePalette(ctx context.Context, palette *geocube.Palette) error
	// ReadPalette creates the palette in database
	// Raise EntityNotFound
	ReadPalette(ctx context.Context, name string) (*geocube.Palette, error)
	// UpdatePalette udpates the palette in database
	// Raise EntityNotFound
	UpdatePalette(ctx context.Context, palette *geocube.Palette) error
	// DeletePalette creates the palette in database
	// Raise EntityNotFound
	DeletePalette(ctx context.Context, name string) error

	/******************** Containers *************************/
	// CreateContainer creates the container in database
	CreateContainer(ctx context.Context, container *geocube.Container) error
	// UpdateContainer updates nothing in database
	UpdateContainer(ctx context.Context, container *geocube.Container) error
	// ReadContainers retrieves the containers with the provided uris and there datasets
	// Preserve order, removing duplicates
	// Raise an error geocube.EntityNotFound
	ReadContainers(ctx context.Context, containersURI []string) ([]*geocube.Container, error)
	// DeleteContainer deletes empty container
	// Raise an error geocube.DependencyStillExists
	DeleteContainer(ctx context.Context, container *geocube.Container) error
	// DeletePendingContainers deletes containers that are not linked to any dataset
	DeletePendingContainers(ctx context.Context) (int64, error)
	// CreateDatasets creates the batch of datasets in database
	CreateDatasets(ctx context.Context, datasets []*geocube.Dataset) error
	// DeleteDatasets deletes a batch of datasetsID in database
	DeleteDatasets(ctx context.Context, datasetsID []string) error
	// ListActiveDatasetsID retrieves all the active datasets id from the list of records representing the given variable
	// [Optional] recordsID: filter by list of vrecords
	// [Optional] recordTags: filter by record's tags
	// [Optional] fromTime, toTime: filter by record's datetime
	ListActiveDatasetsID(ctx context.Context, instanceID string, recordsID []string,
		recordTags geocube.Metadata, fromTime, toTime time.Time) ([]string, error)
	// FindDatasets fetches all the datasets that match the criterias
	// [Optional] containerURIPatterns: filter by container (support "*?"" and "(?i)" suffix for case insensitivity)
	// [Optional] lockedByJobID: filter by containers locked by job
	// [Optional] instancesID, recordsID: filter by list of variable instances/records
	// [Optional] recordTags: filter by record's tags
	// [Optional] fromTime, toTime: filter by record's datetime
	// [Optional] geog, [refined]: filter the datasets that intersect the geographic ring, and optionally, refine with "refined" iif the dataset has the same SRID.
	// order : by record.datetime (ascending) and record.id
	FindDatasets(ctx context.Context, status geocube.DatasetStatus, containerURIPatterns []string, lockedByJobID string, instanceIDs, recordIDs []string,
		recordTags geocube.Metadata, fromTime, toTime time.Time, geog *proj.GeographicRing, refined *proj.Ring, page, limit int, order bool) ([]*geocube.Dataset, error)
	// GetDatasetsGeometryUnion returns the union of AOI of all the locked datasets
	GetDatasetsGeometryUnion(ctx context.Context, lockedByJobID string) (*geom.MultiPolygon, error)

	// UpdateDatasets given an instance id and records ids
	UpdateDatasets(ctx context.Context, instanceID string, recordIds []string, dmapping geocube.DataMapping) (map[string]int64, error)

	// ComputeValidShapeFromCell compute valid shape in right crs from cell ring
	ComputeValidShapeFromCell(ctx context.Context, datasetIDS []string, cell *grid.Cell) (*proj.Shape, error)

	/******************** Layouts *************************/
	// CreateLayout creates the layout in the database
	CreateLayout(ctx context.Context, layout *geocube.Layout) error
	// DeleteLayout deletes the layout from the database
	DeleteLayout(ctx context.Context, name string) error
	// ReadLayout retrieve the layout
	ReadLayout(ctx context.Context, name string) (*geocube.Layout, error)
	// FindLayout retrieves the layouts (support "*?" and "(?i)" suffix for case insensitivity)
	// Raise geocube.EntityNotFound
	FindLayouts(ctx context.Context, nameLike string) ([]*geocube.Layout, error)

	// FindContainerLayouts retrieves the layouts of the containers defined by the instance and the following filters
	// Returns list of layout names and the corresponding list of containers
	FindContainerLayouts(ctx context.Context, instanceId string, geomAOI *geocube.AOI, recordIds []string, recordTags map[string]string, fromTime, toTime time.Time) ([]string, [][]string, error)
	// SaveContainerLayout saves the layout that defines the container
	SaveContainerLayout(ctx context.Context, containerURI string, layoutName string) error
	// DeleteContainerLayout removes the layout that defines the container
	// Raise geocube.EntityNotFound (it can be ignored)
	DeleteContainerLayout(ctx context.Context, containerURI string) error

	/******************** Grids *************************/
	// CreateGrid creates a grid in the database
	CreateGrid(ctx context.Context, grid *geocube.Grid) error
	// DeleteGrid deletes a grid from the database
	DeleteGrid(ctx context.Context, gridName string) error
	// ReadGrid retrieve the grid (without the cells)
	ReadGrid(ctx context.Context, name string) (*geocube.Grid, error)
	// FindGrids retrieves the grid name & description (not the cells) (support "*?" and "(?i)" suffix for case insensitivity)
	FindGrids(ctx context.Context, nameLike string) ([]*geocube.Grid, error)
	// FindCells find the cells of the grid intersecting the AOI
	// Returns the cells  and the intersection with the AOI
	FindCells(ctx context.Context, gridName string, aoi *geocube.AOI) ([]geocube.Cell, []geom.MultiPolygon, error)

	/******************** Jobs *************************/
	// CreateJob creates the job in the database
	CreateJob(ctx context.Context, job *geocube.Job) error
	// FindJobs retrieves the jobs but not their tasks (support "*?" and "(?i)" suffix for case insensitivity)
	// Raise geocube.EntityNotFound
	FindJobs(ctx context.Context, nameLike string) ([]*geocube.Job, error)
	// ReadJob retrieves the job but not its tasks
	// Raise geocube.EntityNotFound
	ReadJob(ctx context.Context, jobID string, opts ...ReadJobOptions) (*geocube.Job, error)
	// UpdateJob updates the job status and updateTime
	// Raise geocube.EntityNotFound
	UpdateJob(ctx context.Context, job *geocube.Job) error
	// PersistLogs insert the job logs
	PersistLogs(ctx context.Context, jobID string, logs geocube.JobLogs) error
	// DeleteJob deletes the job from the database and release the datasets
	// But its Params and all its tasks must have been deleted before
	DeleteJob(ctx context.Context, jobID string) error

	// ReadJobWithTask retrieves the job with the given task
	// Raise geocube.EntityNotFound if the job or the task is not found
	ReadJobWithTask(ctx context.Context, jobID string, taskID string) (*geocube.Job, error)
	// ListJobsID retrieves all the JobID that fit the requirements
	// nameLike supports "*?" and "(?i)" suffix for case insensitivity
	ListJobsID(ctx context.Context, nameLike string, states []geocube.JobState) ([]string, error)

	/******************** LockDatasets *************************/
	// LockDatasets locks datasets in the database (each element of datasetsID must be unique)
	LockDatasets(ctx context.Context, jobID string, datasetsID []string, flag int) error
	// ReleaseDatasets releases all the datasets of the job from the database with the given flag
	ReleaseDatasets(ctx context.Context, jobID string, flag int) error

	/******************** Task *************************/
	// CreateTasks creates the batch of tasks in the database
	CreateTasks(ctx context.Context, jobID string, tasks []*geocube.Task) error
	// ReadTasks retrieves all the tasks of the job with the given states
	// If states is nil, all the states will be retrieved
	ReadTasks(ctx context.Context, jobID string, states []geocube.TaskState) ([]*geocube.Task, error)
	// UpdateTask updates the task status
	// Raise geocube.EntityNotFound
	UpdateTask(ctx context.Context, task *geocube.Task) error
	// DeleteTask deletes the task
	DeleteTask(ctx context.Context, taskID string) error

	/******************** Consolidation *************************/
	// ChangeDatasetsStatus changes the status of all the datasets locked by the job whom status is fromStatus to toStatus
	ChangeDatasetsStatus(ctx context.Context, lockedByJobID string, fromStatus geocube.DatasetStatus, toStatus geocube.DatasetStatus) error
}

type GeocubeDBBackend

type GeocubeDBBackend interface {
	GeocubeBackend
	StartTransaction(ctx context.Context) (GeocubeTxBackend, error)
}

type GeocubeTxBackend

type GeocubeTxBackend interface {
	GeocubeBackend
	// Must be call to apply transaction
	Commit() error
	// Might be called to cancel the transaction (no effect if commit has already be done)
	Rollback() error
}

type ReadJobOptions added in v0.6.0

type ReadJobOptions func(o *readJobOptions)

func LogLimit added in v0.6.0

func LogLimit(page, limit int) ReadJobOptions

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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