mirror of
https://github.com/ldmud/ldmud
synced 2026-08-12 14:26:05 -04:00
102 lines
3 KiB
Text
102 lines
3 KiB
Text
CONCEPT
|
|
sqlite - SQLite3 support
|
|
|
|
DESCRIPTION
|
|
On hosts with the SQLite3 package installed, the driver can be
|
|
configured to interface with SQLite databases. If that is done,
|
|
the driver defines the macro __SQLITE__ for LPC programs and
|
|
activates a number of efuns.
|
|
|
|
|
|
-- Configuration --
|
|
|
|
SQLite databases require no special configuration.
|
|
|
|
|
|
-- Usage --
|
|
|
|
Being file-based, using an SQLite database is very straightforward.
|
|
The interface consists of just 4 efuns:
|
|
|
|
* sl_open(filename)
|
|
Open the database <filename> for the current program. Each program
|
|
can only have one database open at any time.
|
|
|
|
* sl_exec(query, ...)
|
|
Execute <query> on the previously opened database.
|
|
|
|
* sl_insert_id()
|
|
After inserting into a table with an AUTO_INCREMENT field, this
|
|
efun returns the last generated value.
|
|
|
|
* sl_close()
|
|
Close the database file. This also automatically happens when the
|
|
object is destructed.
|
|
|
|
|
|
-- Security --
|
|
|
|
Accessing a SQLite database triggers a call to the master's
|
|
valid_write() with the func argument set to "sl_open".
|
|
|
|
If a query attempts to change an SQLite PRAGMA this will trigger a
|
|
privilege_violation("sqlite_pragma", "<name>", "<value>").
|
|
|
|
|
|
EXAMPLE
|
|
A simple server to store aliases could be implemented like this:
|
|
|
|
#define DATABASE "/var/aliases.sqlite"
|
|
|
|
public void create()
|
|
{
|
|
sl_open(DATABASE);
|
|
sl_exec("CREATE TABLE IF NOT EXISTS aliases ("
|
|
"name text not NULL,"
|
|
"alias text not NULL,"
|
|
"command text not NULL,"
|
|
"primary key (name, alias));");
|
|
}
|
|
|
|
public int AddAlias(string alias, string command, object ob)
|
|
{
|
|
sl_exec("INSERT OR REPLACE INTO aliases (name, alias, command) "
|
|
"VALUES (?, ?, ?)",
|
|
getuid(ob), alias, command);
|
|
return 1;
|
|
}
|
|
|
|
public int RemoveAlias(string alias, object ob)
|
|
{
|
|
sl_exec("DELETE FROM aliases "
|
|
"WHERE name = ? and alias = ?",
|
|
getuid(ob), alias);
|
|
return 1;
|
|
}
|
|
|
|
public mapping QueryAliases(object ob)
|
|
{
|
|
mixed * result = sl_exec("SELECT alias, command FROM aliases "
|
|
"WHERE name = ?",
|
|
getuid(ob));
|
|
return sizeof(result) ? mkmapping(transpose_array(result)...) : 0;
|
|
}
|
|
|
|
public string QueryAlias(string alias, object ob)
|
|
{
|
|
mixed * result = sl_exec("SELECT command FROM aliases "
|
|
"WHERE name = ? AND alias = ?",
|
|
getuid(ob), alias);
|
|
return sizeof(result) ? result[0][0] : 0;
|
|
}
|
|
|
|
|
|
AUTHOR
|
|
Bastian Hoyer and others.
|
|
|
|
HISTORY
|
|
SQLite support was added in 3.3.713.
|
|
|
|
SEE ALSO
|
|
mysql(C), pgsql(C),
|
|
sl_open(E), sl_exec(E), sl_insert_id(E), sl_close(E)
|