orm

package
v0.1.5 Latest Latest
Warning

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

Go to latest
Published: Mar 1, 2026 License: MIT Imports: 15 Imported by: 1

README

SQLite3 Connector für Go

Funktionen

  • Öffnen und Schließen einer SQLite3-Datenbank
  • Fehlerbehandlung und Ping-Test
  • Nutzt Go-Standardbibliothek database/sql und den Treiber github.com/mattn/go-sqlite3

Beispiel

import "github.com/a-digi/coco-orm"

func main() {
    connector, err := db.NewConnector("test.db")
    if err != nil {
        panic(err)
    }
    defer connector.Close()
    // connector.DB ist eine *sql.DB Instanz
}

Dynamic Queries and Pagination

The ORM offers advanced retrieval using reflection-based generic slicing and dynamic query building via the model.SelectQuery structure.

FindAllDynamic

A non-generic version of FindAll allowing dynamically created interface{} slices, heavily useful when your entity type isn't known at compile-time:

// create a dynamic slice pointer ptr to hold the objects
sliceType := reflect.SliceOf(entityType)
resultsPtr := reflect.New(sliceType)

err := db.FindAllDynamic(manager, resultsPtr.Interface())
FindByQuery

Uses a model.SelectQuery wrapper to automatically handle filtering, sorting, and pagination.

import "github.com/a-digi/coco-orm/orm/model"

query := model.SelectQuery{
    Entity: resultsPtr.Interface(), // Obligatory pointer to struct slice
    Pagination: model.Pagination{
        Page:  1,
        Limit: 10,
    },
    Filters: []model.Filter{
        {
            Column: "title",
            Value:  "Admin",
            Type:   model.FilterTypePartialMatch, // "LIKE %Admin%"
        },
    },
    Sorting: []model.Sorting{
        {
            Column:    "created_at",
            Direction: model.SortDirectionDesc,
        },
    },
}

err := db.FindByQuery(manager, query)

Documentation

Index

Constants

View Source
const (
	DefaultPage  = 1
	DefaultLimit = 10
)

Variables

This section is empty.

Functions

func CloseAllConnections

func CloseAllConnections() error

func EagerLoadManyToMany added in v0.1.5

func EagerLoadManyToMany[S any, T any](manager *DatabaseManager, sources *[]S, relationFieldName string) error

EagerLoadManyToMany loads many-to-many relations for a slice of source entities. S is the source entity type, T is the target entity type.

func EagerLoadManyToOne added in v0.1.5

func EagerLoadManyToOne[S any, T any](manager *DatabaseManager, sources *[]S, relationFieldName string) error

EagerLoadManyToOne loads many-to-one relations for a slice of source entities. S is the source entity type, T is the target entity type being pointed to.

func FindAll added in v0.1.4

func FindAll[T any](manager *DatabaseManager, entities *[]T) error

func FindByEntity added in v0.1.4

func FindByEntity(manager *DatabaseManager, entities interface{}) error

func FindByQuery added in v0.1.4

func FindByQuery(manager *DatabaseManager, selectQuery model.SelectQuery) error

func SaveManyToMany added in v0.1.5

func SaveManyToMany[S any, T any, J any](manager *DatabaseManager, source *S, relationFieldName string) error

SaveManyToMany synchronization logic. J represents the junction entity (e.g. UserGroupMember) S represents the source entity (e.g. User) T represents the target entity (e.g. Group)

Types

type Connector

type Connector struct {
	DB *sql.DB
	// contains filtered or unexported fields
}

func NewConnector

func NewConnector(cfg DatabaseConfig) (*Connector, error)

func (*Connector) Close

func (c *Connector) Close() error

type DatabaseConfig

type DatabaseConfig struct {
	DbName        string
	DirectoryPath string
}

func NewDatabaseConfig

func NewDatabaseConfig(dbName, directoryPath string) DatabaseConfig

type DatabaseManager

type DatabaseManager struct {
	Connector        *Connector
	MigrationFolders []string
	Hydrator         *Hydrator
}

func NewDatabaseManager

func NewDatabaseManager(dbName string, dbDir string, migrationFolders []string) (*DatabaseManager, error)

func (*DatabaseManager) AutoEagerLoadM2MRelations added in v0.1.5

func (manager *DatabaseManager) AutoEagerLoadM2MRelations(entitiesPtr interface{}) error

AutoEagerLoadM2MRelations dynamically inspects a slice of entities and eager loads any m2m relations.

func (*DatabaseManager) AutoEagerLoadRelations added in v0.1.5

func (manager *DatabaseManager) AutoEagerLoadRelations(entitiesPtr interface{}) error

AutoEagerLoadRelations dynamically inspects a slice of entities and eager loads any m2o relations. This is slower than strictly typed EagerLoadManyToOne because it relies entirely on reflection mapping, but it is extremely useful for generic REST handlers where compile-time types T and S are unknown.

func (*DatabaseManager) GenerateUuidV4

func (manager *DatabaseManager) GenerateUuidV4() string

func (*DatabaseManager) Insert

func (manager *DatabaseManager) Insert(query string, args ...interface{}) (sql.Result, error)

func (*DatabaseManager) QueryBuilder

func (manager *DatabaseManager) QueryBuilder() *query_builder.QueryBuilder

func (*DatabaseManager) SyncMigrations

func (manager *DatabaseManager) SyncMigrations() error

func (*DatabaseManager) TableExists

func (manager *DatabaseManager) TableExists(tableName string) (bool, error)

type Hydrator

type Hydrator struct{}

func (*Hydrator) Hydrate

func (h *Hydrator) Hydrate(rows *sql.Rows, elemType reflect.Type, columns []string) (reflect.Value, error)

func (*Hydrator) HydrateRows

func (h *Hydrator) HydrateRows(rows *sql.Rows, destSlicePtr interface{}) error

type Migration

type Migration struct {
	ID        string
	CreatedAt time.Time
}

type RelationHandler added in v0.1.5

type RelationHandler[S any, T any] interface {
	Load(manager *DatabaseManager, sources *[]S) error
	Save(manager *DatabaseManager, source *S) error
	Delete(manager *DatabaseManager, source *S) error
}

RelationHandler defines generic operations for managing entity relationships (e.g., Many-to-Many). S represents the source entity type, and T represents the target entity type.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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