AuthPlatform/src/share/orm/model.lua

155 lines
4.3 KiB
Lua

------------------------------------------------------------------------------
-- Require --
------------------------------------------------------------------------------
require('orm.class.global')
require("orm.tools.func")
local Table = require('orm.class.table')
------------------------------------------------------------------------------
-- Constants --
------------------------------------------------------------------------------
-- Global
ID = "id"
AGGREGATOR = "aggregator"
QUERY_LIST = "query_list"
-- databases types
SQLITE = "sqlite3"
ORACLE = "oracle"
MYSQL = "mysql"
POSTGRESQL = "postgresql"
------------------------------------------------------------------------------
-- Model Settings --
------------------------------------------------------------------------------
if not DB then
print("[SQL:Startup] Can't find global database settings variable 'DB'. Creating empty one.")
DB = {}
end
DB = {
-- ORM settings
new = (DB.new == true),
DEBUG = (DB.DEBUG == true),
backtrace = (DB.backtrace == true),
-- database settings
type = DB.type or "sqlite3",
-- if you use sqlite set database path value
-- if not set a database name
name = DB.name or "database.db",
-- not sqlite db settings
host = DB.host or nil,
port = DB.port or nil,
username = DB.username or nil,
password = DB.password or nil
}
local sql, _connect
-- Get database by settings
if DB.type == SQLITE then
local luasql = require("luasql.sqlite3")
sql = luasql.sqlite3()
_connect = sql:connect(DB.name)
elseif DB.type == MYSQL then
local luasql = require("luasql.mysql")
sql = luasql.mysql()
print(DB.name, DB.username, DB.password, DB.host, DB.port)
_connect = sql:connect(DB.name, DB.username, DB.password, DB.host, DB.port)
elseif DB.type == POSTGRESQL then
local luasql = require("luasql.postgres")
sql = luasql.postgres()
print(DB.name, DB.username, DB.password, DB.host, DB.port)
_connect = sql:connect(DB.name, DB.username, DB.password, DB.host, DB.port)
else
BACKTRACE(ERROR, "Database type not suported '" .. tostring(DB.type) .. "'")
end
if not _connect then
BACKTRACE(ERROR, "Connect problem!")
end
-- if DB.new then
-- BACKTRACE(INFO, "Remove old database")
-- if DB.type == SQLITE then
-- os.remove(DB.name)
-- else
-- _connect:execute('DROP DATABASE `' .. DB.name .. '`')
-- end
-- end
------------------------------------------------------------------------------
-- Database --
------------------------------------------------------------------------------
-- Database settings
db = {
-- Database connect instance
connect = _connect,
-- Execute SQL query
execute = function (self, query)
BACKTRACE(DEBUG, query)
local result = self.connect:execute(query)
if result then
return result
else
BACKTRACE(WARNING, "Wrong SQL query")
end
end,
-- Return insert query id
insert = function (self, query)
local _cursor = self:execute(query)
return 1
end,
-- get parced data
rows = function (self, query, own_table)
local _cursor = self:execute(query)
local data = {}
local current_row = {}
local current_table
local row
if _cursor then
row = _cursor:fetch({}, "a")
while row do
for colname, value in pairs(row) do
current_table, colname = string.divided_into(colname, "_")
if current_table == own_table.__tablename__ then
current_row[colname] = value
else
if not current_row[current_table] then
current_row[current_table] = {}
end
current_row[current_table][colname] = value
end
end
table.insert(data, current_row)
current_row = {}
row = _cursor:fetch({}, "a")
end
end
return data
end
}
return Table