155 lines
4.3 KiB
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
|