hsql

package module
v1.0.9 Latest Latest
Warning

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

Go to latest
Published: Jan 7, 2024 License: Apache-2.0 Imports: 3 Imported by: 0

README

h-sql

GO SQL ORM

TableColumn

  • Defines the following properties for a sql column:
    • Table association
    • Name of column
    • Type of Column (i.e. String, Int, Date...)
    • Foreign Key

Table

A Table is defined by the following interface:

type Table interface {
	getName() string
	getColumns() []TableColumn
	getPrimaryKey() []TableColumn
}
Implementation
Define Columns
const personTableName = "person"

var personId = NewTableColumnBuilder(personTableName, "id", UUID).
	IsMutable(false).
	IsNullable(false).
	Build()
var firstName = NewColumnBuilder(personTableName, "first_name", String).IsNullable(false).Build()
var lastName = NewColumnBuilder(personTableName, "last_name", String).IsNullable(false).Build()
var middleName = NewColumn(personTableName, "last_name", String)
var dateOfBirth = NewColumnBuilder(personTableName, "dob", Date).IsNullable(false).Build()
var status = NewColumnBuilder(personTableName, "status", Boolean).IsNullable(false).Build()
var companyForeignKey = NewColumnBuilder(personTableName, "company_id", UUID).
	WithForeignKey(companyId).
	IsNullable(false).
	Build()

Implement Interface
type PersonTable struct {
}

func NewPersonTable() PersonTable {
    return PersonTable{}
}

/* Implement Table Interface */
func (table PersonTable) GetName() string {
    return personTableName
}

func (table PersonTable) GetColumns() []TableColumn {
    return []TableColumn{personId, firstName, lastName, middleName, companyForeignKey}
}

func (table PersonTable) GetPrimaryKey() []TableColumn {
    return []TableColumn{personId}
}
Additional Getters
func (table PersonTable) getId() TableColumn {
	return id
}

func (table PersonTable) getFirstName() TableColumn {
	return firstName
}

func (table PersonTable) getLastName() TableColumn {
	return lastName
}

func (table PersonTable) getMiddleName() TableColumn {
	return middleName
}

Query Examples

Simple
query := NewQuery().
    Select(userId)
    Select(firstName).
    Select(lastName).
    Where(Column(firstName).Eq("John"))
    Where(Column(secondName).Eq("Doe"))

var sql Sql = query.Generate()

The following SQL will be generated from the above query:

SELECT
    user.id
    user.first_name
    user.last_name
FROM
    user
WHERE
    user.first_name = :p0
    user.last_name = :p1

Of course the parameters will be:

{
    "p0" : "John",
    "p1" : "Doe"
}
With Ordering
query := NewQuery().
    Select(userId)
    Select(firstName).
    Select(lastName).
    Where(Column(firstName).like("John")).
    OrderBy(Asc(firstName))
    OrderBy(Asc(lastName))
    OrderBy(Desc(middleName))

Generated Sql

SELECT
    user.id,
    user.first_name,
    user.last_name
FROM
    user
WHERE
    user.first_name LIKE %:p0%
ORDER BY
    user.first_name ASC,
    user.last_name ASC
    user.middle_name DESC
Nested Conditions
query := NewQuery().
    Select(userId)
    Select(firstName).
    Select(lastName).
    Where(Column(firstName).like("John")).
    Where(Or(
        Column(lastName).Eq("Doe"),
        Column(lastName).Eq("Edwards")
    ))
    OrderBy(Asc(firstName))
    OrderBy(Asc(lastName))
    OrderBy(Desc(middleName))

Generated Sql

SELECT
    user.id,
    user.first_name,
    user.last_name
FROM
    user
WHERE
    user.first_name LIKE %:p0%
    AND (
        user.last_name = :p1
        OR user.last_name = :p2
    )
ORDER BY
    user.first_name ASC,
    user.last_name ASC
    user.middle_name DESC

Documentation

Index

Constants

View Source
const (
	ASC = iota + 1
	DESC
)
View Source
const DateTimeFormat = "2006-01-02T15:04:05"
View Source
const QUERY_FORMAT = `SELECT
:COLUMNS
FROM
:TABLES
:WHERE
:ORDER
:PAGE`

Variables

