atlas

package module
v0.0.0-...-0571e71 Latest Latest
Warning

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

Go to latest
Published: Apr 18, 2021 License: MIT Imports: 8 Imported by: 0

README

Atlas -- Optimised ORM for building location-based services with spatio-temporal data

Features

  • Defining models with region and location
  • Querying spatial models with PostGIS plugin

Example Usage

package main

import (
	"fmt"
	"os"

	"github.com/JayPeeTeeDee/atlas"
	"github.com/JayPeeTeeDee/atlas/model"
)

type Car struct {
	Id       int `atlas:"primarykey"`
	Location model.Location
	Brand    string
	Model    string
}

func main() {
	// Connect to database
	db, err := atlas.ConnectWithDSN(atlas.DBType_Postgres, "postgresql://username:password@localhost/database")
	if err != nil {
		fmt.Fprint(os.Stderr, "Unable to connect to database")
		os.Exit(1)
	}
	defer db.Disconnect()

	// Register models for ORM to recognise
	db.RegisterModel(Car{})
	if err != nil {
		fmt.Fprint(os.Stderr, "Failed to register model")
		os.Exit(1)
	}

	// Create table on database for model
	err = db.CreateTable("Car", true)
	// CREATE TABLE IF NOT EXISTS car(id int PRIMARY KEY, location geography(point), brand varchar(255), model varchar(255));"

	if err != nil {
		fmt.Fprint(os.Stderr, err.Error())
		os.Exit(1)
	}

	// Create entries in database
	cars := []Car{
		{Id: 1, Location: model.NewLocation(103.81, 1.30), Brand: "Toyota", Model: "Corolla Altis"},
		{Id: 2, Location: model.NewLocation(101.97, 4.3), Brand: "Mitsubishi", Model: "Lancer"},
	}
	_, err = db.Create(cars)
	if err != nil {
		fmt.Fprint(os.Stderr, "Failed to insert cars")
		os.Exit(1)
	}

	// Querying entries from database
	carsInRegion := make([]Car, 0)
	err = db.Model("Car").CoveredBy(model.NewRegion(
		[][]float64{
			{100, 10},
			{102, 10},
			{102, 0},
			{100, 0},
			{100, 10},
		},
	)).All(&carsInRegion)
	if err != nil {
		fmt.Fprint(os.Stderr, "Failed to query cars")
		os.Exit(1)
	}

	fmt.Printf("There are %d cars in the region\n", len(carsInRegion))
	fmt.Printf("The first car is at %v\n", carsInRegion[0].Location)
}

Documentation

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNoSchema = errors.New("no such schema registered")

Functions

This section is empty.

Types

type Database

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

func ConnectWithDSN

func ConnectWithDSN(dbType DatabaseType, dsn string) (*Database, error)

func (*Database) Create

func (d *Database) Create(object interface{}) (sql.Result, error)

func (*Database) CreateTable

func (d *Database) CreateTable(schemaName string, ifNotExists bool) error

func (*Database) Disconnect

func (d *Database) Disconnect() error

func (*Database) Execute

func (d *Database) Execute(query string, args ...interface{}) (sql.Result, error)

func (*Database) GetSchemaByName

func (d *Database) GetSchemaByName(name string) (model.Schema, error)

func (*Database) Model

func (d *Database) Model(name string) *Query

func (*Database) Query

func (d *Database) Query(query string, args ...interface{}) (*sql.Rows, error)

func (*Database) RegisterModel

func (d *Database) RegisterModel(target interface{}) error

func (*Database) Update

func (d *Database) Update(object interface{}) (sql.Result, error)

type DatabaseType

type DatabaseType string
const (
	DBType_Postgres DatabaseType = "Postgres"
)

func (DatabaseType) IsValid

func (dt DatabaseType) IsValid() error

type Query

type Query struct {
	Echo bool
	// contains filtered or unexported fields
}

func NewQuery

func NewQuery(schema model.Schema, database *Database) *Query

func (*Query) All

func (q *Query) All(response interface{}) error

func (*Query) Count

func (q *Query) Count(count *int) error

SELECT STATEMENTS

func (*Query) CoveredBy

func (q *Query) CoveredBy(target model.SpatialObject) *Query

func (*Query) CoveredByModel

func (q *Query) CoveredByModel(targetModel string) *Query

func (*Query) Covers

func (q *Query) Covers(target model.SpatialObject) *Query

func (*Query) CoversModel

func (q *Query) CoversModel(targetModel string) *Query

func (*Query) Create

func (q *Query) Create(object interface{}) (sql.Result, error)

func (*Query) Distinct

func (q *Query) Distinct() *Query

Functions for building up query

func (*Query) EchoQuery

func (q *Query) EchoQuery() *Query

func (*Query) Error

func (q *Query) Error() error

func (*Query) First

func (q *Query) First(response interface{}) error

func (*Query) GetAdapterInfo

func (q *Query) GetAdapterInfo() adapter.AdapterInfo

func (*Query) GetField

func (q *Query) GetField(field string) *model.Field

func (*Query) GetJoinSchemas

func (q *Query) GetJoinSchemas() map[string]model.Schema

func (*Query) GetMainSchema

func (q *Query) GetMainSchema() model.Schema

func (*Query) HasField

func (q *Query) HasField(field string) bool

func (*Query) HasFieldOfType

func (q *Query) HasFieldOfType(field string, datatype model.DataType) bool

func (*Query) HasSchema

func (q *Query) HasSchema(schema string) bool

func (*Query) HasWithinRange

func (q *Query) HasWithinRange(targets []model.SpatialObject, rangeMeters float64) *Query

func (*Query) Join

func (q *Query) Join(otherSchema string, clause query.Clause) *Query

func (*Query) LeftJoin

func (q *Query) LeftJoin(otherSchema string, clause query.Clause) *Query

func (*Query) Limit

func (q *Query) Limit(count uint64) *Query

func (*Query) Offset

func (q *Query) Offset(count uint64) *Query

func (*Query) Omit

func (q *Query) Omit(columns ...string) *Query

func (*Query) OrderBy

func (q *Query) OrderBy(orders ...query.Order) *Query

func (*Query) OrderByCol

func (q *Query) OrderByCol(column string, desc bool) *Query

func (*Query) OrderByColDistance

func (q *Query) OrderByColDistance(column string, target model.SpatialObject, desc bool) *Query

func (*Query) OrderByColDistances

func (q *Query) OrderByColDistances(column string, otherColumn string, desc bool) *Query

func (*Query) OrderByNearestTo

func (q *Query) OrderByNearestTo(target model.SpatialObject, desc bool) *Query

func (*Query) OrderByNearestToModel

func (q *Query) OrderByNearestToModel(targetModel string, desc bool) *Query

func (*Query) OuterJoin

func (q *Query) OuterJoin(otherSchema string, clause query.Clause) *Query

func (*Query) RightJoin

func (q *Query) RightJoin(otherSchema string, clause query.Clause) *Query

func (*Query) Select

func (q *Query) Select(columns ...string) *Query

func (*Query) Update

func (q *Query) Update(object interface{}) (sql.Result, error)

func (*Query) Where

func (q *Query) Where(clause query.Clause) *Query

func (*Query) WithinRangeOf

func (q *Query) WithinRangeOf(targets []model.SpatialObject, rangeMeters float64) *Query

func (*Query) WithinRangeOfModel

func (q *Query) WithinRangeOfModel(targetModel string, rangeMeters float64) *Query

type Result

type Result struct {
	Error        error
	RowsAffected int
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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