Installing LuaSQL
About
LuaSQL is a simple interface from Lua to a DBMS - http://keplerproject.org/luasql/
It is also possible to use the FS ODBC support through freeswitch.Dbh, without installing LuaSQL
Since FreeSWITCH 1.4, you need to use Lua5.2 (http://www.lua.org/manual/5.2/).
For those willing to keep using Lua5.1 for backwards compatibility reasons, there is a mod_lua available in legacy directory `freeswitch/src/mod/legacy/languages/mod_lua/`
Click here to expand ToC
Dependencies
You will need to install Lua5.2, for instance on Debian7, you can run the following:
#Install Dependencies
apt-get install -y lua5.2 liblua5.2-dev
apt-get install -y libpq-dev
Install LuaSQL
Download LuaSQL 2.3.0:
wget https://github.com/keplerproject/luasql/archive/v2.3.0.zip
unzip v2.3.0.zip
cd luasql-2.3.0/
You will need to change the 'config' file to reflect your system and the DBMS to interface with.
The config file is divided into three broad sections:
- DB Name
- Paths to different libraries
- Paths to DB related libraries
First check the #2 if it matches your flavor of OS.
Then, you have to select only *one* driver to compile at a time. Suppose you want to compile MySQL, then you have to uncomment only the MySQL line from #1 and #3. All other lines in both these sections should be commented.
MySQL Server
sed -i 's/#T= mysql/T= odbc/g' config
sed -i 's/T=sqlite3/#T=sqlite3/g' config
On RHEL / CentOS, the path for MySQL libs and include is not the same as the default config file that comes with LuaSQL.
Please make the Driver parameters changes as follows:
DRIVER_LIBS= -L/usr/lib/mysql -lmysqlclient -lz
DRIVER_INCS= -I/usr/include/mysql
On x64_86 architecture, you need to change a few more things in 'config' file
Set proper values for LUA_LIBDIR, LUA_DIR , LUA_INC , DRIVER_LIBS, DRIVER_INCS
To allow compile properly, you will also need -fPIC:
sed -i 's/WARN= /WARN= -fPIC /g' config
Then compile and install:
make
make install
ODBC
If earlier you wanted to use Microsoft SQL Server earlier you would have changed the following:
sed -i 's/#T= mysql/T= odbc/g' config
sed -i 's/T=sqlite3/#T=sqlite3/g' config
Then make the Driver parameters changes as follows:
DRIVER_LIBS= -L/usr/lib64 -lodbc
DRIVER_INCS= -DUNIXODBC -I/usr/include
Compile and install!
Script examples
LuaSQL Mysql example
Next you can do something like:
#!/usr/local/bin/lua
require "luasql.mysql"
env = assert (luasql.mysql())
con = assert (env:connect("database","username","password","localhost"))
cur = assert (con:execute"SELECT * FROM table")
row = cur:fetch ({}, "a")
session:setVariable("varname", tostring(row.column));
cur:close()
con:close()
env:close()
LuaSQL ODBC example
For ODBC, you need to edit the odbc.ini and odbcinst.ini (both in /etc on RHEL). A typical MySQL configuration looks like:
File: odbcinst.ini
# Driver from the MyODBC package
# Setup from the unixODBC package
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc.so
Setup = /usr/lib/libodbcmyS.so
FileUsage = 1
Note that the *.so files should be in the folder.
File: odbc.ini
[mydsn]
Driver = MySQL
SERVER = localhost
PORT = 3306
DATABASE = mydatabase
OPTION = 67108864
SOCKET = /var/lib/mysql/mysql.sock
NOTE: I found you also need to set some environment variables for scripts to run properly
echo export LUA_PATH=/usr/local/freeswitch/scripts/?.lua >> /etc/bashrc
echo export LUA_CPATH=/usr/local/freeswitch/scripts/?.so >> /etc/bashrc
echo export PATH=$PATH:/usr/local/freeswitch/bin >> ~/.bashrc
NOTE: you need to symlink the shared object (i.e., mysql.so) to /usr/local/lib/lua/5.1/luasql/mysql.so
See also
- Script to install LuaSQL with Postgresql on Debian7 - https://gist.github.com/areski/6ab7ee00d7025a1eaa97