JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 11
  • Score
    100M100P100Q32752F
  • License MIT

A local JSON database using standard MySQL queries. The fastest way to get a database into your project.

Package Exports

  • faux-sql
  • faux-sql/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (faux-sql) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

faux-sql

A local JSON database using standard MySQL queries. The fastest way to get a database into your project.

  • Human readable, easy to edit data files
  • Super easy to swap out for a real DB connection whenever you're ready
  • Database files can be checked-in with git/svn for easy collaboration

Install

$ npm install faux-sql

Get started via command line

$ npx faux-sql "CREATE TABLE users (id int AUTO_INCREMENT, name varchar(100), age int)"
$ npx faux-sql "INSERT INTO users VALUES (1, 'Bill', 17), (2, 'Ted', 21)"
$ npx faux-sql "SELECT * FROM users"
[
  { id: 1, name: 'Bill', age: 17 },
  { id: 2, name: 'Ted', age: 21 },
]

Use in code

import FauxSQL from 'faux-sql';

const sql = new FauxSQL();

(async () => {
    await sql('INSERT INTO users (name, age) VALUES ("Neo", 33)');
    const results = await sql('SELECT * FROM users');
    console.log(results);
})();

or

import FauxSQL from 'faux-sql';

const sql = new FauxSQL();

sql('INSERT INTO users (name, age) VALUES ("Neo", 33)')
    .then(results => sql('SELECT * FROM users'))
    .then((results) => {
        console.log(results);
    });

Data Files

Each table gets saved into its own JSON file. The default file path for these files is <root>/database, however, the file path can be customized in the constructor's Options if desired.

Options

new FauxSQL({
    filePath: `${process.cwd()}/special/path`,
})

Multiple Databases

Each table's data file will be stored in the default database at the root of the database directory ./database/users.json unless a database name is specified in the query.

For example:

sql('CREATE TABLE p2.users (id int, name varchar(100))');
sql('INSERT INTO p2.users VALUES (1, "Bill"), (2, "Ted")');
sql('SELECT * FROM p2.users');

The above data will instead be stored at ./database/p2/users.json and is distinct from any data stored in the default database.

======

Supported Query Types

In most cases, you can just use MySQL as you would normally and everything will just work

SELECT

sql(`
SELECT age, count(*) as total
FROM users
WHERE age > 18 AND name != NULL
GROUP BY age
ORDER BY age DESC
LIMIT 10
`)

CREATE

sql(`
CREATE TABLE users (
id int AUTO_INCREMENT,
name varchar(100),
age int
)`)

INSERT

sql(`
INSERT INTO users (name, age)
VALUES ('Bill', 17), ('Ted', 21)
`)

DELETE

sql(`
DELETE FROM users
WHERE id > 1
`)

UPDATE

sql(`
UPDATE users
SET age = 23
WHERE id = 2
`)

TRUNCATE

sql(`
TRUNCATE TABLE users
`)

ALTER

sql(`
ALTER TABLE users
ADD email varchar(255) PRIMARY KEY
`)

sql(`
ALTER TABLE users
DROP name
`)

DROP

sql(`
DROP TABLE users
`)

SHOW

sql(`
SHOW DATABASES
`)

sql(`
SHOW TABLES
`)

INNER JOIN

sql(`
SELECT t1.name, t2.fav_animal, t2.fav_food AS snack
FROM users t1
INNER JOIN favorites t2
ON t1.id = t2.user_id
`)

LEFT JOIN

sql(`
SELECT t1.name, t3.hobby
FROM users t1
LEFT JOIN hobbies t3
ON t1.id = t3.user_id
ORDER BY 1
`)

RIGHT JOIN

sql(`
SELECT t1.name, t3.hobby
FROM users t1
RIGHT JOIN hobbies t3
ON t1.id = t3.user_id
ORDER BY 2
`)

CROSS JOIN

sql(`
SELECT *
FROM hobbies
CROSS JOIN skills
`)

Currently Unsupported

There are some MySQL features that are not yet supported. Please create an issue if you'd like to see a certain feature added.

  • UNION
  • HAVING