1*465d58a2Swiz.\" $NetBSD: sqlite.3lua,v 1.4 2014/01/06 09:30:26 wiz Exp $ 212cb1007Smbalmer.\" 312cb1007Smbalmer.\" Copyright (c) 2013 Marc Balmer <mbalmer@NetBSD.org>. All rights reserved. 412cb1007Smbalmer.\" 512cb1007Smbalmer.\" Redistribution and use in source and binary forms, with or without 612cb1007Smbalmer.\" modification, are permitted provided that the following conditions 712cb1007Smbalmer.\" are met: 812cb1007Smbalmer.\" 1. Redistributions of source code must retain the above copyright 912cb1007Smbalmer.\" notice, this list of conditions and the following disclaimer. 1012cb1007Smbalmer.\" 2. Redistributions in binary form must reproduce the above copyright 1112cb1007Smbalmer.\" notice, this list of conditions and the following disclaimer in the 1212cb1007Smbalmer.\" documentation and/or other materials provided with the distribution. 1312cb1007Smbalmer.\" 3. Neither the name of the University nor the names of its contributors 1412cb1007Smbalmer.\" may be used to endorse or promote products derived from this software 1512cb1007Smbalmer.\" without specific prior written permission. 1612cb1007Smbalmer.\" 1712cb1007Smbalmer.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 1812cb1007Smbalmer.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1912cb1007Smbalmer.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2012cb1007Smbalmer.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2112cb1007Smbalmer.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2212cb1007Smbalmer.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2312cb1007Smbalmer.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2412cb1007Smbalmer.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2512cb1007Smbalmer.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2612cb1007Smbalmer.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2712cb1007Smbalmer.\" SUCH DAMAGE. 2812cb1007Smbalmer.\" 2912cb1007Smbalmer.\" 3012cb1007Smbalmer.Dd October 28, 2013 3112cb1007Smbalmer.Dt SQLITE 3lua 3212cb1007Smbalmer.Os 3312cb1007Smbalmer.Sh NAME 3412cb1007Smbalmer.Nm sqlite 3512cb1007Smbalmer.Nd access 3612cb1007SmbalmerSQLite3 files from Lua 3712cb1007Smbalmer.Sh SYNOPSIS 3812cb1007Smbalmer.Cd "local sqlite = require 'sqlite'" 3912cb1007Smbalmer.Pp 4012cb1007Smbalmer.Bl -tag -width XXXX -compact 4112cb1007Smbalmer.\" 4212cb1007Smbalmer.\" GENERAL FUNCTIONS 4312cb1007Smbalmer.\" 4412cb1007Smbalmer.It Dv err = sqlite.initialize() 4512cb1007Smbalmer.It Dv sqlite.shutdown() 4612cb1007Smbalmer.It Dv db, err = sqlite.open(file [, flags]) 4712cb1007Smbalmer.It Dv version = sqlite.libversion() 4812cb1007Smbalmer.It Dv version = sqlite.libversion_number() 4912cb1007Smbalmer.It Dv id = sqlite.sourceid() 5012cb1007Smbalmer.\" 5112cb1007Smbalmer.\" DATABASE FUNCTIONS 5212cb1007Smbalmer.\" 5312cb1007Smbalmer.Pp 5412cb1007Smbalmer.It Dv err = sqlite.close(db) 5512cb1007Smbalmer.It Dv stmt, err = sqlite.prepare(db, sql) 5612cb1007Smbalmer.It Dv err = sqlite.exec(db, sql) 5712cb1007Smbalmer.It Dv err = sqlite.errcode(db) 5812cb1007Smbalmer.It Dv msg = sqlite.errmsg(db) 5912cb1007Smbalmer.It Dv res = sqlite.get_autocommit(db) 6012cb1007Smbalmer.It Dv res = sqlite.changes(db) 6112cb1007Smbalmer.\" 6212cb1007Smbalmer.\" STATEMENT FUNCTIONS 6312cb1007Smbalmer.\" 6412cb1007Smbalmer.Pp 6512cb1007Smbalmer.It Dv err = sqlite.bind(stmt, pidx, value) 6612cb1007Smbalmer.It Dv count = sqlite.bind_parameter_count(stmt) 6712cb1007Smbalmer.It Dv pidx = sqlite.bind_parameter_index(stmt, name) 6812cb1007Smbalmer.It Dv name = sqlite.bind_parameter_name(stmt, pidx) 6912cb1007Smbalmer.It Dv err = sqlite.step(stmt) 7012cb1007Smbalmer.It Dv value = sqlite.column(stmt, cidx) 7112cb1007Smbalmer.It Dv sqlite.reset(stmt) 7212cb1007Smbalmer.It Dv sqlite.clear_bindings(stmt) 7312cb1007Smbalmer.It Dv sqlite.finalize(stmt) 7412cb1007Smbalmer.It Dv name = sqlite.column_name(stmt, cidx) 7512cb1007Smbalmer.It Dv count = sqlite.column_count(stmt) 7612cb1007Smbalmer.El 7712cb1007Smbalmer.Sh DESCRIPTION 7812cb1007SmbalmerThe 7912cb1007Smbalmer.Nm 8012cb1007SmbalmerLua binding provides access to SQLite3 files. 8112cb1007Smbalmer.Sh GENERAL FUNCTIONS 8212cb1007Smbalmer.Bl -tag -width XXXX -compact 8312cb1007Smbalmer.It Dv err = sqlite.initialize() 8412cb1007SmbalmerInitialize the SQLite3 library. 8512cb1007SmbalmerWorkstation applications using SQLite normally do not need to invoke this 8612cb1007Smbalmerfunction. 8712cb1007Smbalmer.Pp 8812cb1007Smbalmer.It Dv sqlite.shutdown() 89*465d58a2SwizDeallocate any resources that were allocated by 90*465d58a2Swiz.Fn sqlite.initialize . 9112cb1007SmbalmerWorkstation applications using SQLite normally do not need to invoke this 9212cb1007Smbalmerfunction. 9312cb1007Smbalmer.Pp 9412cb1007Smbalmer.It Dv db, err = sqlite.open(file [, flags]) 9512cb1007SmbalmerOpen a database, optionally passing flags. 9612cb1007SmbalmerWhen called without flags, the database will be opened for reading and 9712cb1007Smbalmerwriting and it will be created if it does not yet exist. 9812cb1007SmbalmerThe following flags are defined: 9912cb1007Smbalmer.Pp 10012cb1007Smbalmer.Bl -tag -width XXXX -compact 10112cb1007Smbalmer.It Dv sqlite.OPEN_READONLY 10212cb1007SmbalmerThe database is opened in read-only mode. 10312cb1007SmbalmerIf the database does not already exist, an error is returned. 10412cb1007Smbalmer.Pp 10512cb1007Smbalmer.It Dv sqlite.OPEN_READWRITE 10612cb1007SmbalmerThe database is opened for reading and writing if possible, or reading only if 10712cb1007Smbalmerthe file is write protected by the operating system. 10812cb1007SmbalmerIn either case the database must already exist, otherwise an error is returned. 10912cb1007Smbalmer.Pp 11012cb1007Smbalmer.It Dv sqlite.OPEN_CREATE 11112cb1007SmbalmerThe database is opened for reading and writing, and is created if it does not 11212cb1007Smbalmeralready exist. 11312cb1007Smbalmer.El 11412cb1007Smbalmer.Pp 11512cb1007Smbalmer.It Dv version = sqlite.libversion() 11612cb1007SmbalmerReturn the SQLite3 library version number as a string. 11712cb1007Smbalmer.Pp 11812cb1007Smbalmer.It Dv version = sqlite.libversion_number() 11912cb1007SmbalmerReturn the SQLite3 library version number as a number. 12012cb1007Smbalmer.Pp 12112cb1007Smbalmer.It Dv id = sqlite.sourceid() 12212eade22SnjolyReturn the SQLite3 library source id as a string. 12312eade22Snjoly.El 12412cb1007Smbalmer.Sh DATABASE FUNCTIONS 12512cb1007SmbalmerDatabase functions operate on database objects returned by 126*465d58a2Swiz.Fn sqlite.open . 12712cb1007Smbalmer.Pp 12812cb1007Smbalmer.Bl -tag -width XXXX -compact 12912cb1007Smbalmer.It Dv err = sqlite.close(db) 13012cb1007SmbalmerClose an open database. 13112cb1007SmbalmerLike with all remaining database functions, this function can also be called 13212cb1007Smbalmerusing the Lua "colon" syntactic sugar as 13312cb1007Smbalmer.Em db:close() . 13412cb1007Smbalmer.Pp 13512cb1007Smbalmer.It Dv stmt, err = sqlite.prepare(db, sql) 13612cb1007SmbalmerReturn a prepared statement. 13712cb1007Smbalmer.Pp 13812cb1007Smbalmer.It Dv err = sqlite.exec(db, sql) 13912cb1007SmbalmerDirectly execute an SQL statement. 14012cb1007SmbalmerBe careful when creating SQL on the fly (SQL injection attacks). 14112cb1007Smbalmer.Pp 14212cb1007Smbalmer.It Dv err = sqlite.errcode(db) 14312cb1007SmbalmerReturn the numeric error code. 14412cb1007Smbalmer.Pp 14512cb1007Smbalmer.It Dv msg = sqlite.errmsg(db) 14612cb1007SmbalmerReturn the error message as a string. 14712cb1007Smbalmer.Pp 14812cb1007Smbalmer.It Dv res = sqlite.get_autocommit(db) 14912cb1007SmbalmerReturn the autocommit flag. 15012cb1007Smbalmer.Pp 15112cb1007Smbalmer.It Dv res = sqlite.changes(db) 15212cb1007SmbalmerThis function returns the number of database rows that were changed or inserted 15312cb1007Smbalmeror deleted by the most recently completed SQL statement on the database. 15412cb1007Smbalmer.El 15512cb1007Smbalmer.Sh STATEMENT FUNCTIONS 15612cb1007Smbalmer.Bl -tag -width XXXX -compact 15712cb1007Smbalmer.It Dv err = sqlite.bind(stmt, pidx, value) 15812cb1007SmbalmerBind 15912cb1007Smbalmer.Ar value 16012eade22Snjolyto the parameter 16112cb1007Smbalmer.Ar pidx 16212eade22Snjolyin the prepared statement 16312cb1007Smbalmer.Ar stmt . 16412cb1007Smbalmer.Pp 16512cb1007Smbalmer.It Dv count = sqlite.bind_parameter_count(stmt) 16612eade22SnjolyReturn the number of parameters in the prepared statement 16712cb1007Smbalmer.Ar stmt . 16812cb1007Smbalmer.Pp 16912cb1007Smbalmer.It Dv pidx = sqlite.bind_parameter_index(stmt, name) 17012eade22SnjolyReturn the parameter index for 17112cb1007Smbalmer.Ar name 17212cb1007Smbalmerin the prepared statement 17312cb1007Smbalmer.Ar stmt . 17412cb1007Smbalmer.Pp 17512cb1007Smbalmer.It Dv name = sqlite.bind_parameter_name(stmt, pidx) 17612eade22SnjolyReturn the parameter name for the parameter index 17712cb1007Smbalmer.Ar pidx 17812cb1007Smbalmerin the prepared statement 17912cb1007Smbalmer.Ar stmt . 18012cb1007Smbalmer.Pp 18112cb1007Smbalmer.It Dv err = sqlite.step(stmt) 18212cb1007SmbalmerExecute prepared statement 18312cb1007Smbalmer.Ar stmt . 18412cb1007Smbalmer.Pp 18512cb1007Smbalmer.It Dv value = sqlite.column(stmt, cidx) 18612cb1007SmbalmerReturn the value at column 18712cb1007Smbalmer.Ar cidx 18812cb1007Smbalmerin the prepared statement 18912cb1007Smbalmer.Ar stmt . 19012cb1007Smbalmer.Pp 19112cb1007Smbalmer.It Dv sqlite.reset(stmt) 192*465d58a2SwizThe 193*465d58a2Swiz.Fn sqlite.reset 194*465d58a2Swizfunction is called to reset a prepared statement object back 19512cb1007Smbalmerto its initial state, ready to be re-executed. 19612cb1007Smbalmer.Pp 19712cb1007Smbalmer.It Dv sqlite.clear_bindings(stmt) 198*465d58a2SwizContrary to the intuition of many, 199*465d58a2Swiz.Fn sqlite.reset 200*465d58a2Swizdoes not reset the bindings on a prepared statement. 201*465d58a2SwizUse this routine to reset all host parameters to 202*465d58a2Swiz.Dv NULL . 20312cb1007Smbalmer.Pp 20412cb1007Smbalmer.It Dv sqlite.finalize(stmt) 205*465d58a2SwizThe 206*465d58a2Swiz.Fn sqlite.finalize 207*465d58a2Swizfunction is called to delete a prepared statement. 20812cb1007Smbalmer.Pp 20912cb1007Smbalmer.It Dv name = sqlite.column_name(stmt, cidx) 21012cb1007SmbalmerReturn the name assigned to a particular column in the result set of a SELECT 21112cb1007Smbalmerstatement. 21212cb1007Smbalmer.Pp 21312cb1007Smbalmer.It Dv count = sqlite.column_count(stmt) 21412cb1007SmbalmerReturn the number of columns in the result set returned by the prepared 21512cb1007Smbalmerstatement 21612cb1007Smbalmer.Ar stmt . 21712cb1007SmbalmerThis routine returns 0 if 21812cb1007Smbalmer.Ar stmt 21912cb1007Smbalmeris an SQL statement that does not return data (for example an UPDATE). 22012cb1007Smbalmer.El 22112eade22Snjoly.Sh ERROR CODES 22212cb1007SmbalmerMost functions return an error code, the following error codes 22312cb1007Smbalmerare defined: 22412cb1007Smbalmer.Pp 22512eade22Snjoly.Bl -tag -width XXXX -compact 22612cb1007Smbalmer.It Dv sqlite.OK 22712cb1007SmbalmerSuccessful result. 22812cb1007Smbalmer.Pp 22912cb1007Smbalmer.It Dv sqlite.ERROR 23012cb1007SmbalmerSQL error or missing database. 23112cb1007Smbalmer.Pp 23212cb1007Smbalmer.It Dv sqlite.INTERNAL 23312cb1007SmbalmerInternal logic error in SQLite. 23412cb1007Smbalmer.Pp 23512cb1007Smbalmer.It Dv sqlite.PERM 23612cb1007SmbalmerAccess permission denied. 23712cb1007Smbalmer.Pp 23812cb1007Smbalmer.It Dv sqlite.ABORT 23912cb1007SmbalmerCallback routine requested an abort. 24012cb1007Smbalmer.Pp 24112cb1007Smbalmer.It Dv sqlite.BUSY 24212cb1007SmbalmerThe database file is locked. 24312cb1007Smbalmer.Pp 24412cb1007Smbalmer.It Dv sqlite.LOCKED 24512cb1007SmbalmerA table in the database is locked. 24612cb1007Smbalmer.Pp 24712cb1007Smbalmer.It Dv sqlite.NOMEM 24812cb1007SmbalmerOut of memory. 24912cb1007Smbalmer.Pp 25012cb1007Smbalmer.It Dv sqlite.READONLY 25112cb1007SmbalmerAttempt to write a readonly database. 25212cb1007Smbalmer.Pp 25312cb1007Smbalmer.It Dv sqlite.INTERRUPT 254f5b7cc34SwizOperation terminated by 255f5b7cc34Swiz.Fn sqlite3_interrupt . 25612cb1007Smbalmer.Pp 25712cb1007Smbalmer.It Dv sqlite.IOERR 25812cb1007SmbalmerSome kind of disk I/O error occurred. 25912cb1007Smbalmer.Pp 26012cb1007Smbalmer.It Dv sqlite.CORRUPT 26112cb1007SmbalmerThe database disk image is malformed. 26212cb1007Smbalmer.Pp 26312cb1007Smbalmer.It Dv sqlite.NOTFOUND 264f5b7cc34SwizUnknown opcode in 265f5b7cc34Swiz.Fn sqlite3_file_control . 26612cb1007Smbalmer.Pp 26712cb1007Smbalmer.It Dv sqlite.FULL 26812cb1007SmbalmerInsertion failed because database is full. 26912cb1007Smbalmer.Pp 27012cb1007Smbalmer.It Dv sqlite.CANTOPEN 27112cb1007SmbalmerUnable to open the database file. 27212cb1007Smbalmer.Pp 27312cb1007Smbalmer.It Dv sqlite.PROTOCOL 27412cb1007SmbalmerDatabase lock protocol error. 27512cb1007Smbalmer.Pp 27612cb1007Smbalmer.It Dv sqlite.EMPTY 27712cb1007SmbalmerDatabase is empty. 27812cb1007Smbalmer.Pp 27912cb1007Smbalmer.It Dv sqlite.SCHEMA 28012cb1007SmbalmerThe database schema changed. 28112cb1007Smbalmer.Pp 28212cb1007Smbalmer.It Dv sqlite.TOOBIG 28312cb1007SmbalmerString or BLOB exceeds size limit. 28412cb1007Smbalmer.Pp 28512cb1007Smbalmer.It Dv sqlite.CONSTRAINT 28612cb1007SmbalmerAbort due to constraint violation. 28712cb1007Smbalmer.Pp 28812cb1007Smbalmer.It Dv sqlite.MISMATCH 28912cb1007SmbalmerData type mismatch. 29012cb1007Smbalmer.Pp 29112cb1007Smbalmer.It Dv sqlite.MISUSE 29212cb1007SmbalmerLibrary used incorrectly. 29312cb1007Smbalmer.Pp 29412cb1007Smbalmer.It Dv sqlite.NOLFS 29512cb1007SmbalmerUses OS features not supported on host. 29612cb1007Smbalmer.Pp 29712cb1007Smbalmer.It Dv sqlite.AUTH 29812cb1007SmbalmerAuthorization denied. 29912cb1007Smbalmer.Pp 30012cb1007Smbalmer.It Dv sqlite.FORMAT 30112cb1007SmbalmerAuxiliary database format error. 30212cb1007Smbalmer.Pp 30312cb1007Smbalmer.It Dv sqlite.RANGE 304*465d58a2Swiz2nd parameter to 305*465d58a2Swiz.Fn sqlite.bind 306*465d58a2Swizout of range. 30712cb1007Smbalmer.Pp 30812cb1007Smbalmer.It Dv sqlite.NOTADB 30912cb1007SmbalmerFile opened that is not a database file. 31012cb1007Smbalmer.Pp 31112cb1007Smbalmer.It Dv sqlite.ROW 312*465d58a2Swiz.Fn sqlite.step 313*465d58a2Swizhas another row ready. 31412cb1007Smbalmer.Pp 31512cb1007Smbalmer.It Dv sqlite.DONE 316*465d58a2Swiz.Fn sqlite.step 317*465d58a2Swizhas finished executing. 31812cb1007Smbalmer.El 31912cb1007Smbalmer.Sh SEE ALSO 32012cb1007Smbalmer.Xr lua 1 , 32112cb1007Smbalmer.Xr luac 1 , 32212cb1007Smbalmer.Xr sqlite3 1 , 32312cb1007Smbalmer.Xr intro 3lua 32412cb1007Smbalmer.Sh HISTORY 32512cb1007SmbalmerAn 32612cb1007Smbalmer.Nm 32712cb1007Smbalmermanual appeared in 32812cb1007Smbalmer.Nx 7.0 . 32912cb1007Smbalmer.Sh AUTHORS 33012cb1007Smbalmer.An -nosplit 33112cb1007SmbalmerThe 33212cb1007Smbalmer.Nm 33312cb1007SmbalmerLua binding was written by 33412cb1007Smbalmer.An Marc Balmer Aq Mt mbalmer@NetBSD.org . 335