Quickstart

How to config ORM.jl

Database connection

First you need configure database connection, just need to create a .env file in the root folder.

Containing:

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=pass
DB_NAME=dbname
DB_PORT=3306

How to perform queries

How to create a Model

using ORM

Model(
    :User,
    [
        ("id", INTEGER(), [PrimaryKey(), AutoIncrement()]),
        ("name", TEXT(), [NotNull()]),
        ("email", TEXT(), [Unique(), NotNull()]),
        ("cpf", VARCHAR(11), [Unique(), NotNull()]),
        ("age", INTEGER(), [])
    ]
)

Inserting data

The data should be formatted as a Dict. Only NotNull fields need be provided. The return can be either an error or a Model Object (a User object in this example).

userData = Dict("name" => "Thiago", "email" => "thiago@example.com", "cpf" => "00000000000")
user = create(User, userData)

Search data

Now queries use a dictionary format:

foundUser = findFirst(User; query=Dict("where" => Dict("name" => "Thiago")))

Update data

updatedUser = update(User, Dict("where" => Dict("id" => user.id)), Dict("name" => "Thiago Updated"))

Upsert data

upsertUser = upsert(User, "email", "thiago@example.com",
                    Dict("name" => "Thiago Upserted", "email" => "thiago@example.com"))

Update by instance

foundUser.name = "Thiago Instance"
updatedInstance = update(foundUser)

Delete data

deleteResult = delete(foundUser)

Insert multiple records

records = [
    Dict("name" => "Bob", "email" => "bob@example.com", "cpf" => "11111111111"),
    Dict("name" => "Carol", "email" => "carol@example.com", "cpf" => "22222222222")
]
createdRecords = createMany(User, records)

Find multiple records

manyUsers = findMany(User)

Update many

updatedMany = updateMany(User, Dict("where" => Dict("name" => "Bob")), Dict("name" => "Bob Updated"))

Filter

_ = createMany(User, [
    Dict("name" => "Dan", "email" => "dan@example.com", "cpf" => "33333333333"),
    Dict("name" => "Eve", "email" => "eve@example.com", "cpf" => "44444444444")
])
filteredUsers = filter(User; name="Dan")

Delete multiple records

deleteManyResult = deleteMany(User, Dict("where" => "1=1"))

Update Many and Return

Updates multiple records and returns the updated records.

updatedManyAndReturn = updateManyAndReturn(User, Dict("where" => Dict("name" => "Carol")), Dict("name" => "Carol Updated"))

Pagination

Retrieve query results using limit, offset, and ordering.

# Retrieve first 2 users
page1 = findMany(User; query=Dict("limit" => 2, "offset" => 0, "orderBy" => "id"))
# Retrieve next 2 users starting from the third record
page2 = findMany(User; query=Dict("limit" => 2, "offset" => 2, "orderBy" => "id"))
# Retrieve remaining records
page3 = findMany(User; query=Dict("limit" => 2, "offset" => 4, "orderBy" => "id"))