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
use super::Expression; use backend::Backend; use query_builder::*; use result::QueryResult; use sql_types::BigInt; sql_function! { /// Creates a SQL `COUNT` expression /// /// As with most bare functions, this is not exported by default. You can import /// it specifically as `diesel::dsl::count`, or glob import /// `diesel::dsl::*` /// /// # Examples /// /// ```rust /// # #[macro_use] extern crate diesel; /// # include!("../doctest_setup.rs"); /// # use diesel::dsl::*; /// # /// # fn main() { /// # use schema::animals::dsl::*; /// # let connection = establish_connection(); /// assert_eq!(Ok(1), animals.select(count(name)).first(&connection)); /// # } /// ``` #[aggregate] fn count<T>(expr: T) -> BigInt; } /// Creates a SQL `COUNT(*)` expression /// /// For selecting the count of a query, and nothing else, you can just call /// [`count`](../query_dsl/trait.QueryDsl.html#method.count) /// on the query instead. /// /// As with most bare functions, this is not exported by default. You can import /// it specifically as `diesel::dsl::count_star`, or glob import /// `diesel::dsl::*` /// /// # Examples /// /// ```rust /// # #[macro_use] extern crate diesel; /// # include!("../doctest_setup.rs"); /// # use diesel::dsl::*; /// # /// # fn main() { /// # use schema::users::dsl::*; /// # let connection = establish_connection(); /// assert_eq!(Ok(2), users.select(count_star()).first(&connection)); /// # } /// ``` pub fn count_star() -> CountStar { CountStar } #[derive(Debug, Clone, Copy, QueryId, DieselNumericOps)] #[doc(hidden)] pub struct CountStar; impl Expression for CountStar { type SqlType = BigInt; } impl<DB: Backend> QueryFragment<DB> for CountStar { fn walk_ast(&self, mut out: AstPass<DB>) -> QueryResult<()> { out.push_sql("COUNT(*)"); Ok(()) } } impl_selectable_expression!(CountStar);