Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/salpagarov/lunex

Lunex Project
https://github.com/salpagarov/lunex

lua orm

Last synced: about 2 hours ago
JSON representation

Lunex Project

Awesome Lists containing this project

README

        

# DBI v0.1

Простой и быстрый интерфейс к базам данных SQL

## Пример использования

````lua
local db = require "DBI" ({
driver = "MySQL", -- имя файла DBD
connection = { -- настройки подключения к серверу базы данных
hostname = "localhost",
database = "lunex",
username = "user",
password = "p@ssw0rd",
codepage = "utf8"
},
scheme = { -- описание таблиц, типов данных и реляционных связей базы данных
user = {
id = "number", name = "string", password = "string", group = "group:id"
},
group = {
id = "number", name = "string"
}
}
})
users = db.user:limit(100):offset(0):orderBy("name"):get({group = {name = "Admin"}})
for _,u in pairs(users) do
print (u.name .. ':' .. u.password)
end
````
## Драйвер базы данных (DBD)

Файл с таблицей, содержащей функции `query`, `state` и `fetch`.
Реализация этих функций зависит от базы данных и используемых низкоуровневых библиотек.

## Настройки подключения

Таблица с данными, которые нужны драйверу для того, чтобы подключиться к серверу базы данных. Структура таблицы зависит от базы данных и соглашений DBD.

В примере используются соглашения драйвера `MySQL`.

## Схема

Схема отражает структуру базы данных - имена таблиц, имена колонок и их тип, реляционные связи. Если в качестве типа указана связка `таблица:колонка`, то это означает связь "много-к-одному".

**Не создавайте реляционные связи внутри одной таблицы, работать с деревьями модуль еще не умеет!**

# CRUD

## add

````lua
db.group:add({name = "Admin"})
db.user:add({name = "root", group = {name = "Admin"}})
````
Метод add конструирует и выполняет SQL-конструкцию INSERT.

Если схема предусматривает вложенный реляционный объект, в конструкцию INSERT вкладывается соответствующий SELECT.

**Все вложенные объекты должны существовать на момент выполнения операции, автоматически они не создаются.**

## get

````lua
users = db.user:limit(100):offset(0):orderBy("name"):get({group = {name = "Admin"}})
print (users[1].group.name) --> "Admin"
````
Метод формирует и выполняет конструкцию SELECT.

Возвращается массив (таблицу и натуральными числовыми ключами) из записей. Если поле записи ссылается на запись в другой таблице, то оно становится вложенной таблицей.

Дополнительные методы limit, offset, orderBy, orderByDesc и where дополняют запрос соответствующими конструкциями. **Они могут следовать в любом порядке, но должны находиться перед :get**

## put

````lua
db.user:where('name = "root"'):put({password = "r00t"})
````
Конструирует и выполняет SQL-конструкцию UPDATE.

**Без указания `where` изменения будут выполнены для всех записей таблицы.**

## del

````lua
db.user:del({group = {name = "Guest"}})
db.user:where('name = "root"'):del()
````
Метод конструирует и выполняет конструкцию DELETE FROM.

**Внимание: если передать методу пустую таблицу и не задать :where - будут удалены все записи.**