# Pinto [![](https://img.shields.io/crates/v/pinto.svg)][crate] [![](https://travis-ci.org/jacobbudin/pinto.svg?branch=master)][travis-ci] Pinto is a small, easy-to-use library for constructing SQL queries programmatically in [Rust](https://www.rust-lang.org). ⚠️ This library does not provide query parameterization. Do not use raw user-supplied data in your queries. If inputs are not properly escaped, your software will be suspectible to [SQL injection](https://en.wikipedia.org/wiki/SQL_injection) attacks. ## Compatibility The library aims to generate queries compatible with [PostgreSQL](https://www.postgresql.org), [MySQL](https://www.mysql.com), and [SQLite](https://sqlite.org). ## Install Add [`pinto`](https://crates.io/crates/pinto) as a dependency: ```toml [dependencies] pinto = "0.6.1" ``` ## Example ```rust let query = query_builder::select("users") .fields(&["id", "name"]) .filter("name = $1") .order_by("id", query_builder::Order::Asc) .build(); assert_eq!("SELECT id, name FROM users WHERE name = $1 ORDER BY id ASC;", query); ``` See included tests for additional examples. ## Features ### Statements - `DELETE` - `WHERE` clause - `INSERT` - `SELECT` - Table alias (`AS`) - Field selection - `JOIN` clause - `WHERE` clause - `GROUP BY` clause - `HAVING` clause - `ORDER BY` clause - `LIMIT` and `OFFSET` clause - `UPDATE` - `WHERE` clause ## Documentation - ["First Steps"](https://github.com/jacobbudin/pinto/wiki/First-Steps) (recommended for beginners) - [API documentation](https://docs.rs/pinto) ## Design Philosophy Pinto aims to be: 1. Easy-to-use — the library should be useful with a beginner's knowledge of Rust 2. Simple — the library's API should follow common SQL terminology and should allow its users to write concise, readable implementations Other design goals, such as performance, are relevant but not foremost. ## License MIT [crate]: https://crates.io/crates/pinto [travis-ci]: https://travis-ci.org/jacobbudin/pinto