This section is empty.

Functions

This section is empty.

Types

type ColumnType

type ColumnType int
const (
	String ColumnType = iota + 1
	Date
	TimeStamp
	TimeStampTZ
	JsonB
	JsonArray
	Boolean
	Integer
	BigInt
	Flot
	BigFloat
	UUID
)

type Direction

type Direction int

func (Direction) String

func (d Direction) String() string

type Filter

type Filter struct {
	Predicate Predicate
	// contains filtered or unexported fields
}

func NestedAnd

func NestedAnd(filters ...Filter) *Filter

func NestedOr

func NestedOr(filters ...Filter) *Filter

func NewFilter

func NewFilter() *Filter

func (*Filter) GetColumn

func (filter *Filter) GetColumn() TableColumn

func (*Filter) GetNestedFilters

func (filter *Filter) GetNestedFilters() []Filter

func (*Filter) GetOperator

func (filter *Filter) GetOperator() Operator

func (*Filter) GetPredicate

func (filter *Filter) GetPredicate() string

func (*Filter) GetValue

func (filter *Filter) GetValue() any

func (*Filter) In

func (filter *Filter) In(value []any) *Filter

type FilterBuilder added in v1.0.7

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

func Column

func Column(column TableColumn) *FilterBuilder

func (*FilterBuilder) Eq added in v1.0.7

func (builder *FilterBuilder) Eq(value any) Filter

func (*FilterBuilder) Like added in v1.0.7

func (builder *FilterBuilder) Like(value string) Filter

type Operator

type Operator int
const (
	Eq Operator = iota + 1
	Like
	ColumnIn
)

type Predicate

type Predicate int
const (
	AND Predicate = iota + 1
	OR
)

type Sort

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

func Asc

func Asc(column TableColumn) Sort

func Desc

func Desc(column TableColumn) Sort

func NewSort

func NewSort(column TableColumn, direction Direction) Sort

func (Sort) GetColumn

func (sort Sort) GetColumn() TableColumn

func (Sort) GetDirection

func (sort Sort) GetDirection() Direction

type Sql

type Sql struct {
	Sql        string
	Parameters map[string]any
}

func NewSql

func NewSql(sql string, parameters map[string]any) Sql

type SqlStatement

type SqlStatement interface {
	Generate() (Sql, error)
}

type Table

type Table interface {
	GetName() string
	GetColumns() []TableColumn
	GetPrimaryKey() []TableColumn
}

type TableColumn

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

func NewColumn

func NewColumn(table string, name string, columnType ColumnType) TableColumn

func (TableColumn) AsTableColumn

func (column TableColumn) AsTableColumn() string

func (TableColumn) GetForeignKey

func (column TableColumn) GetForeignKey() TableColumn

func (TableColumn) GetName

func (column TableColumn) GetName() string

func (TableColumn) GetTable

func (column TableColumn) GetTable() string

func (TableColumn) GetType

func (column TableColumn) GetType() ColumnType

func (TableColumn) HasForeignKey

func (column TableColumn) HasForeignKey() bool

func (TableColumn) IsNullable

func (column TableColumn) IsNullable() bool

type TableColumnBuilder

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

func NewColumnBuilder

func NewColumnBuilder(table string, name string, columnType ColumnType) *TableColumnBuilder

func (*TableColumnBuilder) Build

func (builder *TableColumnBuilder) Build() TableColumn

func (*TableColumnBuilder) IsMutable

func (builder *TableColumnBuilder) IsMutable(mutable bool) *TableColumnBuilder

func (*TableColumnBuilder) IsNullable

func (builder *TableColumnBuilder) IsNullable(nullable bool) *TableColumnBuilder

func (*TableColumnBuilder) WithForeignKey

func (builder *TableColumnBuilder) WithForeignKey(column TableColumn) *TableColumnBuilder

func (*TableColumnBuilder) WithName

func (builder *TableColumnBuilder) WithName(name string) *TableColumnBuilder

func (*TableColumnBuilder) WithTable

func (builder *TableColumnBuilder) WithTable(table string) *TableColumnBuilder

func (*TableColumnBuilder) WithType

func (builder *TableColumnBuilder) WithType(columnType ColumnType) *TableColumnBuilder

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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