A SQL query builder, inspired by SQLAlchemy
npm install sql-genA SQL query builder, inspired by SQLAlchemy.
npm install sql-gen
We can define tables using sql.table() and sql.column():
``javascript
import sql from "sql-gen";
const Author = sql.table("author", {
id: sql.column({name: "id", type: sql.types.int, primaryKey: true}),
name: sql.column({name: "name", type: sql.types.string})
});
const Book = sql.table("book", {
id: sql.column({name: "id", type: sql.types.int, primaryKey: true}),
authorId: sql.column({name: "author_id", type: sql.types.int}),
title: sql.column({name: "title", type: sql.types.string}),
genre: sql.column({name: "genre", type: sql.types.string})
});
`
We can then define a query:
`javascript`
const query = sql.from(Book)
.join(Author, sql.eq(Book.c.authorId, Author.c.id))
.where(sql.eq(Book.c.genre, "comedy"))
.select(Author.c.name, Book.c.title);
We can use compile() to turn a query into a string and parameters,
ready to pass into a database connection:
`javascript`
sql.compile(query)
// {
// "text": "SELECT author.name, book.title FROM book JOIN author ON book.author_id = author.id WHERE book.genre = ?",
// "params": ["comedy"]
// }
If using node-sqlite3:
`javascript`
const {text, params} = sql.compile(query);
const database = new sqlite3.Database("path/to/database");
database.all(text, ...params, (error, rows) => {
if (error) {
console.error(error);
} else {
console.log(rows);
}
});
Represent a table in a database. Takes the following arguments:
* name: the name of the table in the database.
* columns: the columns in the table.column()
The keys should be the name by which you want to refer to the columns.
The values should be the result of calling .
Returns an instance of Table, which has the following properties:
* c: the columns of the table, which can then be used in generating queries.`
For instance:
javascript`
const Author = table("author", {
id: sql.column({name: "id", type: sql.types.int, primaryKey: true}),
name: sql.column({name: "name", type: sql.types.string})
});
sql.from(Author).select(Author.c.name)
* as(alias): create a from clause for this table with an alternate name,alias
as specified by . For instance:`
javascript`
const Author = table("author", {
id: sql.column({name: "id", type: sql.types.int, primaryKey: true}),
name: sql.column({name: "name", type: sql.types.string})
});
const authorAlias = Author.as("favourite_author");
sql.from(authorAlias).select(authorAlias.c.name).where(sql.eq(authorAlias.c.id, 42))
* primaryKey:null
if the table has no columns defined as a primary key, this is .columns
Otherwise, this is an object with a property,
which is an array of all of the columns in the primary key.
Represent a column in a table.
Options should be an object with the following properties:
* name: the name of the column in the database.
* type: the type of the column. Use a value from types.
* primaryKey (optional):true
set to to mark this column as part of the table's primary key.
Defaults to false.
* nullable (optional): false
set to to mark this column as NOT NULL.
Defaults to true.
* types.int: SQL integer type.types.string
* : SQL string type.
Create an instance of Query using selectable as the primary from clause.
Query is used to generate SQL queries.
It has the following properties:
* join(selectable, condition):JOIN
creates a clause onto the given selectable.
* select(...columns):
specify the columns to select.
* distinct():DISTINCT
add a qualifier to this query.
* where(condition):WHERE
add a clause.WHERE
If there's already a clause, condition is added using AND.condition
should be a SQL expression.
* subquery():
turn this query into a subquery that can then be selected from,
similarly to a table.
Represents a CREATE TABLE statement.compile()
Use to compile it.
Turn a query or statement into a query that can be executed.
Returns an object with two properties:
* text: the text of the queryparams`: any parameters that have been generated during compilation of the query
*