/lib-websql

Web SQL library for use in the browser/electron/nwjs.

Primary LanguageJavaScriptMIT LicenseMIT

lib-websql

This is a Web SQL library for use in the browser. Very useful in Electron and NW.js Apps, things that require complex queries. I know Web SQL is deprecated, but browsers have not yet announces it's removal so I am hoping it will stick around a long time or until they replace it with a relational database. It also might be worth checking out some alternatives like RxDB, PouchDB, LinvoDB, NeDB or sql.js.

This library is written with ES7 async await so using a browser that supports it is key.

Note: When using await you must used this library inside an async function. It is recommended having a decent amount of knowledge on SQLite3 which is what WebSQL is using in-browser.

Usage

Initialize

async function init() {
	const WebSQl = require('./websql')
	const websql = new WebSQl(options)
	await websql.connect(options)
}

Options (all optional)

  • db database name
  • description database description
  • version database version
  • size (2 * 1024 * 1024)

Create a Table

let fields = [
	websql.field({name: 'id', type: 'integer', index: 'PRIMARY KEY'}),
	websql.field({name: 'idArtist', type: 'integer'}),
	websql.field({name: 'title', type: 'integer'}),
	websql.field({name: 'description', type: 'varchar', length: 255, default: ''}),
	websql.field({name: 'entered', type: 'integer'}),
	websql.field({name: 'updated', type: 'integer'})
]
let results = await websql.tableCreate('album', fields, true)

Note Read more about field types below.

Note The 3rd parameter is a boolean if you want to use IF NOT EXISTS.

MISC

List Tables

let tables = await websql.tables()

Check if Table Exists

let bool = await websql.tableExists('album')

List Table Fields

let fields = await websql.tableFields('album')

Drop a Table

await tableDrop('album')

Field Object

When creating tables or listing fields the field object is always used. It consists of the following properties:

  • name Field/Column Name
  • type Column Type (See Below)
  • length Size of Type
  • null If Column Can Be Null
  • index If the field is indexed UNIQUE, PRIMARY KEY, KEY
  • ai If the integer is Auto Increment

(SQLite3) Column Types:

BLOB, BOOL, CLOB, FLOAT, INTEGER, NUMERIC, REAL, VARCHAR, NVCHAR, TEXT

Inserting

const now = Math.floor(new Date().getTime() / 1000)
const idAlbum = await websql.insert('album', {
	idArtist: 1,
	title: 'Cows and Chickens',
	description: 'This is really great!',
	entered: now,
	updated: now
}, false)

Note The 3rd parameter is a boolean if you want to use IGNORE.

Updating

await websql.update('album', 1, {
	updated: Math.floor(new Date().getTime() / 1000)
})

Fetching a Record

const record = await websql.fetch('album', {id: 2})

Fetching Multiple Records

const record = await websql.select('album', {idArtist: 1})

Running a Query With Results

let query = 'SELECT * FROM ' + websql.escapeField(table) + ' WHERE id > ?'
let values = [20]
var results = await websql.query(query, values, true)
for(var i = 0; i < results.row.length; i++)
	console.log('row', i, results.rows.item(i))

Note The 3rd parameter is a boolean if you want processed results, false will return a SQLite results object.

Deleting Rows

await websql.delete('album', {id: 1})

To Do

  • Where Operators
  • Table Structure Sync