Categorygithub.com/lowl11/lazy-entity
module
0.1.11
Repository: https://github.com/lowl11/lazy-entity.git
Documentation: pkg.go.dev

# README

lazy-entity - SQL builder & mini-ORM library

builder - building SQL queries
mini-ORM - creating simple repositories which are based on SQL builder

SQL Builder

  • SELECT - queryapi.Select()
  • INSERT - queryapi.Insert()
  • UPDATE - queryapi.Update()
  • DELETE - queryapi.Delete()

Repositories

  • IRepository - repository.NewBase()
  • ICrudRepository - repository.NewCrud[<entity_type>, <id_type>]()

SQL Builder Examples

SELECT

Go

builder := queryapi.Select()
builder.
    Fields("id", "full_name", "phone", "is_resident", "contact.id", "COUNT(id)").
    From("users").
    Alias("user").
    Join("contacts", "contact", builder.And(builder.Equal("phone", "$contact.phone"))).
    Where(
        builder.And(
            builder.Or(
                builder.Equal("phone", "+77474858669"),
                builder.ILike("full_name", "%ussayev%"),
            ),
            builder.Like("full_name", "%Ussayev%"),
            builder.Equal("id", ":id"),
        ),
        builder.Or(
            builder.Equal("is_resident", 1),
            builder.Equal("is_resident", 0),
        ),
        builder.Gte("id", 25),
    ).
    OrderBy(order_types.Desc, "phone").
    Having(builder.Count("id", 25, builder.Lte)).
    GroupBy("id").
    Offset(50).
    Limit(10)

fmt.Println("query:")
fmt.Println(builder.Build())

SQL

SELECT 
        user.id, 
        user.full_name, 
        user.phone, 
        user.is_resident, 
        contact.id, 
        COUNT(user.id)
FROM users AS user
        INNER JOIN contacts AS contact ON (user.phone = contact.phone)
WHERE 
        ((user.phone = '+77474858669' OR user.full_name ILIKE '%ussayev%') AND user.full_name LIKE '%Ussayev%' AND user.id = :id) AND 
        (user.is_resident = 1 OR user.is_resident = 0) AND 
        user.id >= 25
ORDER BY user.phone DESC
GROUP BY user.id
HAVING COUNT(user.id) <= 25
OFFSET 50
LIMIT 10

INSERT

Go

query := queryapi.
    Insert("users").
    Fields("id", "full_name", "phone", "is_resident").
    Variables(1, "Ussayev Yerik", "+77474858669", true).
    Build()

fmt.Println("query:")
fmt.Println(query)

SQL

INSERT INTO users (id, full_name, phone, is_resident)
VALUES (1, 'Ussayev Yerik', '+77474858669', true)

UPDATE

Go

builder := queryapi.Update("users")
builder.
    Set("phone", "+7788001103").
    Set("is_resident", "false").
    Where(builder.Equal("id", 5))

fmt.Println("query:")
fmt.Println(builder.Build())

SQL

UPDATE users
SET
        phone = '+7788001103',
        is_resident = 'false'
WHERE 
        id = 5

DELETE

Go

builder := queryapi.Delete("users")
builder.
    Where(builder.Or(
        builder.Equal("id", 5),
        builder.Gt("id", 10),
    ))

fmt.Println("query:")
fmt.Println(builder.Build())

SQL

DELETE FROM users
WHERE 
        (id = 5 OR id > 10)

mini-ORM examples


Create Crud-Repository

contactRepo := repository.NewCrud[Entity, int](
	connection, // *sqlx.Conn
	"contacts", // table name
	repo_config.Crud{ // config for ICrudRepository
	    Alias: "contact",
    },
)

list, err := contactRepo.GetAll()
if err != nil {
	log.Fatal(err)
}

for _, item := range list {
	fmt.Println(list)
}

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author