1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
//! A constructor of SQL statements. //! //! ## Example //! //! ``` //! use sql::prelude::*; //! //! // CREATE TABLE `users` (`id` INTEGER NOT NULL, `name` TEXT, `photo` BLOB) //! println!("{}", create_table("users").column("id".integer().not_null()) //! .column("name".string()) //! .column("photo".binary()) //! .compile().unwrap()); //! //! // DELETE FROM `users` //! println!("{}", delete_from("users").compile().unwrap()); //! //! // INSERT INTO `users` (`id`, `name`) VALUES (?, ?), (?, ?) //! println!("{}", insert_into("users").columns(&["id", "name"]).batch(2) //! .compile().unwrap()); //! //! // SELECT * FROM `users` WHERE `name` LIKE 'A%' //! println!("{}", select_from("users").so_that(column("name").like("A%")) //! .compile().unwrap()); //! //! // SELECT * FROM `users` ORDER BY `name` DESC //! println!("{}", select_from("users").order_by(column("name").descend()) //! .compile().unwrap()); //! //! // SELECT `name`, `photo` FROM `users` LIMIT 1 //! println!("{}", select_from("users").columns(&["name", "photo"]).limit(1) //! .compile().unwrap()); //! ``` use std::{error, fmt, result}; /// An error. pub struct Error(String); /// A result. pub type Result<T> = result::Result<T, Error>; /// A data type. #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum Type { /// The binary type. Binary, /// The floating-point type. Float, /// The integer type. Integer, /// The string type. String, } /// An object that can be assigend a type. pub trait Typable where Self: Sized { /// The type produced after setting a type. type Output; /// Set the type. fn kind(self, value: Type) -> Self::Output; /// Set the type to `Binary`. #[inline] fn binary(self) -> Self::Output { self.kind(Type::Binary) } /// Set the type to `Float`. #[inline] fn float(self) -> Self::Output { self.kind(Type::Float) } /// Set the type to `Integer`. #[inline] fn integer(self) -> Self::Output { self.kind(Type::Integer) } /// Set the type to `String`. #[inline] fn string(self) -> Self::Output { self.kind(Type::String) } } impl fmt::Debug for Error { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { self.0.fmt(formatter) } } impl fmt::Display for Error { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { self.0.fmt(formatter) } } impl error::Error for Error { fn description(&self) -> &str { &self.0 } } macro_rules! raise( ($message:expr) => ( return Err(::Error($message.to_string())); ); ); pub mod grammar; pub mod language; pub mod prelude;