Merge pull request #2247 from diesel-rs/sg-main-crate-2018

Migrate the main crate to the 2018 edition.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 08afbbb..3599b52 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@
 ### Added
 
 * `NonAggregate` can now be derived for simple cases.
+
 * `Connection` and `SimpleConnection` traits are implemented for a broader range
   of `r2d2::PooledConnection<M>` types when the `r2d2` feature is enabled.
 
@@ -18,14 +19,13 @@
 * All expression methods can now be called on expressions of nullable types.
 
 * Added `BoxedSqlQuery`. This allows users to do a variable amount of `.sql` or
-
   `.bind` calls without changing the underlying type.
 
 * Added `.sql` to `SqlQuery` and `UncheckedBind` to allow appending SQL code to
-
   an existing query.
 
-
+* The `MacAddr` SQL type can now be used without enabling the `network-address`
+  feature.
 
 ### Removed
 
diff --git a/diesel/Cargo.toml b/diesel/Cargo.toml
index 1679447..3e766be 100644
--- a/diesel/Cargo.toml
+++ b/diesel/Cargo.toml
@@ -10,6 +10,7 @@
 repository = "https://github.com/diesel-rs/diesel"
 keywords = ["orm", "database", "blockchain", "sql"]
 categories = ["database"]
+edition = "2018"
 
 [dependencies]
 byteorder = "1.0"
diff --git a/diesel/src/associations/belongs_to.rs b/diesel/src/associations/belongs_to.rs
index f891336..269fa00 100644
--- a/diesel/src/associations/belongs_to.rs
+++ b/diesel/src/associations/belongs_to.rs
@@ -1,9 +1,9 @@
 use super::{HasTable, Identifiable};
-use dsl::{Eq, EqAny, Filter, FindBy};
-use expression::array_comparison::AsInExpression;
-use expression::AsExpression;
-use prelude::*;
-use query_dsl::methods::FilterDsl;
+use crate::dsl::{Eq, EqAny, Filter, FindBy};
+use crate::expression::array_comparison::AsInExpression;
+use crate::expression::AsExpression;
+use crate::prelude::*;
+use crate::query_dsl::methods::FilterDsl;
 
 use std::borrow::Borrow;
 use std::hash::Hash;
diff --git a/diesel/src/associations/mod.rs b/diesel/src/associations/mod.rs
index a68c79c..947af39 100644
--- a/diesel/src/associations/mod.rs
+++ b/diesel/src/associations/mod.rs
@@ -31,7 +31,7 @@
 //! #
 //! # fn run_test() -> QueryResult<()> {
 //! #     let connection = establish_connection();
-//! #     use users::dsl::*;
+//! #     use self::users::dsl::*;
 //! let user = users.find(2).get_result::<User>(&connection)?;
 //! let users_post = Post::belonging_to(&user)
 //!     .first(&connection)?;
@@ -118,7 +118,7 @@
 //! # }
 //! #
 //! # fn main() {
-//! #   use users::dsl::*;
+//! #   use self::users::dsl::*;
 //! #   let connection = establish_connection();
 //! #
 //! let user = users.find(1).first::<User>(&connection).expect("Error loading user");
@@ -178,8 +178,8 @@
 //! #
 //! # fn run_test() -> QueryResult<()> {
 //! #     let connection = establish_connection();
-//! #     use users::dsl::*;
-//! #     use posts::dsl::{posts, title};
+//! #     use self::users::dsl::*;
+//! #     use self::posts::dsl::{posts, title};
 //! let sean = users.filter(name.eq("Sean")).first::<User>(&connection)?;
 //! let tess = users.filter(name.eq("Tess")).first::<User>(&connection)?;
 //!
@@ -357,7 +357,7 @@
 
 use std::hash::Hash;
 
-use query_source::Table;
+use crate::query_source::Table;
 
 pub use self::belongs_to::{BelongsTo, GroupedBy};
 
diff --git a/diesel/src/backend.rs b/diesel/src/backend.rs
index e61601f..d5c4293 100644
--- a/diesel/src/backend.rs
+++ b/diesel/src/backend.rs
@@ -2,9 +2,9 @@
 
 use byteorder::ByteOrder;
 
-use query_builder::bind_collector::BindCollector;
-use query_builder::QueryBuilder;
-use sql_types::{self, HasSqlType};
+use crate::query_builder::bind_collector::BindCollector;
+use crate::query_builder::QueryBuilder;
+use crate::sql_types::{self, HasSqlType};
 
 /// A database backend
 ///
diff --git a/diesel/src/connection/mod.rs b/diesel/src/connection/mod.rs
index defad60..70bf15d 100644
--- a/diesel/src/connection/mod.rs
+++ b/diesel/src/connection/mod.rs
@@ -5,11 +5,11 @@
 
 use std::fmt::Debug;
 
-use backend::Backend;
-use deserialize::{Queryable, QueryableByName};
-use query_builder::{AsQuery, QueryFragment, QueryId};
-use result::*;
-use sql_types::HasSqlType;
+use crate::backend::Backend;
+use crate::deserialize::{Queryable, QueryableByName};
+use crate::query_builder::{AsQuery, QueryFragment, QueryId};
+use crate::result::*;
+use crate::sql_types::HasSqlType;
 
 #[doc(hidden)]
 pub use self::statement_cache::{MaybeCached, StatementCache, StatementCacheKey};
diff --git a/diesel/src/connection/statement_cache.rs b/diesel/src/connection/statement_cache.rs
index 828f7b8..614105a 100644
--- a/diesel/src/connection/statement_cache.rs
+++ b/diesel/src/connection/statement_cache.rs
@@ -98,9 +98,9 @@
 use std::hash::Hash;
 use std::ops::{Deref, DerefMut};
 
-use backend::Backend;
-use query_builder::*;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::query_builder::*;
+use crate::result::QueryResult;
 
 #[doc(hidden)]
 #[allow(missing_debug_implementations)]
diff --git a/diesel/src/connection/transaction_manager.rs b/diesel/src/connection/transaction_manager.rs
index 72cc25b..0857eb7 100644
--- a/diesel/src/connection/transaction_manager.rs
+++ b/diesel/src/connection/transaction_manager.rs
@@ -1,6 +1,6 @@
-use backend::UsesAnsiSavepointSyntax;
-use connection::{Connection, SimpleConnection};
-use result::QueryResult;
+use crate::backend::UsesAnsiSavepointSyntax;
+use crate::connection::{Connection, SimpleConnection};
+use crate::result::QueryResult;
 
 /// Manages the internal transaction state for a connection.
 ///
@@ -68,7 +68,7 @@
     where
         Conn: SimpleConnection,
     {
-        use result::Error::AlreadyInTransaction;
+        use crate::result::Error::AlreadyInTransaction;
 
         if self.transaction_depth.get() == 0 {
             self.change_transaction_depth(1, conn.batch_execute(sql))
diff --git a/diesel/src/data_types.rs b/diesel/src/data_types.rs
index 5baefca..43018e5 100644
--- a/diesel/src/data_types.rs
+++ b/diesel/src/data_types.rs
@@ -4,4 +4,4 @@
 //! all backend specific data structures when compiled against that
 //! backend.
 #[cfg(feature = "postgres")]
-pub use pg::data_types::*;
+pub use crate::pg::data_types::*;
diff --git a/diesel/src/deserialize.rs b/diesel/src/deserialize.rs
index 4cc9ccf..bc6327b 100644
--- a/diesel/src/deserialize.rs
+++ b/diesel/src/deserialize.rs
@@ -3,8 +3,8 @@
 use std::error::Error;
 use std::result;
 
-use backend::{self, Backend};
-use row::{NamedRow, Row};
+use crate::backend::{self, Backend};
+use crate::row::{NamedRow, Row};
 
 /// A specialized result type representing the result of deserializing
 /// a value from the database.
diff --git a/diesel/src/expression/array_comparison.rs b/diesel/src/expression/array_comparison.rs
index bc1755ef..7f85d33 100644
--- a/diesel/src/expression/array_comparison.rs
+++ b/diesel/src/expression/array_comparison.rs
@@ -1,9 +1,9 @@
-use backend::Backend;
-use expression::subselect::Subselect;
-use expression::*;
-use query_builder::*;
-use result::QueryResult;
-use sql_types::Bool;
+use crate::backend::Backend;
+use crate::expression::subselect::Subselect;
+use crate::expression::*;
+use crate::query_builder::*;
+use crate::result::QueryResult;
+use crate::sql_types::Bool;
 
 #[derive(Debug, Copy, Clone, QueryId, NonAggregate)]
 pub struct In<T, U> {
@@ -92,7 +92,7 @@
 impl_selectable_expression!(In<T, U>);
 impl_selectable_expression!(NotIn<T, U>);
 
-use query_builder::{BoxedSelectStatement, SelectStatement};
+use crate::query_builder::{BoxedSelectStatement, SelectStatement};
 
 pub trait AsInExpression<T> {
     type InExpression: MaybeEmpty + Expression<SqlType = T>;
diff --git a/diesel/src/expression/bound.rs b/diesel/src/expression/bound.rs
index 8bf6089..8751281 100644
--- a/diesel/src/expression/bound.rs
+++ b/diesel/src/expression/bound.rs
@@ -1,11 +1,11 @@
 use std::marker::PhantomData;
 
 use super::*;
-use backend::Backend;
-use query_builder::*;
-use result::QueryResult;
-use serialize::ToSql;
-use sql_types::HasSqlType;
+use crate::backend::Backend;
+use crate::query_builder::*;
+use crate::result::QueryResult;
+use crate::serialize::ToSql;
+use crate::sql_types::HasSqlType;
 
 #[derive(Debug, Clone, Copy, DieselNumericOps)]
 pub struct Bound<T, U> {
diff --git a/diesel/src/expression/coerce.rs b/diesel/src/expression/coerce.rs
index 7f46055..0d83ffa 100644
--- a/diesel/src/expression/coerce.rs
+++ b/diesel/src/expression/coerce.rs
@@ -1,9 +1,9 @@
 use std::marker::PhantomData;
 
-use backend::Backend;
-use expression::*;
-use query_builder::*;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::expression::*;
+use crate::query_builder::*;
+use crate::result::QueryResult;
 
 #[derive(Debug, Copy, Clone, QueryId, DieselNumericOps)]
 #[doc(hidden)]
diff --git a/diesel/src/expression/count.rs b/diesel/src/expression/count.rs
index e0245536..c2bef2b 100644
--- a/diesel/src/expression/count.rs
+++ b/diesel/src/expression/count.rs
@@ -1,8 +1,8 @@
 use super::Expression;
-use backend::Backend;
-use query_builder::*;
-use result::QueryResult;
-use sql_types::BigInt;
+use crate::backend::Backend;
+use crate::query_builder::*;
+use crate::result::QueryResult;
+use crate::sql_types::BigInt;
 
 sql_function! {
     /// Creates a SQL `COUNT` expression
diff --git a/diesel/src/expression/exists.rs b/diesel/src/expression/exists.rs
index 6cedf82..982aa71 100644
--- a/diesel/src/expression/exists.rs
+++ b/diesel/src/expression/exists.rs
@@ -1,9 +1,9 @@
-use backend::Backend;
-use expression::subselect::Subselect;
-use expression::{AppearsOnTable, Expression, NonAggregate, SelectableExpression};
-use query_builder::*;
-use result::QueryResult;
-use sql_types::Bool;
+use crate::backend::Backend;
+use crate::expression::subselect::Subselect;
+use crate::expression::{AppearsOnTable, Expression, NonAggregate, SelectableExpression};
+use crate::query_builder::*;
+use crate::result::QueryResult;
+use crate::sql_types::Bool;
 
 /// Creates a SQL `EXISTS` expression.
 ///
diff --git a/diesel/src/expression/functions/aggregate_folding.rs b/diesel/src/expression/functions/aggregate_folding.rs
index a3ebf94..bf6f044 100644
--- a/diesel/src/expression/functions/aggregate_folding.rs
+++ b/diesel/src/expression/functions/aggregate_folding.rs
@@ -1,4 +1,4 @@
-use sql_types::Foldable;
+use crate::sql_types::Foldable;
 
 sql_function! {
     /// Represents a SQL `SUM` function. This function can only take types which are
@@ -47,7 +47,7 @@
     /// # #[cfg(all(feature = "numeric", any(feature = "postgres", not(feature = "sqlite"))))]
     /// # fn run_test() -> QueryResult<()> {
     /// #     use bigdecimal::BigDecimal;
-    /// #     use numbers::dsl::*;
+    /// #     use self::numbers::dsl::*;
     /// #     let conn = establish_connection();
     /// #     conn.execute("DROP TABLE IF EXISTS numbers")?;
     /// #     conn.execute("CREATE TABLE numbers (number INTEGER)")?;
diff --git a/diesel/src/expression/functions/aggregate_ordering.rs b/diesel/src/expression/functions/aggregate_ordering.rs
index 6af9503..4b48445 100644
--- a/diesel/src/expression/functions/aggregate_ordering.rs
+++ b/diesel/src/expression/functions/aggregate_ordering.rs
@@ -1,4 +1,4 @@
-use sql_types::{IntoNullable, SqlOrd};
+use crate::sql_types::{IntoNullable, SqlOrd};
 
 sql_function! {
     /// Represents a SQL `MAX` function. This function can only take types which are
diff --git a/diesel/src/expression/functions/date_and_time.rs b/diesel/src/expression/functions/date_and_time.rs
index 9c4eaf0..ff57ee2 100644
--- a/diesel/src/expression/functions/date_and_time.rs
+++ b/diesel/src/expression/functions/date_and_time.rs
@@ -1,9 +1,9 @@
-use backend::Backend;
-use expression::coerce::Coerce;
-use expression::{AsExpression, Expression};
-use query_builder::*;
-use result::QueryResult;
-use sql_types::*;
+use crate::backend::Backend;
+use crate::expression::coerce::Coerce;
+use crate::expression::{AsExpression, Expression};
+use crate::query_builder::*;
+use crate::result::QueryResult;
+use crate::sql_types::*;
 
 /// Represents the SQL `CURRENT_TIMESTAMP` constant. This is equivalent to the
 /// `NOW()` function on backends that support it.
diff --git a/diesel/src/expression/functions/helper_types.rs b/diesel/src/expression/functions/helper_types.rs
index 29a94475..07395a7 100644
--- a/diesel/src/expression/functions/helper_types.rs
+++ b/diesel/src/expression/functions/helper_types.rs
@@ -1,9 +1,9 @@
 #![allow(non_camel_case_types)]
 
-use dsl::{AsExprOf, SqlTypeOf};
-use expression::grouped::Grouped;
-use expression::operators;
-use sql_types::Bool;
+use crate::dsl::{AsExprOf, SqlTypeOf};
+use crate::expression::grouped::Grouped;
+use crate::expression::operators;
+use crate::sql_types::Bool;
 
 /// The return type of [`not(expr)`](../dsl/fn.not.html)
 pub type not<Expr> = operators::Not<Grouped<AsExprOf<Expr, Bool>>>;
diff --git a/diesel/src/expression/grouped.rs b/diesel/src/expression/grouped.rs
index 038d68d..122e998 100644
--- a/diesel/src/expression/grouped.rs
+++ b/diesel/src/expression/grouped.rs
@@ -1,7 +1,7 @@
-use backend::Backend;
-use expression::Expression;
-use query_builder::*;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::expression::Expression;
+use crate::query_builder::*;
+use crate::result::QueryResult;
 
 #[derive(Debug, Copy, Clone, QueryId, Default, DieselNumericOps, NonAggregate)]
 pub struct Grouped<T>(pub T);
diff --git a/diesel/src/expression/helper_types.rs b/diesel/src/expression/helper_types.rs
index 7bf350d..cb123ed 100644
--- a/diesel/src/expression/helper_types.rs
+++ b/diesel/src/expression/helper_types.rs
@@ -4,7 +4,7 @@
 use super::array_comparison::{AsInExpression, In, NotIn};
 use super::grouped::Grouped;
 use super::{AsExpression, Expression};
-use sql_types;
+use crate::sql_types;
 
 /// The SQL type of an expression
 pub type SqlTypeOf<Expr> = <Expr as Expression>::SqlType;
diff --git a/diesel/src/expression/mod.rs b/diesel/src/expression/mod.rs
index 274e820..490aa0f 100644
--- a/diesel/src/expression/mod.rs
+++ b/diesel/src/expression/mod.rs
@@ -49,7 +49,7 @@
 #[doc(hidden)]
 #[allow(non_camel_case_types)]
 pub mod dsl {
-    use dsl::SqlTypeOf;
+    use crate::dsl::SqlTypeOf;
 
     #[doc(inline)]
     pub use super::count::*;
@@ -67,7 +67,7 @@
     pub use super::sql_literal::sql;
 
     #[cfg(feature = "postgres")]
-    pub use pg::expression::dsl::*;
+    pub use crate::pg::expression::dsl::*;
 
     /// The return type of [`count(expr)`](../dsl/fn.count.html)
     pub type count<Expr> = super::count::count::HelperType<SqlTypeOf<Expr>, Expr>;
@@ -82,8 +82,8 @@
 #[doc(inline)]
 pub use self::sql_literal::{SqlLiteral, UncheckedBind};
 
-use backend::Backend;
-use dsl::AsExprOf;
+use crate::backend::Backend;
+use crate::dsl::AsExprOf;
 
 /// Represents a typed fragment of SQL.
 ///
@@ -291,7 +291,7 @@
 
 impl<'a, T: NonAggregate + ?Sized> NonAggregate for &'a T {}
 
-use query_builder::{QueryFragment, QueryId};
+use crate::query_builder::{QueryFragment, QueryId};
 
 /// Helper trait used when boxing expressions.
 ///
diff --git a/diesel/src/expression/not.rs b/diesel/src/expression/not.rs
index 770a101..1e6d905 100644
--- a/diesel/src/expression/not.rs
+++ b/diesel/src/expression/not.rs
@@ -1,7 +1,7 @@
-use expression::grouped::Grouped;
-use expression::AsExpression;
-use helper_types::not;
-use sql_types::Bool;
+use crate::expression::grouped::Grouped;
+use crate::expression::AsExpression;
+use crate::helper_types::not;
+use crate::sql_types::Bool;
 
 /// Creates a SQL `NOT` expression
 ///
diff --git a/diesel/src/expression/nullable.rs b/diesel/src/expression/nullable.rs
index 29f4e1d..ec6f812 100644
--- a/diesel/src/expression/nullable.rs
+++ b/diesel/src/expression/nullable.rs
@@ -1,9 +1,9 @@
-use backend::Backend;
-use expression::*;
-use query_builder::*;
-use query_source::Table;
-use result::QueryResult;
-use sql_types::IntoNullable;
+use crate::backend::Backend;
+use crate::expression::*;
+use crate::query_builder::*;
+use crate::query_source::Table;
+use crate::result::QueryResult;
+use crate::sql_types::IntoNullable;
 
 #[derive(Debug, Copy, Clone, DieselNumericOps, NonAggregate)]
 pub struct Nullable<T>(T);
diff --git a/diesel/src/expression/operators.rs b/diesel/src/expression/operators.rs
index 48492a4..dd9cb5b 100644
--- a/diesel/src/expression/operators.rs
+++ b/diesel/src/expression/operators.rs
@@ -380,9 +380,9 @@
 
 prefix_operator!(Not, "NOT ");
 
-use insertable::{ColumnInsertValue, Insertable};
-use query_builder::ValuesClause;
-use query_source::Column;
+use crate::insertable::{ColumnInsertValue, Insertable};
+use crate::query_builder::ValuesClause;
+use crate::query_source::Column;
 
 impl<T, U> Insertable<T::Table> for Eq<T, U>
 where
@@ -420,23 +420,26 @@
     }
 }
 
-impl<L, R, ST> ::expression::Expression for Concat<L, R>
+impl<L, R, ST> crate::expression::Expression for Concat<L, R>
 where
-    L: ::expression::Expression<SqlType = ST>,
-    R: ::expression::Expression<SqlType = ST>,
+    L: crate::expression::Expression<SqlType = ST>,
+    R: crate::expression::Expression<SqlType = ST>,
 {
     type SqlType = ST;
 }
 
 impl_selectable_expression!(Concat<L, R>);
 
-impl<L, R, DB> ::query_builder::QueryFragment<DB> for Concat<L, R>
+impl<L, R, DB> crate::query_builder::QueryFragment<DB> for Concat<L, R>
 where
-    L: ::query_builder::QueryFragment<DB>,
-    R: ::query_builder::QueryFragment<DB>,
-    DB: ::backend::Backend,
+    L: crate::query_builder::QueryFragment<DB>,
+    R: crate::query_builder::QueryFragment<DB>,
+    DB: crate::backend::Backend,
 {
-    fn walk_ast(&self, mut out: ::query_builder::AstPass<DB>) -> ::result::QueryResult<()> {
+    fn walk_ast(
+        &self,
+        mut out: crate::query_builder::AstPass<DB>,
+    ) -> crate::result::QueryResult<()> {
         // Those brackets are required because mysql is broken
         // https://github.com/diesel-rs/diesel/issues/2133#issuecomment-517432317
         out.push_sql("(");
diff --git a/diesel/src/expression/ops/numeric.rs b/diesel/src/expression/ops/numeric.rs
index 8bdf37b..b13d920 100644
--- a/diesel/src/expression/ops/numeric.rs
+++ b/diesel/src/expression/ops/numeric.rs
@@ -1,8 +1,8 @@
-use backend::Backend;
-use expression::{Expression, NonAggregate};
-use query_builder::*;
-use result::QueryResult;
-use sql_types;
+use crate::backend::Backend;
+use crate::expression::{Expression, NonAggregate};
+use crate::query_builder::*;
+use crate::result::QueryResult;
+use crate::sql_types;
 
 macro_rules! numeric_operation {
     ($name:ident, $op:expr) => {
diff --git a/diesel/src/expression/sql_literal.rs b/diesel/src/expression/sql_literal.rs
index e70dfb5..9e2446a 100644
--- a/diesel/src/expression/sql_literal.rs
+++ b/diesel/src/expression/sql_literal.rs
@@ -1,10 +1,10 @@
 use std::marker::PhantomData;
 
-use backend::Backend;
-use expression::*;
-use query_builder::*;
-use query_dsl::RunQueryDsl;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::expression::*;
+use crate::query_builder::*;
+use crate::query_dsl::RunQueryDsl;
+use crate::result::QueryResult;
 
 #[derive(Debug, Clone, DieselNumericOps)]
 #[must_use = "Queries are only executed when calling `load`, `get_result`, or similar."]
diff --git a/diesel/src/expression/subselect.rs b/diesel/src/expression/subselect.rs
index 05c4fa2..f08b087 100644
--- a/diesel/src/expression/subselect.rs
+++ b/diesel/src/expression/subselect.rs
@@ -1,9 +1,9 @@
 use std::marker::PhantomData;
 
-use expression::array_comparison::MaybeEmpty;
-use expression::*;
-use query_builder::*;
-use result::QueryResult;
+use crate::expression::array_comparison::MaybeEmpty;
+use crate::expression::*;
+use crate::query_builder::*;
+use crate::result::QueryResult;
 
 #[derive(Debug, Copy, Clone, QueryId)]
 pub struct Subselect<T, ST> {
diff --git a/diesel/src/expression_methods/bool_expression_methods.rs b/diesel/src/expression_methods/bool_expression_methods.rs
index 5a33c26..5a4e6ed 100644
--- a/diesel/src/expression_methods/bool_expression_methods.rs
+++ b/diesel/src/expression_methods/bool_expression_methods.rs
@@ -1,7 +1,7 @@
-use expression::grouped::Grouped;
-use expression::operators::{And, Or};
-use expression::{AsExpression, Expression};
-use sql_types::{Bool, Nullable};
+use crate::expression::grouped::Grouped;
+use crate::expression::operators::{And, Or};
+use crate::expression::{AsExpression, Expression};
+use crate::sql_types::{Bool, Nullable};
 
 /// Methods present on boolean expressions
 pub trait BoolExpressionMethods: Expression + Sized {
diff --git a/diesel/src/expression_methods/eq_all.rs b/diesel/src/expression_methods/eq_all.rs
index 7fcd101..c78df53 100644
--- a/diesel/src/expression_methods/eq_all.rs
+++ b/diesel/src/expression_methods/eq_all.rs
@@ -1,7 +1,7 @@
-use expression::operators::And;
-use expression::Expression;
-use expression_methods::*;
-use sql_types::Bool;
+use crate::expression::operators::And;
+use crate::expression::Expression;
+use crate::expression_methods::*;
+use crate::sql_types::Bool;
 
 /// This method is used by `FindDsl` to work with tuples. Because we cannot
 /// express this without specialization or overlapping impls, it is brute force
diff --git a/diesel/src/expression_methods/escape_expression_methods.rs b/diesel/src/expression_methods/escape_expression_methods.rs
index 58a4fc2..a674530 100644
--- a/diesel/src/expression_methods/escape_expression_methods.rs
+++ b/diesel/src/expression_methods/escape_expression_methods.rs
@@ -1,7 +1,7 @@
-use dsl::AsExprOf;
-use expression::operators::{Escape, Like, NotLike};
-use expression::IntoSql;
-use sql_types::VarChar;
+use crate::dsl::AsExprOf;
+use crate::expression::operators::{Escape, Like, NotLike};
+use crate::expression::IntoSql;
+use crate::sql_types::VarChar;
 
 /// Adds the `escape` method to `LIKE` and `NOT LIKE`. This is used to specify
 /// the escape character for the pattern.
diff --git a/diesel/src/expression_methods/global_expression_methods.rs b/diesel/src/expression_methods/global_expression_methods.rs
index 32ee0ce..fd1582a 100644
--- a/diesel/src/expression_methods/global_expression_methods.rs
+++ b/diesel/src/expression_methods/global_expression_methods.rs
@@ -1,7 +1,7 @@
-use expression::array_comparison::{AsInExpression, In, NotIn};
-use expression::operators::*;
-use expression::{nullable, AsExpression, Expression};
-use sql_types::SingleValue;
+use crate::expression::array_comparison::{AsInExpression, In, NotIn};
+use crate::expression::operators::*;
+use crate::expression::{nullable, AsExpression, Expression};
+use crate::sql_types::SingleValue;
 
 /// Methods present on all expressions, except tuples
 pub trait ExpressionMethods: Expression + Sized {
diff --git a/diesel/src/expression_methods/mod.rs b/diesel/src/expression_methods/mod.rs
index 16fa9d7..f91e5d0b 100644
--- a/diesel/src/expression_methods/mod.rs
+++ b/diesel/src/expression_methods/mod.rs
@@ -23,4 +23,4 @@
 
 #[cfg(feature = "postgres")]
 #[doc(inline)]
-pub use pg::expression::expression_methods::*;
+pub use crate::pg::expression::expression_methods::*;
diff --git a/diesel/src/expression_methods/text_expression_methods.rs b/diesel/src/expression_methods/text_expression_methods.rs
index 55395bb..e6bf2d0 100644
--- a/diesel/src/expression_methods/text_expression_methods.rs
+++ b/diesel/src/expression_methods/text_expression_methods.rs
@@ -1,6 +1,6 @@
-use expression::operators::{Concat, Like, NotLike};
-use expression::{AsExpression, Expression};
-use sql_types::{Nullable, Text};
+use crate::expression::operators::{Concat, Like, NotLike};
+use crate::expression::{AsExpression, Expression};
+use crate::sql_types::{Nullable, Text};
 
 /// Methods present on text expressions
 pub trait TextExpressionMethods: Expression + Sized {
diff --git a/diesel/src/insertable.rs b/diesel/src/insertable.rs
index 8ddce6e..079a29b 100644
--- a/diesel/src/insertable.rs
+++ b/diesel/src/insertable.rs
@@ -1,14 +1,14 @@
 use std::marker::PhantomData;
 
-use backend::{Backend, SupportsDefaultKeyword};
-use expression::{AppearsOnTable, Expression};
-use query_builder::{
+use crate::backend::{Backend, SupportsDefaultKeyword};
+use crate::expression::{AppearsOnTable, Expression};
+use crate::query_builder::{
     AstPass, InsertStatement, QueryFragment, UndecoratedInsertRecord, ValuesClause,
 };
-use query_source::{Column, Table};
-use result::QueryResult;
+use crate::query_source::{Column, Table};
+use crate::result::QueryResult;
 #[cfg(feature = "sqlite")]
-use sqlite::Sqlite;
+use crate::sqlite::Sqlite;
 
 /// Represents that a structure can be used to insert a new row into the
 /// database. This is automatically implemented for `&[T]` and `&Vec<T>` for
@@ -82,7 +82,7 @@
     where
         Self: Sized,
     {
-        ::insert_into(table).values(self)
+        crate::insert_into(table).values(self)
     }
 }
 
diff --git a/diesel/src/lib.rs b/diesel/src/lib.rs
index fd98d59..178cc9d 100644
--- a/diesel/src/lib.rs
+++ b/diesel/src/lib.rs
@@ -181,13 +181,13 @@
     //! generically to be included in prelude, but are often used when using Diesel.
 
     #[doc(inline)]
-    pub use helper_types::*;
+    pub use crate::helper_types::*;
 
     #[doc(inline)]
-    pub use expression::dsl::*;
+    pub use crate::expression::dsl::*;
 
     #[doc(inline)]
-    pub use query_builder::functions::{
+    pub use crate::query_builder::functions::{
         delete, insert_into, insert_or_ignore_into, replace_into, select, sql_query, update,
     };
 }
@@ -209,7 +209,7 @@
     use super::query_source::joins;
 
     #[doc(inline)]
-    pub use expression::helper_types::*;
+    pub use crate::expression::helper_types::*;
 
     /// Represents the return type of `.select(selection)`
     pub type Select<Source, Selection> = <Source as SelectDsl<Selection>>::Output;
@@ -292,42 +292,42 @@
 
 pub mod prelude {
     //! Re-exports important traits and types. Meant to be glob imported when using Diesel.
-    pub use associations::{GroupedBy, Identifiable};
-    pub use connection::Connection;
+    pub use crate::associations::{GroupedBy, Identifiable};
+    pub use crate::connection::Connection;
     #[deprecated(
         since = "1.1.0",
         note = "Explicitly `use diesel::deserialize::Queryable"
     )]
-    pub use deserialize::Queryable;
-    pub use expression::{
+    pub use crate::deserialize::Queryable;
+    pub use crate::expression::{
         AppearsOnTable, BoxableExpression, Expression, IntoSql, SelectableExpression,
     };
-    pub use expression_methods::*;
+    pub use crate::expression_methods::*;
     #[doc(inline)]
-    pub use insertable::Insertable;
+    pub use crate::insertable::Insertable;
     #[doc(hidden)]
-    pub use query_dsl::GroupByDsl;
-    pub use query_dsl::{BelongingToDsl, JoinOnDsl, QueryDsl, RunQueryDsl, SaveChangesDsl};
+    pub use crate::query_dsl::GroupByDsl;
+    pub use crate::query_dsl::{BelongingToDsl, JoinOnDsl, QueryDsl, RunQueryDsl, SaveChangesDsl};
 
-    pub use query_source::{Column, JoinTo, QuerySource, Table};
-    pub use result::{ConnectionError, ConnectionResult, OptionalExtension, QueryResult};
+    pub use crate::query_source::{Column, JoinTo, QuerySource, Table};
+    pub use crate::result::{ConnectionError, ConnectionResult, OptionalExtension, QueryResult};
 
     #[cfg(feature = "mysql")]
-    pub use mysql::MysqlConnection;
+    pub use crate::mysql::MysqlConnection;
     #[cfg(feature = "postgres")]
-    pub use pg::PgConnection;
+    pub use crate::pg::PgConnection;
     #[cfg(feature = "sqlite")]
-    pub use sqlite::SqliteConnection;
+    pub use crate::sqlite::SqliteConnection;
 }
 
-pub use prelude::*;
+pub use crate::prelude::*;
 #[doc(inline)]
-pub use query_builder::debug_query;
+pub use crate::query_builder::debug_query;
 #[doc(inline)]
-pub use query_builder::functions::{
+pub use crate::query_builder::functions::{
     delete, insert_into, insert_or_ignore_into, replace_into, select, sql_query, update,
 };
-pub use result::Error::NotFound;
+pub use crate::result::Error::NotFound;
 
 pub(crate) mod diesel {
     pub use super::*;
diff --git a/diesel/src/macros/mod.rs b/diesel/src/macros/mod.rs
index 44874f2..940b040 100644
--- a/diesel/src/macros/mod.rs
+++ b/diesel/src/macros/mod.rs
@@ -162,17 +162,17 @@
 /// which types to import.
 ///
 /// ```
-/// #[macro_use] extern crate diesel;
-/// # /*
-/// extern crate diesel_full_text_search;
-/// # */
+/// # #[macro_use] extern crate diesel;
 /// # mod diesel_full_text_search {
 /// #     pub struct TsVector;
 /// # }
 ///
 /// table! {
 ///     use diesel::sql_types::*;
+/// #    use crate::diesel_full_text_search::*;
+/// # /*
 ///     use diesel_full_text_search::*;
+/// # */
 ///
 ///     posts {
 ///         id -> Integer,
@@ -1069,7 +1069,7 @@
 
 #[cfg(test)]
 mod tests {
-    use prelude::*;
+    use crate::prelude::*;
 
     table! {
         foo.bars {
@@ -1084,8 +1084,8 @@
     }
 
     table! {
-        use sql_types::*;
-        use macros::tests::my_types::*;
+        use crate::sql_types::*;
+        use crate::macros::tests::my_types::*;
 
         table_with_custom_types {
             id -> Integer,
@@ -1094,8 +1094,8 @@
     }
 
     table! {
-        use sql_types::*;
-        use macros::tests::my_types::*;
+        use crate::sql_types::*;
+        use crate::macros::tests::my_types::*;
 
         /// Table documentation
         ///
@@ -1112,17 +1112,17 @@
     #[test]
     #[cfg(feature = "postgres")]
     fn table_with_custom_schema() {
-        use pg::Pg;
+        use crate::pg::Pg;
         let expected_sql = r#"SELECT "foo"."bars"."baz" FROM "foo"."bars" -- binds: []"#;
         assert_eq!(
             expected_sql,
-            &::debug_query::<Pg, _>(&bars::table.select(bars::baz)).to_string()
+            &crate::debug_query::<Pg, _>(&bars::table.select(bars::baz)).to_string()
         );
     }
 
     table! {
-        use sql_types;
-        use sql_types::*;
+        use crate::sql_types;
+        use crate::sql_types::*;
 
         table_with_arbitrarily_complex_types {
             id -> sql_types::Integer,
@@ -1153,41 +1153,41 @@
     #[test]
     #[cfg(feature = "postgres")]
     fn table_with_column_renaming_postgres() {
-        use pg::Pg;
+        use crate::pg::Pg;
         let expected_sql =
             r#"SELECT "foo"."id", "foo"."type", "foo"."bleh" FROM "foo" WHERE "foo"."type" = $1 -- binds: [1]"#;
         assert_eq!(
             expected_sql,
-            ::debug_query::<Pg, _>(&foo::table.filter(foo::mytype.eq(1))).to_string()
+            crate::debug_query::<Pg, _>(&foo::table.filter(foo::mytype.eq(1))).to_string()
         );
     }
 
     #[test]
     #[cfg(feature = "mysql")]
     fn table_with_column_renaming_mysql() {
-        use mysql::Mysql;
+        use crate::mysql::Mysql;
         let expected_sql =
             r#"SELECT `foo`.`id`, `foo`.`type`, `foo`.`bleh` FROM `foo` WHERE `foo`.`type` = ? -- binds: [1]"#;
         assert_eq!(
             expected_sql,
-            ::debug_query::<Mysql, _>(&foo::table.filter(foo::mytype.eq(1))).to_string()
+            crate::debug_query::<Mysql, _>(&foo::table.filter(foo::mytype.eq(1))).to_string()
         );
     }
 
     #[test]
     #[cfg(feature = "sqlite")]
     fn table_with_column_renaming_sqlite() {
-        use sqlite::Sqlite;
+        use crate::sqlite::Sqlite;
         let expected_sql =
             r#"SELECT `foo`.`id`, `foo`.`type`, `foo`.`bleh` FROM `foo` WHERE `foo`.`type` = ? -- binds: [1]"#;
         assert_eq!(
             expected_sql,
-            ::debug_query::<Sqlite, _>(&foo::table.filter(foo::mytype.eq(1))).to_string()
+            crate::debug_query::<Sqlite, _>(&foo::table.filter(foo::mytype.eq(1))).to_string()
         );
     }
 
     table!(
-        use sql_types::*;
+        use crate::sql_types::*;
 
         /// Some documentation
         #[sql_name="mod"]
@@ -1200,33 +1200,33 @@
     #[test]
     #[cfg(feature = "postgres")]
     fn table_renaming_postgres() {
-        use pg::Pg;
+        use crate::pg::Pg;
         let expected_sql = r#"SELECT "mod"."id" FROM "mod" -- binds: []"#;
         assert_eq!(
             expected_sql,
-            ::debug_query::<Pg, _>(&bar::table.select(bar::id)).to_string()
+            crate::debug_query::<Pg, _>(&bar::table.select(bar::id)).to_string()
         );
     }
 
     #[test]
     #[cfg(feature = "mysql")]
     fn table_renaming_mysql() {
-        use mysql::Mysql;
+        use crate::mysql::Mysql;
         let expected_sql = r#"SELECT `mod`.`id` FROM `mod` -- binds: []"#;
         assert_eq!(
             expected_sql,
-            ::debug_query::<Mysql, _>(&bar::table.select(bar::id)).to_string()
+            crate::debug_query::<Mysql, _>(&bar::table.select(bar::id)).to_string()
         );
     }
 
     #[test]
     #[cfg(feature = "sqlite")]
     fn table_renaming_sqlite() {
-        use sqlite::Sqlite;
+        use crate::sqlite::Sqlite;
         let expected_sql = r#"SELECT `mod`.`id` FROM `mod` -- binds: []"#;
         assert_eq!(
             expected_sql,
-            ::debug_query::<Sqlite, _>(&bar::table.select(bar::id)).to_string()
+            crate::debug_query::<Sqlite, _>(&bar::table.select(bar::id)).to_string()
         );
     }
 }
diff --git a/diesel/src/migration/errors.rs b/diesel/src/migration/errors.rs
index 5d095ea..3daeef4 100644
--- a/diesel/src/migration/errors.rs
+++ b/diesel/src/migration/errors.rs
@@ -7,7 +7,7 @@
 use std::path::PathBuf;
 use std::{fmt, io};
 
-use result;
+use crate::result;
 
 /// Errors that occur while preparing to run migrations
 #[derive(Debug)]
diff --git a/diesel/src/migration/mod.rs b/diesel/src/migration/mod.rs
index 708527c..e679d03 100644
--- a/diesel/src/migration/mod.rs
+++ b/diesel/src/migration/mod.rs
@@ -3,8 +3,8 @@
 mod errors;
 pub use self::errors::{MigrationError, RunMigrationsError};
 
-use connection::{Connection, SimpleConnection};
-use result::QueryResult;
+use crate::connection::{Connection, SimpleConnection};
+use crate::result::QueryResult;
 use std::path::Path;
 
 /// Represents a migration that interacts with diesel
@@ -80,25 +80,25 @@
 }
 
 #[cfg(feature = "postgres")]
-impl MigrationConnection for ::pg::PgConnection {
+impl MigrationConnection for crate::pg::PgConnection {
     fn setup(&self) -> QueryResult<usize> {
-        use RunQueryDsl;
-        ::sql_query(CREATE_MIGRATIONS_TABLE).execute(self)
+        use crate::RunQueryDsl;
+        crate::sql_query(CREATE_MIGRATIONS_TABLE).execute(self)
     }
 }
 
 #[cfg(feature = "mysql")]
-impl MigrationConnection for ::mysql::MysqlConnection {
+impl MigrationConnection for crate::mysql::MysqlConnection {
     fn setup(&self) -> QueryResult<usize> {
-        use RunQueryDsl;
-        ::sql_query(CREATE_MIGRATIONS_TABLE).execute(self)
+        use crate::RunQueryDsl;
+        crate::sql_query(CREATE_MIGRATIONS_TABLE).execute(self)
     }
 }
 
 #[cfg(feature = "sqlite")]
-impl MigrationConnection for ::sqlite::SqliteConnection {
+impl MigrationConnection for crate::sqlite::SqliteConnection {
     fn setup(&self) -> QueryResult<usize> {
-        use RunQueryDsl;
-        ::sql_query(CREATE_MIGRATIONS_TABLE).execute(self)
+        use crate::RunQueryDsl;
+        crate::sql_query(CREATE_MIGRATIONS_TABLE).execute(self)
     }
 }
diff --git a/diesel/src/mysql/backend.rs b/diesel/src/mysql/backend.rs
index eab5545..c7e66f4 100644
--- a/diesel/src/mysql/backend.rs
+++ b/diesel/src/mysql/backend.rs
@@ -4,9 +4,9 @@
 
 use super::query_builder::MysqlQueryBuilder;
 use super::MysqlValue;
-use backend::*;
-use query_builder::bind_collector::RawBytesBindCollector;
-use sql_types::TypeMetadata;
+use crate::backend::*;
+use crate::query_builder::bind_collector::RawBytesBindCollector;
+use crate::sql_types::TypeMetadata;
 
 /// The MySQL backend
 #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
diff --git a/diesel/src/mysql/connection/bind.rs b/diesel/src/mysql/connection/bind.rs
index 9ea394c7..abf9f12 100644
--- a/diesel/src/mysql/connection/bind.rs
+++ b/diesel/src/mysql/connection/bind.rs
@@ -4,8 +4,8 @@
 use std::os::raw as libc;
 
 use super::stmt::Statement;
-use mysql::{MysqlType, MysqlTypeMetadata, MysqlValue};
-use result::QueryResult;
+use crate::mysql::{MysqlType, MysqlTypeMetadata, MysqlValue};
+use crate::result::QueryResult;
 
 pub struct Binds {
     data: Vec<BindData>,
@@ -201,7 +201,7 @@
     }
 
     fn did_numeric_overflow_occur(&self) -> QueryResult<()> {
-        use result::Error::DeserializationError;
+        use crate::result::Error::DeserializationError;
 
         if self.is_truncated() && self.is_fixed_size_buffer() {
             Err(DeserializationError(
diff --git a/diesel/src/mysql/connection/mod.rs b/diesel/src/mysql/connection/mod.rs
index a974724..b675a21 100644
--- a/diesel/src/mysql/connection/mod.rs
+++ b/diesel/src/mysql/connection/mod.rs
@@ -7,12 +7,12 @@
 use self::stmt::Statement;
 use self::url::ConnectionOptions;
 use super::backend::Mysql;
-use connection::*;
-use deserialize::{Queryable, QueryableByName};
-use query_builder::bind_collector::RawBytesBindCollector;
-use query_builder::*;
-use result::*;
-use sql_types::HasSqlType;
+use crate::connection::*;
+use crate::deserialize::{Queryable, QueryableByName};
+use crate::query_builder::bind_collector::RawBytesBindCollector;
+use crate::query_builder::*;
+use crate::result::*;
+use crate::sql_types::HasSqlType;
 
 #[allow(missing_debug_implementations, missing_copy_implementations)]
 /// A connection to a MySQL database. Connection URLs should be in the form
@@ -37,7 +37,7 @@
     type TransactionManager = AnsiTransactionManager;
 
     fn establish(database_url: &str) -> ConnectionResult<Self> {
-        use result::ConnectionError::CouldntSetupConfiguration;
+        use crate::result::ConnectionError::CouldntSetupConfiguration;
 
         let raw_connection = RawConnection::new();
         let connection_options = ConnectionOptions::parse(database_url)?;
@@ -67,8 +67,8 @@
         Self::Backend: HasSqlType<T::SqlType>,
         U: Queryable<T::SqlType, Self::Backend>,
     {
-        use deserialize::FromSqlRow;
-        use result::Error::DeserializationError;
+        use crate::deserialize::FromSqlRow;
+        use crate::result::Error::DeserializationError;
 
         let mut stmt = self.prepare_query(&source.as_query())?;
         let mut metadata = Vec::new();
@@ -87,7 +87,7 @@
         T: QueryFragment<Self::Backend> + QueryId,
         U: QueryableByName<Self::Backend>,
     {
-        use result::Error::DeserializationError;
+        use crate::result::Error::DeserializationError;
 
         let mut stmt = self.prepare_query(source)?;
         let results = unsafe { stmt.named_results()? };
diff --git a/diesel/src/mysql/connection/raw.rs b/diesel/src/mysql/connection/raw.rs
index ab832a2..27efc5d 100644
--- a/diesel/src/mysql/connection/raw.rs
+++ b/diesel/src/mysql/connection/raw.rs
@@ -7,7 +7,7 @@
 
 use super::stmt::Statement;
 use super::url::ConnectionOptions;
-use result::{ConnectionError, ConnectionResult, QueryResult};
+use crate::result::{ConnectionError, ConnectionResult, QueryResult};
 
 pub struct RawConnection(NonNull<ffi::MYSQL>);
 
@@ -134,8 +134,8 @@
     }
 
     fn did_an_error_occur(&self) -> QueryResult<()> {
-        use result::DatabaseErrorKind;
-        use result::Error::DatabaseError;
+        use crate::result::DatabaseErrorKind;
+        use crate::result::Error::DatabaseError;
 
         let error_message = self.last_error_message();
         if error_message.is_empty() {
diff --git a/diesel/src/mysql/connection/stmt/iterator.rs b/diesel/src/mysql/connection/stmt/iterator.rs
index 45517b9..4911fcf 100644
--- a/diesel/src/mysql/connection/stmt/iterator.rs
+++ b/diesel/src/mysql/connection/stmt/iterator.rs
@@ -1,9 +1,9 @@
 use std::collections::HashMap;
 
 use super::{ffi, libc, Binds, Statement, StatementMetadata};
-use mysql::{Mysql, MysqlTypeMetadata, MysqlValue};
-use result::QueryResult;
-use row::*;
+use crate::mysql::{Mysql, MysqlTypeMetadata, MysqlValue};
+use crate::result::QueryResult;
+use crate::row::*;
 
 pub struct StatementIterator<'a> {
     stmt: &'a mut Statement,
diff --git a/diesel/src/mysql/connection/stmt/mod.rs b/diesel/src/mysql/connection/stmt/mod.rs
index 76ae9ab..d1a5e40 100644
--- a/diesel/src/mysql/connection/stmt/mod.rs
+++ b/diesel/src/mysql/connection/stmt/mod.rs
@@ -10,8 +10,8 @@
 use self::iterator::*;
 use self::metadata::*;
 use super::bind::Binds;
-use mysql::MysqlTypeMetadata;
-use result::{DatabaseErrorKind, QueryResult};
+use crate::mysql::MysqlTypeMetadata;
+use crate::result::{DatabaseErrorKind, QueryResult};
 
 pub struct Statement {
     stmt: NonNull<ffi::MYSQL_STMT>,
@@ -115,7 +115,7 @@
     }
 
     fn metadata(&self) -> QueryResult<StatementMetadata> {
-        use result::Error::DeserializationError;
+        use crate::result::Error::DeserializationError;
 
         let result_ptr = unsafe { ffi::mysql_stmt_result_metadata(self.stmt.as_ptr()).as_mut() };
         self.did_an_error_occur()?;
@@ -125,7 +125,7 @@
     }
 
     fn did_an_error_occur(&self) -> QueryResult<()> {
-        use result::Error::DatabaseError;
+        use crate::result::Error::DatabaseError;
 
         let error_message = self.last_error_message();
         if error_message.is_empty() {
diff --git a/diesel/src/mysql/connection/url.rs b/diesel/src/mysql/connection/url.rs
index b786cc3..99d1929 100644
--- a/diesel/src/mysql/connection/url.rs
+++ b/diesel/src/mysql/connection/url.rs
@@ -5,7 +5,7 @@
 use self::url::{Host, Url};
 use std::ffi::{CStr, CString};
 
-use result::{ConnectionError, ConnectionResult};
+use crate::result::{ConnectionError, ConnectionResult};
 
 pub struct ConnectionOptions {
     host: Option<CString>,
diff --git a/diesel/src/mysql/query_builder/mod.rs b/diesel/src/mysql/query_builder/mod.rs
index adfabcb..cd20c86 100644
--- a/diesel/src/mysql/query_builder/mod.rs
+++ b/diesel/src/mysql/query_builder/mod.rs
@@ -1,6 +1,6 @@
 use super::backend::Mysql;
-use query_builder::QueryBuilder;
-use result::QueryResult;
+use crate::query_builder::QueryBuilder;
+use crate::result::QueryResult;
 
 mod query_fragment_impls;
 
diff --git a/diesel/src/mysql/query_builder/query_fragment_impls.rs b/diesel/src/mysql/query_builder/query_fragment_impls.rs
index f1e8206..fe3e6fd 100644
--- a/diesel/src/mysql/query_builder/query_fragment_impls.rs
+++ b/diesel/src/mysql/query_builder/query_fragment_impls.rs
@@ -1,7 +1,7 @@
-use mysql::Mysql;
-use query_builder::locking_clause::{ForShare, ForUpdate, NoModifier, NoWait, SkipLocked};
-use query_builder::{AstPass, QueryFragment};
-use result::QueryResult;
+use crate::mysql::Mysql;
+use crate::query_builder::locking_clause::{ForShare, ForUpdate, NoModifier, NoWait, SkipLocked};
+use crate::query_builder::{AstPass, QueryFragment};
+use crate::result::QueryResult;
 
 impl QueryFragment<Mysql> for ForUpdate {
     fn walk_ast(&self, mut out: AstPass<Mysql>) -> QueryResult<()> {
diff --git a/diesel/src/mysql/types/date_and_time.rs b/diesel/src/mysql/types/date_and_time.rs
index d40b5cb..162645a 100644
--- a/diesel/src/mysql/types/date_and_time.rs
+++ b/diesel/src/mysql/types/date_and_time.rs
@@ -6,10 +6,10 @@
 use std::os::raw as libc;
 use std::{mem, ptr, slice};
 
-use deserialize::{self, FromSql};
-use mysql::{Mysql, MysqlValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types::{Date, Datetime, Time, Timestamp};
+use crate::deserialize::{self, FromSql};
+use crate::mysql::{Mysql, MysqlValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types::{Date, Datetime, Time, Timestamp};
 
 macro_rules! mysql_time_impls {
     ($ty:ty) => {
@@ -153,10 +153,10 @@
     use self::chrono::{Duration, NaiveDate, NaiveTime, Utc};
     use self::dotenv::dotenv;
 
-    use dsl::{now, sql};
-    use prelude::*;
-    use select;
-    use sql_types::{Date, Datetime, Time, Timestamp};
+    use crate::dsl::{now, sql};
+    use crate::prelude::*;
+    use crate::select;
+    use crate::sql_types::{Date, Datetime, Time, Timestamp};
 
     fn connection() -> MysqlConnection {
         dotenv().ok();
diff --git a/diesel/src/mysql/types/mod.rs b/diesel/src/mysql/types/mod.rs
index c6f075f..48e1f70 100644
--- a/diesel/src/mysql/types/mod.rs
+++ b/diesel/src/mysql/types/mod.rs
@@ -7,10 +7,10 @@
 use byteorder::WriteBytesExt;
 use std::io::Write;
 
-use deserialize::{self, FromSql};
-use mysql::{Mysql, MysqlTypeMetadata, MysqlValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types::*;
+use crate::deserialize::{self, FromSql};
+use crate::mysql::{Mysql, MysqlTypeMetadata, MysqlValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types::*;
 
 impl ToSql<TinyInt, Mysql> for i8 {
     fn to_sql<W: Write>(&self, out: &mut Output<W, Mysql>) -> serialize::Result {
diff --git a/diesel/src/mysql/types/numeric.rs b/diesel/src/mysql/types/numeric.rs
index ed8208c..2a99bf7 100644
--- a/diesel/src/mysql/types/numeric.rs
+++ b/diesel/src/mysql/types/numeric.rs
@@ -5,11 +5,11 @@
     use self::bigdecimal::BigDecimal;
     use std::io::prelude::*;
 
-    use backend;
-    use deserialize::{self, FromSql};
-    use mysql::Mysql;
-    use serialize::{self, IsNull, Output, ToSql};
-    use sql_types::{Binary, Numeric};
+    use crate::backend;
+    use crate::deserialize::{self, FromSql};
+    use crate::mysql::Mysql;
+    use crate::serialize::{self, IsNull, Output, ToSql};
+    use crate::sql_types::{Binary, Numeric};
 
     impl ToSql<Numeric, Mysql> for BigDecimal {
         fn to_sql<W: Write>(&self, out: &mut Output<W, Mysql>) -> serialize::Result {
diff --git a/diesel/src/mysql/value.rs b/diesel/src/mysql/value.rs
index 8ad1cbc..6df6dc3 100644
--- a/diesel/src/mysql/value.rs
+++ b/diesel/src/mysql/value.rs
@@ -1,5 +1,5 @@
 use super::Mysql;
-use backend::BinaryRawValue;
+use crate::backend::BinaryRawValue;
 
 /// Raw mysql value as received from the database
 #[derive(Copy, Clone, Debug)]
diff --git a/diesel/src/pg/backend.rs b/diesel/src/pg/backend.rs
index 4a02a95..5b852e7 100644
--- a/diesel/src/pg/backend.rs
+++ b/diesel/src/pg/backend.rs
@@ -4,10 +4,10 @@
 
 use super::query_builder::PgQueryBuilder;
 use super::{PgMetadataLookup, PgValue};
-use backend::*;
-use deserialize::Queryable;
-use query_builder::bind_collector::RawBytesBindCollector;
-use sql_types::{Oid, TypeMetadata};
+use crate::backend::*;
+use crate::deserialize::Queryable;
+use crate::query_builder::bind_collector::RawBytesBindCollector;
+use crate::sql_types::{Oid, TypeMetadata};
 
 /// The PostgreSQL backend
 #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
diff --git a/diesel/src/pg/connection/cursor.rs b/diesel/src/pg/connection/cursor.rs
index 9d6efd1..698de68 100644
--- a/diesel/src/pg/connection/cursor.rs
+++ b/diesel/src/pg/connection/cursor.rs
@@ -1,9 +1,9 @@
 use super::result::PgResult;
 use super::row::PgNamedRow;
-use deserialize::{FromSqlRow, Queryable, QueryableByName};
-use pg::Pg;
-use result::Error::DeserializationError;
-use result::QueryResult;
+use crate::deserialize::{FromSqlRow, Queryable, QueryableByName};
+use crate::pg::Pg;
+use crate::result::Error::DeserializationError;
+use crate::result::QueryResult;
 
 use std::marker::PhantomData;
 
diff --git a/diesel/src/pg/connection/mod.rs b/diesel/src/pg/connection/mod.rs
index 15e5956..ac4512a 100644
--- a/diesel/src/pg/connection/mod.rs
+++ b/diesel/src/pg/connection/mod.rs
@@ -12,14 +12,14 @@
 use self::raw::RawConnection;
 use self::result::PgResult;
 use self::stmt::Statement;
-use connection::*;
-use deserialize::{Queryable, QueryableByName};
-use pg::{metadata_lookup::PgMetadataCache, Pg, PgMetadataLookup, TransactionBuilder};
-use query_builder::bind_collector::RawBytesBindCollector;
-use query_builder::*;
-use result::ConnectionError::CouldntSetupConfiguration;
-use result::*;
-use sql_types::HasSqlType;
+use crate::connection::*;
+use crate::deserialize::{Queryable, QueryableByName};
+use crate::pg::{metadata_lookup::PgMetadataCache, Pg, PgMetadataLookup, TransactionBuilder};
+use crate::query_builder::bind_collector::RawBytesBindCollector;
+use crate::query_builder::*;
+use crate::result::ConnectionError::CouldntSetupConfiguration;
+use crate::result::*;
+use crate::sql_types::HasSqlType;
 
 /// The connection string expected by `PgConnection::establish`
 /// should be a PostgreSQL connection string, as documented at
@@ -189,15 +189,15 @@
     use std::env;
 
     use super::*;
-    use dsl::sql;
-    use prelude::*;
-    use sql_types::{Integer, VarChar};
+    use crate::dsl::sql;
+    use crate::prelude::*;
+    use crate::sql_types::{Integer, VarChar};
 
     #[test]
     fn prepared_statements_are_cached() {
         let connection = connection();
 
-        let query = ::select(1.into_sql::<Integer>());
+        let query = crate::select(1.into_sql::<Integer>());
 
         assert_eq!(Ok(1), query.get_result(&connection));
         assert_eq!(Ok(1), query.get_result(&connection));
@@ -208,8 +208,8 @@
     fn queries_with_identical_sql_but_different_types_are_cached_separately() {
         let connection = connection();
 
-        let query = ::select(1.into_sql::<Integer>());
-        let query2 = ::select("hi".into_sql::<VarChar>());
+        let query = crate::select(1.into_sql::<Integer>());
+        let query2 = crate::select("hi".into_sql::<VarChar>());
 
         assert_eq!(Ok(1), query.get_result(&connection));
         assert_eq!(Ok("hi".to_string()), query2.get_result(&connection));
@@ -220,8 +220,8 @@
     fn queries_with_identical_types_and_sql_but_different_bind_types_are_cached_separately() {
         let connection = connection();
 
-        let query = ::select(1.into_sql::<Integer>()).into_boxed::<Pg>();
-        let query2 = ::select("hi".into_sql::<VarChar>()).into_boxed::<Pg>();
+        let query = crate::select(1.into_sql::<Integer>()).into_boxed::<Pg>();
+        let query2 = crate::select("hi".into_sql::<VarChar>()).into_boxed::<Pg>();
 
         assert_eq!(0, connection.statement_cache.len());
         assert_eq!(Ok(1), query.get_result(&connection));
@@ -236,8 +236,8 @@
         let connection = connection();
 
         let hi = "HI".into_sql::<VarChar>();
-        let query = ::select(hi).into_boxed::<Pg>();
-        let query2 = ::select(lower(hi)).into_boxed::<Pg>();
+        let query = crate::select(hi).into_boxed::<Pg>();
+        let query2 = crate::select(lower(hi)).into_boxed::<Pg>();
 
         assert_eq!(0, connection.statement_cache.len());
         assert_eq!(Ok("HI".to_string()), query.get_result(&connection));
@@ -248,7 +248,7 @@
     #[test]
     fn queries_with_sql_literal_nodes_are_not_cached() {
         let connection = connection();
-        let query = ::select(sql::<Integer>("1"));
+        let query = crate::select(sql::<Integer>("1"));
 
         assert_eq!(Ok(1), query.get_result(&connection));
         assert_eq!(0, connection.statement_cache.len());
diff --git a/diesel/src/pg/connection/raw.rs b/diesel/src/pg/connection/raw.rs
index 6a7ccb0..98eb4f9 100644
--- a/diesel/src/pg/connection/raw.rs
+++ b/diesel/src/pg/connection/raw.rs
@@ -8,7 +8,7 @@
 use std::ptr::NonNull;
 use std::{ptr, str};
 
-use result::*;
+use crate::result::*;
 
 #[allow(missing_debug_implementations, missing_copy_implementations)]
 pub struct RawConnection {
diff --git a/diesel/src/pg/connection/result.rs b/diesel/src/pg/connection/result.rs
index cc92eac..b1e3bb1 100644
--- a/diesel/src/pg/connection/result.rs
+++ b/diesel/src/pg/connection/result.rs
@@ -8,7 +8,7 @@
 
 use super::raw::RawResult;
 use super::row::PgRow;
-use result::{DatabaseErrorInformation, DatabaseErrorKind, Error, QueryResult};
+use crate::result::{DatabaseErrorInformation, DatabaseErrorKind, Error, QueryResult};
 
 pub struct PgResult {
     internal_result: RawResult,
diff --git a/diesel/src/pg/connection/row.rs b/diesel/src/pg/connection/row.rs
index d618409..1ebf50c 100644
--- a/diesel/src/pg/connection/row.rs
+++ b/diesel/src/pg/connection/row.rs
@@ -1,7 +1,7 @@
 use super::cursor::NamedCursor;
 use super::result::PgResult;
-use pg::{Pg, PgValue};
-use row::*;
+use crate::pg::{Pg, PgValue};
+use crate::row::*;
 
 pub struct PgRow<'a> {
     db_result: &'a PgResult,
diff --git a/diesel/src/pg/connection/stmt/mod.rs b/diesel/src/pg/connection/stmt/mod.rs
index 1b3f1f2..d017d97 100644
--- a/diesel/src/pg/connection/stmt/mod.rs
+++ b/diesel/src/pg/connection/stmt/mod.rs
@@ -5,8 +5,8 @@
 use std::ptr;
 
 use super::result::PgResult;
-use pg::{PgConnection, PgTypeMetadata};
-use result::QueryResult;
+use crate::pg::{PgConnection, PgTypeMetadata};
+use crate::result::QueryResult;
 
 pub use super::raw::RawConnection;
 
diff --git a/diesel/src/pg/expression/array.rs b/diesel/src/pg/expression/array.rs
index 6e57c54..42c6339 100644
--- a/diesel/src/pg/expression/array.rs
+++ b/diesel/src/pg/expression/array.rs
@@ -1,9 +1,9 @@
-use backend::Backend;
-use expression::{
+use crate::backend::Backend;
+use crate::expression::{
     AppearsOnTable, AsExpressionList, Expression, NonAggregate, SelectableExpression,
 };
-use query_builder::{AstPass, QueryFragment};
-use sql_types;
+use crate::query_builder::{AstPass, QueryFragment};
+use crate::sql_types;
 use std::marker::PhantomData;
 
 /// An ARRAY[...] literal.
@@ -69,7 +69,7 @@
     DB: Backend,
     for<'a> &'a T: QueryFragment<DB>,
 {
-    fn walk_ast(&self, mut out: AstPass<DB>) -> ::result::QueryResult<()> {
+    fn walk_ast(&self, mut out: AstPass<DB>) -> crate::result::QueryResult<()> {
         out.push_sql("ARRAY[");
         QueryFragment::walk_ast(&&self.elements, out.reborrow())?;
         out.push_sql("]");
diff --git a/diesel/src/pg/expression/array_comparison.rs b/diesel/src/pg/expression/array_comparison.rs
index 435022e..899aa75 100644
--- a/diesel/src/pg/expression/array_comparison.rs
+++ b/diesel/src/pg/expression/array_comparison.rs
@@ -1,9 +1,9 @@
-use expression::subselect::Subselect;
-use expression::{AsExpression, Expression};
-use pg::Pg;
-use query_builder::*;
-use result::QueryResult;
-use sql_types::Array;
+use crate::expression::subselect::Subselect;
+use crate::expression::{AsExpression, Expression};
+use crate::pg::Pg;
+use crate::query_builder::*;
+use crate::result::QueryResult;
+use crate::sql_types::Array;
 
 /// Creates a PostgreSQL `ANY` expression.
 ///
diff --git a/diesel/src/pg/expression/date_and_time.rs b/diesel/src/pg/expression/date_and_time.rs
index 81bc5e7..2aaf79c 100644
--- a/diesel/src/pg/expression/date_and_time.rs
+++ b/diesel/src/pg/expression/date_and_time.rs
@@ -1,8 +1,8 @@
-use expression::Expression;
-use pg::Pg;
-use query_builder::*;
-use result::QueryResult;
-use sql_types::{Date, NotNull, Nullable, Timestamp, Timestamptz, VarChar};
+use crate::expression::Expression;
+use crate::pg::Pg;
+use crate::query_builder::*;
+use crate::result::QueryResult;
+use crate::sql_types::{Date, NotNull, Nullable, Timestamp, Timestamptz, VarChar};
 
 /// Marker trait for types which are valid in `AT TIME ZONE` expressions
 pub trait DateTimeLike {}
diff --git a/diesel/src/pg/expression/expression_methods.rs b/diesel/src/pg/expression/expression_methods.rs
index d022a25..b597015 100644
--- a/diesel/src/pg/expression/expression_methods.rs
+++ b/diesel/src/pg/expression/expression_methods.rs
@@ -1,8 +1,8 @@
 //! PostgreSQL specific expression methods
 
 use super::operators::*;
-use expression::{AsExpression, Expression};
-use sql_types::{Array, Nullable, Text};
+use crate::expression::{AsExpression, Expression};
+use crate::sql_types::{Array, Nullable, Text};
 
 /// PostgreSQL specific methods which are present on all expressions.
 pub trait PgExpressionMethods: Expression + Sized {
@@ -64,7 +64,7 @@
 impl<T: Expression> PgExpressionMethods for T {}
 
 use super::date_and_time::{AtTimeZone, DateTimeLike};
-use sql_types::VarChar;
+use crate::sql_types::VarChar;
 
 /// PostgreSQL specific methods present on timestamp expressions.
 pub trait PgTimestampExpressionMethods: Expression + Sized {
@@ -82,8 +82,6 @@
     ///
     /// ```rust
     /// # #[macro_use] extern crate diesel;
-    /// # #[cfg(feature = "chrono")]
-    /// # extern crate chrono;
     /// # include!("../../doctest_setup.rs");
     /// #
     /// # table! {
@@ -98,7 +96,7 @@
     /// #
     /// # #[cfg(all(feature = "postgres", feature = "chrono"))]
     /// # fn run_test() -> QueryResult<()> {
-    /// #     use timestamps::dsl::*;
+    /// #     use self::timestamps::dsl::*;
     /// #     use chrono::*;
     /// #     let connection = establish_connection();
     /// #     connection.execute("CREATE TABLE timestamps (\"timestamp\"
@@ -316,7 +314,7 @@
 impl<T> ArrayOrNullableArray for Array<T> {}
 impl<T> ArrayOrNullableArray for Nullable<Array<T>> {}
 
-use expression::operators::{Asc, Desc};
+use crate::expression::operators::{Asc, Desc};
 
 /// PostgreSQL expression methods related to sorting.
 ///
diff --git a/diesel/src/pg/expression/extensions/interval_dsl.rs b/diesel/src/pg/expression/extensions/interval_dsl.rs
index f06afe4..3c62837 100644
--- a/diesel/src/pg/expression/extensions/interval_dsl.rs
+++ b/diesel/src/pg/expression/extensions/interval_dsl.rs
@@ -1,6 +1,6 @@
 use std::ops::Mul;
 
-use data_types::PgInterval;
+use crate::data_types::PgInterval;
 
 /// A DSL added to integers and `f64` to construct PostgreSQL intervals.
 ///
@@ -243,10 +243,10 @@
     use self::quickcheck::quickcheck;
 
     use super::*;
-    use data_types::PgInterval;
-    use dsl::sql;
-    use prelude::*;
-    use {select, sql_types};
+    use crate::data_types::PgInterval;
+    use crate::dsl::sql;
+    use crate::prelude::*;
+    use crate::{select, sql_types};
 
     thread_local! {
         static CONN: PgConnection = {
diff --git a/diesel/src/pg/expression/helper_types.rs b/diesel/src/pg/expression/helper_types.rs
index 83d33c3..0f96fe8 100644
--- a/diesel/src/pg/expression/helper_types.rs
+++ b/diesel/src/pg/expression/helper_types.rs
@@ -1,5 +1,5 @@
-use dsl::AsExprOf;
-use sql_types::VarChar;
+use crate::dsl::AsExprOf;
+use crate::sql_types::VarChar;
 
 /// The return type of `lhs.ilike(rhs)`
 pub type ILike<Lhs, Rhs> = super::operators::ILike<Lhs, AsExprOf<Rhs, VarChar>>;
diff --git a/diesel/src/pg/expression/operators.rs b/diesel/src/pg/expression/operators.rs
index c71e946..7c9f93d 100644
--- a/diesel/src/pg/expression/operators.rs
+++ b/diesel/src/pg/expression/operators.rs
@@ -1,4 +1,4 @@
-use pg::Pg;
+use crate::pg::Pg;
 
 infix_operator!(IsDistinctFrom, " IS DISTINCT FROM ", backend: Pg);
 infix_operator!(IsNotDistinctFrom, " IS NOT DISTINCT FROM ", backend: Pg);
diff --git a/diesel/src/pg/metadata_lookup.rs b/diesel/src/pg/metadata_lookup.rs
index 71d3c3ba..8de80c2 100644
--- a/diesel/src/pg/metadata_lookup.rs
+++ b/diesel/src/pg/metadata_lookup.rs
@@ -1,7 +1,7 @@
 #![allow(unused_parens)] // FIXME: Remove this attribute once false positive is resolved.
 
 use super::{PgConnection, PgTypeMetadata};
-use prelude::*;
+use crate::prelude::*;
 
 use std::cell::RefCell;
 use std::collections::HashMap;
diff --git a/diesel/src/pg/query_builder/distinct_on.rs b/diesel/src/pg/query_builder/distinct_on.rs
index d033f0d..37d464b 100644
--- a/diesel/src/pg/query_builder/distinct_on.rs
+++ b/diesel/src/pg/query_builder/distinct_on.rs
@@ -1,8 +1,8 @@
-use expression::SelectableExpression;
-use pg::Pg;
-use query_builder::{AstPass, QueryFragment, SelectQuery, SelectStatement};
-use query_dsl::methods::DistinctOnDsl;
-use result::QueryResult;
+use crate::expression::SelectableExpression;
+use crate::pg::Pg;
+use crate::query_builder::{AstPass, QueryFragment, SelectQuery, SelectStatement};
+use crate::query_dsl::methods::DistinctOnDsl;
+use crate::result::QueryResult;
 
 /// Represents `DISTINCT ON (...)`
 #[derive(Debug, Clone, Copy, QueryId)]
diff --git a/diesel/src/pg/query_builder/mod.rs b/diesel/src/pg/query_builder/mod.rs
index 03bd6c1..91669e2 100644
--- a/diesel/src/pg/query_builder/mod.rs
+++ b/diesel/src/pg/query_builder/mod.rs
@@ -1,6 +1,6 @@
 use super::backend::Pg;
-use query_builder::QueryBuilder;
-use result::QueryResult;
+use crate::query_builder::QueryBuilder;
+use crate::result::QueryResult;
 
 mod distinct_on;
 mod query_fragment_impls;
diff --git a/diesel/src/pg/query_builder/query_fragment_impls.rs b/diesel/src/pg/query_builder/query_fragment_impls.rs
index 868ec27..e38745b 100644
--- a/diesel/src/pg/query_builder/query_fragment_impls.rs
+++ b/diesel/src/pg/query_builder/query_fragment_impls.rs
@@ -1,9 +1,9 @@
-use pg::Pg;
-use query_builder::locking_clause::{
+use crate::pg::Pg;
+use crate::query_builder::locking_clause::{
     ForKeyShare, ForNoKeyUpdate, ForShare, ForUpdate, NoModifier, NoWait, SkipLocked,
 };
-use query_builder::{AstPass, QueryFragment};
-use result::QueryResult;
+use crate::query_builder::{AstPass, QueryFragment};
+use crate::result::QueryResult;
 
 impl QueryFragment<Pg> for ForUpdate {
     fn walk_ast(&self, mut out: AstPass<Pg>) -> QueryResult<()> {
diff --git a/diesel/src/pg/serialize/write_tuple.rs b/diesel/src/pg/serialize/write_tuple.rs
index 11ee281..5a3c904 100644
--- a/diesel/src/pg/serialize/write_tuple.rs
+++ b/diesel/src/pg/serialize/write_tuple.rs
@@ -1,7 +1,7 @@
 use std::io::Write;
 
-use pg::Pg;
-use serialize::{self, Output};
+use crate::pg::Pg;
+use crate::serialize::{self, Output};
 
 /// Helper trait for writing tuples as named composite types
 ///
diff --git a/diesel/src/pg/transaction.rs b/diesel/src/pg/transaction.rs
index 68b432a..a5402ef 100644
--- a/diesel/src/pg/transaction.rs
+++ b/diesel/src/pg/transaction.rs
@@ -1,10 +1,10 @@
 #![allow(dead_code)]
-use backend::Backend;
-use connection::TransactionManager;
-use pg::Pg;
-use prelude::*;
-use query_builder::{AstPass, QueryBuilder, QueryFragment};
-use result::Error;
+use crate::backend::Backend;
+use crate::connection::TransactionManager;
+use crate::pg::Pg;
+use crate::prelude::*;
+use crate::query_builder::{AstPass, QueryBuilder, QueryFragment};
+use crate::result::Error;
 
 /// Used to build a transaction, specifying additional details.
 ///
diff --git a/diesel/src/pg/types/array.rs b/diesel/src/pg/types/array.rs
index 8b703ed..cddc680 100644
--- a/diesel/src/pg/types/array.rs
+++ b/diesel/src/pg/types/array.rs
@@ -2,10 +2,10 @@
 use std::fmt;
 use std::io::Write;
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgMetadataLookup, PgTypeMetadata, PgValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types::{Array, HasSqlType, Nullable};
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgMetadataLookup, PgTypeMetadata, PgValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types::{Array, HasSqlType, Nullable};
 
 impl<T> HasSqlType<Array<T>> for Pg
 where
@@ -56,8 +56,8 @@
     }
 }
 
-use expression::bound::Bound;
-use expression::AsExpression;
+use crate::expression::bound::Bound;
+use crate::expression::AsExpression;
 
 macro_rules! array_as_expression {
     ($ty:ty, $sql_type:ty) => {
diff --git a/diesel/src/pg/types/date_and_time/chrono.rs b/diesel/src/pg/types/date_and_time/chrono.rs
index 38dc4ab..686cb11 100644
--- a/diesel/src/pg/types/date_and_time/chrono.rs
+++ b/diesel/src/pg/types/date_and_time/chrono.rs
@@ -8,10 +8,10 @@
 use std::io::Write;
 
 use super::{PgDate, PgTime, PgTimestamp};
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, Output, ToSql};
-use sql_types::{Date, Time, Timestamp, Timestamptz};
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, Output, ToSql};
+use crate::sql_types::{Date, Time, Timestamp, Timestamptz};
 
 // Postgres timestamps start from January 1st 2000.
 fn pg_epoch() -> NaiveDateTime {
@@ -132,10 +132,10 @@
     use self::chrono::{Duration, FixedOffset, NaiveDate, NaiveTime, TimeZone, Utc};
     use self::dotenv::dotenv;
 
-    use dsl::{now, sql};
-    use prelude::*;
-    use select;
-    use sql_types::{Date, Time, Timestamp, Timestamptz};
+    use crate::dsl::{now, sql};
+    use crate::prelude::*;
+    use crate::select;
+    use crate::sql_types::{Date, Time, Timestamp, Timestamptz};
 
     fn connection() -> PgConnection {
         dotenv().ok();
diff --git a/diesel/src/pg/types/date_and_time/deprecated_time.rs b/diesel/src/pg/types/date_and_time/deprecated_time.rs
index 70fd3ec..748a813 100644
--- a/diesel/src/pg/types/date_and_time/deprecated_time.rs
+++ b/diesel/src/pg/types/date_and_time/deprecated_time.rs
@@ -4,10 +4,10 @@
 
 use self::time::{Duration, Timespec};
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, Output, ToSql};
-use sql_types;
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, Output, ToSql};
+use crate::sql_types;
 
 #[derive(FromSqlRow, AsExpression)]
 #[diesel(foreign_derive)]
@@ -44,10 +44,10 @@
     use self::dotenv::dotenv;
     use self::time::{Duration, Timespec};
 
-    use dsl::{now, sql};
-    use prelude::*;
-    use select;
-    use sql_types::Timestamp;
+    use crate::dsl::{now, sql};
+    use crate::prelude::*;
+    use crate::select;
+    use crate::sql_types::Timestamp;
 
     fn connection() -> PgConnection {
         dotenv().ok();
diff --git a/diesel/src/pg/types/date_and_time/mod.rs b/diesel/src/pg/types/date_and_time/mod.rs
index e7ab953..e14da6c 100644
--- a/diesel/src/pg/types/date_and_time/mod.rs
+++ b/diesel/src/pg/types/date_and_time/mod.rs
@@ -1,10 +1,10 @@
 use std::io::Write;
 use std::ops::Add;
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types::{self, Date, Interval, Time, Timestamp, Timestamptz};
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types::{self, Date, Interval, Time, Timestamp, Timestamptz};
 
 #[cfg(feature = "chrono")]
 mod chrono;
diff --git a/diesel/src/pg/types/date_and_time/std_time.rs b/diesel/src/pg/types/date_and_time/std_time.rs
index 8539b3e..1bf879b 100644
--- a/diesel/src/pg/types/date_and_time/std_time.rs
+++ b/diesel/src/pg/types/date_and_time/std_time.rs
@@ -1,10 +1,10 @@
 use std::io::Write;
 use std::time::{Duration, SystemTime, UNIX_EPOCH};
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, Output, ToSql};
-use sql_types;
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, Output, ToSql};
+use crate::sql_types;
 
 fn pg_epoch() -> SystemTime {
     let thirty_years = Duration::from_secs(946_684_800);
@@ -64,10 +64,10 @@
     use self::dotenv::dotenv;
     use std::time::{Duration, SystemTime, UNIX_EPOCH};
 
-    use dsl::{now, sql};
-    use prelude::*;
-    use select;
-    use sql_types::Timestamp;
+    use crate::dsl::{now, sql};
+    use crate::prelude::*;
+    use crate::select;
+    use crate::sql_types::Timestamp;
 
     fn connection() -> PgConnection {
         dotenv().ok();
diff --git a/diesel/src/pg/types/floats/mod.rs b/diesel/src/pg/types/floats/mod.rs
index 5692875..f8ef261 100644
--- a/diesel/src/pg/types/floats/mod.rs
+++ b/diesel/src/pg/types/floats/mod.rs
@@ -2,10 +2,10 @@
 use std::error::Error;
 use std::io::prelude::*;
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types;
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types;
 
 #[cfg(feature = "quickcheck")]
 mod quickcheck_impls;
diff --git a/diesel/src/pg/types/integers.rs b/diesel/src/pg/types/integers.rs
index d4444e5..3e74e04 100644
--- a/diesel/src/pg/types/integers.rs
+++ b/diesel/src/pg/types/integers.rs
@@ -1,10 +1,10 @@
 use byteorder::{NetworkEndian, ReadBytesExt, WriteBytesExt};
 use std::io::prelude::*;
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types;
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types;
 
 impl FromSql<sql_types::Oid, Pg> for u32 {
     fn from_sql(bytes: Option<PgValue<'_>>) -> deserialize::Result<Self> {
diff --git a/diesel/src/pg/types/json.rs b/diesel/src/pg/types/json.rs
index 0e5a99c..8627b52 100644
--- a/diesel/src/pg/types/json.rs
+++ b/diesel/src/pg/types/json.rs
@@ -4,15 +4,15 @@
 
 use std::io::prelude::*;
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types;
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types;
 
 #[allow(dead_code)]
 mod foreign_derives {
     use super::serde_json;
-    use sql_types::{Json, Jsonb};
+    use crate::sql_types::{Json, Jsonb};
 
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
diff --git a/diesel/src/pg/types/mac_addr.rs b/diesel/src/pg/types/mac_addr.rs
new file mode 100644
index 0000000..69a9d21
--- /dev/null
+++ b/diesel/src/pg/types/mac_addr.rs
@@ -0,0 +1,45 @@
+use std::convert::TryInto;
+use std::io::prelude::*;
+
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types::MacAddr;
+
+#[allow(dead_code)]
+mod foreign_derives {
+    use super::*;
+
+    #[derive(FromSqlRow, AsExpression)]
+    #[diesel(foreign_derive)]
+    #[sql_type = "MacAddr"]
+    struct ByteArrayProxy([u8; 6]);
+}
+
+impl FromSql<MacAddr, Pg> for [u8; 6] {
+    fn from_sql(value: Option<PgValue<'_>>) -> deserialize::Result<Self> {
+        let value = not_none!(value);
+        value
+            .as_bytes()
+            .try_into()
+            .map_err(|_| "invalid network address format: input isn't 6 bytes.".into())
+    }
+}
+
+impl ToSql<MacAddr, Pg> for [u8; 6] {
+    fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> serialize::Result {
+        out.write_all(&self[..])
+            .map(|_| IsNull::No)
+            .map_err(Into::into)
+    }
+}
+
+#[test]
+fn macaddr_roundtrip() {
+    let mut bytes = Output::test();
+    let input_address = [0x52, 0x54, 0x00, 0xfb, 0xc6, 0x16];
+    ToSql::<MacAddr, Pg>::to_sql(&input_address, &mut bytes).unwrap();
+    let output_address: [u8; 6] =
+        FromSql::from_sql(Some(PgValue::for_test(bytes.as_ref()))).unwrap();
+    assert_eq!(input_address, output_address);
+}
diff --git a/diesel/src/pg/types/mod.rs b/diesel/src/pg/types/mod.rs
index 95934ab..1e4d40f 100644
--- a/diesel/src/pg/types/mod.rs
+++ b/diesel/src/pg/types/mod.rs
@@ -8,6 +8,7 @@
 mod integers;
 #[cfg(feature = "serde_json")]
 mod json;
+mod mac_addr;
 #[doc(hidden)]
 pub mod money;
 #[cfg(feature = "network-address")]
@@ -107,17 +108,17 @@
     pub struct Range<ST>(ST);
 
     #[doc(hidden)]
-    pub type Int4range = Range<::sql_types::Int4>;
+    pub type Int4range = Range<crate::sql_types::Int4>;
     #[doc(hidden)]
-    pub type Int8range = Range<::sql_types::Int8>;
+    pub type Int8range = Range<crate::sql_types::Int8>;
     #[doc(hidden)]
-    pub type Daterange = Range<::sql_types::Date>;
+    pub type Daterange = Range<crate::sql_types::Date>;
     #[doc(hidden)]
-    pub type Numrange = Range<::sql_types::Numeric>;
+    pub type Numrange = Range<crate::sql_types::Numeric>;
     #[doc(hidden)]
-    pub type Tsrange = Range<::sql_types::Timestamp>;
+    pub type Tsrange = Range<crate::sql_types::Timestamp>;
     #[doc(hidden)]
-    pub type Tstzrange = Range<::sql_types::Timestamptz>;
+    pub type Tstzrange = Range<crate::sql_types::Timestamptz>;
 
     /// The `Record` (a.k.a. tuple) SQL type.
     ///
@@ -161,13 +162,13 @@
     pub struct Record<ST>(ST);
 
     /// Alias for `SmallInt`
-    pub type SmallSerial = ::sql_types::SmallInt;
+    pub type SmallSerial = crate::sql_types::SmallInt;
 
     /// Alias for `Integer`
-    pub type Serial = ::sql_types::Integer;
+    pub type Serial = crate::sql_types::Integer;
 
     /// Alias for `BigInt`
-    pub type BigSerial = ::sql_types::BigInt;
+    pub type BigSerial = crate::sql_types::BigInt;
 
     /// The `UUID` SQL type. This type can only be used with `feature = "uuid"`
     /// (uuid <=0.6) or `feature = "uuidv07"` (uuid = 0.7)
@@ -189,10 +190,10 @@
 
     /// Alias for `Binary`, to ensure `infer_schema!` works
     #[doc(hidden)]
-    pub type Bytea = ::sql_types::Binary;
+    pub type Bytea = crate::sql_types::Binary;
 
     #[doc(hidden)]
-    pub type Bpchar = ::sql_types::VarChar;
+    pub type Bpchar = crate::sql_types::VarChar;
 
     /// The JSON SQL type.  This type can only be used with `feature =
     /// "serde_json"`
@@ -252,7 +253,6 @@
     ///
     /// ```rust
     /// # #![allow(dead_code)]
-    /// extern crate serde_json;
     /// # #[macro_use] extern crate diesel;
     /// # include!("../../doctest_setup.rs");
     /// #
@@ -264,27 +264,31 @@
     ///     }
     /// }
     ///
-    /// # fn main() {
+    /// # #[cfg(feature = "serde_json")]
+    /// # fn main() -> Result<(), Box<dyn std::error::Error>> {
     /// #     use diesel::insert_into;
-    /// #     use contacts::dsl::*;
+    /// #     use self::contacts::dsl::*;
     /// #     let connection = connection_no_data();
-    /// #     connection.execute("CREATE TABLE contacts (
+    /// #     diesel::sql_query("CREATE TABLE contacts (
     /// #         id SERIAL PRIMARY KEY,
     /// #         name VARCHAR NOT NULL,
     /// #         address JSONB NOT NULL
-    /// #     )").unwrap();
+    /// #     )").execute(&connection)?;
     /// let santas_address: serde_json::Value = serde_json::from_str(r#"{
     ///     "street": "Article Circle Expressway 1",
     ///     "city": "North Pole",
     ///     "postcode": "99705",
     ///     "state": "Alaska"
-    /// }"#).unwrap();
+    /// }"#)?;
     /// let inserted_address = insert_into(contacts)
     ///     .values((name.eq("Claus"), address.eq(&santas_address)))
     ///     .returning(address)
-    ///     .get_result(&connection);
-    /// assert_eq!(Ok(santas_address), inserted_address);
+    ///     .get_result::<serde_json::Value>(&connection)?;
+    /// assert_eq!(santas_address, inserted_address);
+    /// #     Ok(())
     /// # }
+    /// # #[cfg(not(feature = "serde_json"))]
+    /// # fn main() {}
     /// ```
     #[derive(Debug, Clone, Copy, Default, QueryId, SqlType)]
     #[postgres(oid = "3802", array_oid = "3807")]
@@ -307,7 +311,6 @@
     /// # Examples
     ///
     /// ```rust
-    /// # #![allow(dead_code)]
     /// # #[macro_use] extern crate diesel;
     /// # include!("../../doctest_setup.rs");
     /// use diesel::data_types::Cents;
@@ -322,7 +325,7 @@
     ///
     /// # fn main() {
     /// #     use diesel::insert_into;
-    /// #     use items::dsl::*;
+    /// #     use self::items::dsl::*;
     /// #     let connection = connection_no_data();
     /// #     connection.execute("CREATE TABLE items (
     /// #         id SERIAL PRIMARY KEY,
@@ -340,7 +343,7 @@
     #[postgres(oid = "790", array_oid = "791")]
     pub struct Money;
 
-    /// The [`MACADDR`](https://www.postgresql.org/docs/9.6/static/datatype-net-types.html) SQL type. This type can only be used with `feature = "network-address"`
+    /// The [`MACADDR`](https://www.postgresql.org/docs/9.6/static/datatype-net-types.html) SQL type.
     ///
     /// ### [`ToSql`] impls
     ///
@@ -356,7 +359,6 @@
     /// # Examples
     ///
     /// ```rust
-    /// # #![allow(dead_code)]
     /// # #[macro_use] extern crate diesel;
     /// # include!("../../doctest_setup.rs");
     /// table! {
@@ -366,19 +368,20 @@
     ///     }
     /// }
     ///
-    /// # fn main() {
+    /// # fn main() -> Result<(), Box<dyn std::error::Error>> {
     /// #     use diesel::insert_into;
-    /// #     use devices::dsl::*;
+    /// #     use self::devices::dsl::*;
     /// #     let connection = connection_no_data();
-    /// #     connection.execute("CREATE TABLE devices (
+    /// #     diesel::sql_query("CREATE TABLE devices (
     /// #         id SERIAL PRIMARY KEY,
     /// #         macaddr MACADDR NOT NULL
-    /// #     )").unwrap();
+    /// #     )").execute(&connection)?;
     /// let inserted_macaddr = insert_into(devices)
     ///     .values(macaddr.eq([0x08, 0x00, 0x2b, 0x01, 0x02, 0x03]))
     ///     .returning(macaddr)
-    ///     .get_result(&connection);
-    /// assert_eq!(Ok([0x08, 0x00, 0x2b, 0x01, 0x02, 0x03]), inserted_macaddr);
+    ///     .get_result::<[u8; 6]>(&connection)?;
+    /// assert_eq!([0x08, 0x00, 0x2b, 0x01, 0x02, 0x03], inserted_macaddr);
+    /// #     Ok(())
     /// # }
     /// ```
     #[derive(Debug, Clone, Copy, Default, QueryId, SqlType)]
@@ -406,13 +409,9 @@
     /// # Examples
     ///
     /// ```rust
-    /// # #![allow(dead_code)]
     /// # #[macro_use] extern crate diesel;
     /// # include!("../../doctest_setup.rs");
     /// #
-    /// extern crate ipnetwork;
-    /// use ipnetwork::IpNetwork;
-    ///
     /// table! {
     ///     clients {
     ///         id -> Integer,
@@ -420,22 +419,28 @@
     ///     }
     /// }
     ///
-    /// # fn main() {
+    /// # #[cfg(feature = "network-address")]
+    /// # fn main() -> Result<(), Box<dyn std::error::Error>> {
+    /// use ipnetwork::IpNetwork;
+    ///
     /// #     use diesel::insert_into;
-    /// #     use clients::dsl::*;
-    /// #     use std::str::FromStr;
+    /// #     use self::clients::dsl::*;
     /// #     let connection = connection_no_data();
-    /// #     connection.execute("CREATE TABLE clients (
+    /// #     diesel::sql_query("CREATE TABLE clients (
     /// #         id SERIAL PRIMARY KEY,
     /// #         ip_address INET NOT NULL
-    /// #     )").unwrap();
-    /// let addr = IpNetwork::from_str("10.1.9.32/32").unwrap();
+    /// #     )").execute(&connection)?;
+    /// let addr = "10.1.9.32/32".parse::<IpNetwork>()?;
     /// let inserted_address = insert_into(clients)
     ///     .values(ip_address.eq(&addr))
     ///     .returning(ip_address)
-    ///     .get_result(&connection);
-    /// assert_eq!(Ok(addr), inserted_address);
+    ///     .get_result(&connection)?;
+    /// assert_eq!(addr, inserted_address);
+    /// #     Ok(())
     /// # }
+    /// #
+    /// # #[cfg(not(feature = "network-address"))]
+    /// # fn main() {}
     /// ```
     #[derive(Debug, Clone, Copy, Default, QueryId, SqlType)]
     #[postgres(oid = "869", array_oid = "1041")]
@@ -461,9 +466,6 @@
     /// # #![allow(dead_code)]
     /// # #[macro_use] extern crate diesel;
     /// # include!("../../doctest_setup.rs");
-    /// extern crate ipnetwork;
-    /// use ipnetwork::IpNetwork;
-    ///
     /// table! {
     ///     clients {
     ///         id -> Integer,
@@ -471,22 +473,27 @@
     ///     }
     /// }
     ///
-    /// # fn main() {
+    /// # #[cfg(feature = "network-address")]
+    /// # fn main() -> Result<(), Box<dyn std::error::Error>> {
+    /// use ipnetwork::IpNetwork;
+    ///
     /// #     use diesel::insert_into;
-    /// #     use clients::dsl::*;
-    /// #     use std::str::FromStr;
+    /// #     use self::clients::dsl::*;
     /// #     let connection = connection_no_data();
-    /// #     connection.execute("CREATE TABLE clients (
+    /// #     diesel::sql_query("CREATE TABLE clients (
     /// #         id SERIAL PRIMARY KEY,
     /// #         ip_address CIDR NOT NULL
-    /// #     )").unwrap();
-    /// let addr = IpNetwork::from_str("10.1.9.32/32").unwrap();
+    /// #     )").execute(&connection)?;
+    /// let addr = "10.1.9.32/32".parse::<IpNetwork>()?;
     /// let inserted_addr = insert_into(clients)
     ///     .values(ip_address.eq(&addr))
     ///     .returning(ip_address)
-    ///     .get_result(&connection);
-    /// assert_eq!(Ok(addr), inserted_addr);
+    ///     .get_result(&connection)?;
+    /// assert_eq!(addr, inserted_addr);
+    /// #     Ok(())
     /// # }
+    /// # #[cfg(not(feature = "network-address"))]
+    /// # fn main() {}
     /// ```
     #[derive(Debug, Clone, Copy, Default, QueryId, SqlType)]
     #[postgres(oid = "650", array_oid = "651")]
@@ -495,8 +502,8 @@
 
 mod ops {
     use super::sql_types::*;
-    use sql_types::ops::*;
-    use sql_types::Interval;
+    use crate::sql_types::ops::*;
+    use crate::sql_types::Interval;
 
     impl Add for Timestamptz {
         type Rhs = Interval;
diff --git a/diesel/src/pg/types/money.rs b/diesel/src/pg/types/money.rs
index 30944ce..bd6d909 100644
--- a/diesel/src/pg/types/money.rs
+++ b/diesel/src/pg/types/money.rs
@@ -3,10 +3,10 @@
 use std::io::prelude::*;
 use std::ops::{Add, AddAssign, Sub, SubAssign};
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, Output, ToSql};
-use sql_types::{BigInt, Money};
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, Output, ToSql};
+use crate::sql_types::{BigInt, Money};
 
 /// Money is represented in Postgres as a 64 bit signed integer.  This struct is a dumb wrapper
 /// type, meant only to indicate the integer's meaning.  The fractional precision of the value is
diff --git a/diesel/src/pg/types/network_address.rs b/diesel/src/pg/types/network_address.rs
index 0674aa3..240627d 100644
--- a/diesel/src/pg/types/network_address.rs
+++ b/diesel/src/pg/types/network_address.rs
@@ -2,14 +2,13 @@
 extern crate libc;
 
 use self::ipnetwork::{IpNetwork, Ipv4Network, Ipv6Network};
-use std::convert::TryInto;
 use std::io::prelude::*;
 use std::net::{Ipv4Addr, Ipv6Addr};
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types::{Cidr, Inet, MacAddr};
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types::{Cidr, Inet};
 
 #[cfg(windows)]
 const AF_INET: u8 = 2;
@@ -28,11 +27,6 @@
 
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
-    #[sql_type = "MacAddr"]
-    struct ByteArrayProxy([u8; 6]);
-
-    #[derive(FromSqlRow, AsExpression)]
-    #[diesel(foreign_derive)]
     #[sql_type = "Inet"]
     #[sql_type = "Cidr"]
     struct IpNetworkProxy(IpNetwork);
@@ -61,23 +55,6 @@
     };
 }
 
-impl FromSql<MacAddr, Pg> for [u8; 6] {
-    fn from_sql(value: Option<PgValue<'_>>) -> deserialize::Result<Self> {
-        let value = not_none!(value);
-        value
-            .as_bytes()
-            .try_into()
-            .map_err(|_| "invalid network address format: input isn't 6 bytes.".into())
-    }
-}
-
-impl ToSql<MacAddr, Pg> for [u8; 6] {
-    fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> serialize::Result {
-        out.write_all(&self[..])
-            .map(|_| IsNull::No)
-            .map_err(Into::into)
-    }
-}
 macro_rules! impl_Sql {
     ($ty: ty, $net_type: expr) => {
         impl FromSql<$ty, Pg> for IpNetwork {
@@ -158,16 +135,6 @@
 impl_Sql!(Cidr, 1);
 
 #[test]
-fn macaddr_roundtrip() {
-    let mut bytes = Output::test();
-    let input_address = [0x52, 0x54, 0x00, 0xfb, 0xc6, 0x16];
-    ToSql::<MacAddr, Pg>::to_sql(&input_address, &mut bytes).unwrap();
-    let output_address: [u8; 6] =
-        FromSql::from_sql(Some(PgValue::for_test(bytes.as_ref()))).unwrap();
-    assert_eq!(input_address, output_address);
-}
-
-#[test]
 fn v4address_to_sql() {
     macro_rules! test_to_sql {
         ($ty:ty, $net_type:expr) => {
diff --git a/diesel/src/pg/types/numeric.rs b/diesel/src/pg/types/numeric.rs
index ac42e94..c965a6c 100644
--- a/diesel/src/pg/types/numeric.rs
+++ b/diesel/src/pg/types/numeric.rs
@@ -11,11 +11,11 @@
     use self::num_traits::{Signed, ToPrimitive, Zero};
     use std::io::prelude::*;
 
-    use deserialize::{self, FromSql};
-    use pg::data_types::PgNumeric;
-    use pg::{Pg, PgValue};
-    use serialize::{self, Output, ToSql};
-    use sql_types::Numeric;
+    use crate::deserialize::{self, FromSql};
+    use crate::pg::data_types::PgNumeric;
+    use crate::pg::{Pg, PgValue};
+    use crate::serialize::{self, Output, ToSql};
+    use crate::sql_types::Numeric;
 
     use std::convert::{TryFrom, TryInto};
     use std::error::Error;
diff --git a/diesel/src/pg/types/primitives.rs b/diesel/src/pg/types/primitives.rs
index 03f8dbd..79e1479 100644
--- a/diesel/src/pg/types/primitives.rs
+++ b/diesel/src/pg/types/primitives.rs
@@ -1,9 +1,9 @@
 use std::io::prelude::*;
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types;
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types;
 
 impl FromSql<sql_types::Bool, Pg> for bool {
     fn from_sql(bytes: Option<PgValue<'_>>) -> deserialize::Result<Self> {
diff --git a/diesel/src/pg/types/ranges.rs b/diesel/src/pg/types/ranges.rs
index fbb61c4..81fc127 100644
--- a/diesel/src/pg/types/ranges.rs
+++ b/diesel/src/pg/types/ranges.rs
@@ -2,12 +2,12 @@
 use std::collections::Bound;
 use std::io::Write;
 
-use deserialize::{self, FromSql, FromSqlRow, Queryable};
-use expression::bound::Bound as SqlBound;
-use expression::AsExpression;
-use pg::{Pg, PgMetadataLookup, PgTypeMetadata, PgValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types::*;
+use crate::deserialize::{self, FromSql, FromSqlRow, Queryable};
+use crate::expression::bound::Bound as SqlBound;
+use crate::expression::AsExpression;
+use crate::pg::{Pg, PgMetadataLookup, PgTypeMetadata, PgValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types::*;
 
 // https://github.com/postgres/postgres/blob/113b0045e20d40f726a0a30e33214455e4f1385e/src/include/utils/rangetypes.h#L35-L43
 bitflags! {
@@ -69,7 +69,7 @@
 where
     (Bound<T>, Bound<T>): FromSql<Range<ST>, Pg>,
 {
-    fn build_from_row<R: ::row::Row<Pg>>(row: &mut R) -> deserialize::Result<Self> {
+    fn build_from_row<R: crate::row::Row<Pg>>(row: &mut R) -> deserialize::Result<Self> {
         FromSql::<Range<ST>, Pg>::from_sql(row.take())
     }
 }
diff --git a/diesel/src/pg/types/record.rs b/diesel/src/pg/types/record.rs
index 28416f2..aef8ba7 100644
--- a/diesel/src/pg/types/record.rs
+++ b/diesel/src/pg/types/record.rs
@@ -2,14 +2,14 @@
 use std::io::Write;
 use std::num::NonZeroU32;
 
-use deserialize::{self, FromSql, FromSqlRow, Queryable};
-use expression::{AppearsOnTable, AsExpression, Expression, SelectableExpression};
-use pg::{Pg, PgValue};
-use query_builder::{AstPass, QueryFragment};
-use result::QueryResult;
-use row::Row;
-use serialize::{self, IsNull, Output, ToSql, WriteTuple};
-use sql_types::{HasSqlType, Record};
+use crate::deserialize::{self, FromSql, FromSqlRow, Queryable};
+use crate::expression::{AppearsOnTable, AsExpression, Expression, SelectableExpression};
+use crate::pg::{Pg, PgValue};
+use crate::query_builder::{AstPass, QueryFragment};
+use crate::result::QueryResult;
+use crate::row::Row;
+use crate::serialize::{self, IsNull, Output, ToSql, WriteTuple};
+use crate::sql_types::{HasSqlType, Record};
 
 macro_rules! tuple_impls {
     ($(
@@ -173,10 +173,10 @@
 #[cfg(test)]
 mod tests {
     use super::*;
-    use dsl::sql;
-    use prelude::*;
-    use sql_types::*;
-    use test_helpers::*;
+    use crate::dsl::sql;
+    use crate::prelude::*;
+    use crate::sql_types::*;
+    use crate::test_helpers::*;
 
     #[test]
     fn record_deserializes_correctly() {
@@ -205,11 +205,11 @@
         let conn = pg_connection();
 
         let tup = sql::<Record<(Integer, Text)>>("(1, 'hi')");
-        let res = ::select(tup.eq((1, "hi"))).get_result(&conn);
+        let res = crate::select(tup.eq((1, "hi"))).get_result(&conn);
         assert_eq!(Ok(true), res);
 
         let tup = sql::<Record<(Record<(Integer, Text)>, Integer)>>("((2, 'bye'::text), 3)");
-        let res = ::select(tup.eq(((2, "bye"), 3))).get_result(&conn);
+        let res = crate::select(tup.eq(((2, "bye"), 3))).get_result(&conn);
         assert_eq!(Ok(true), res);
 
         let tup = sql::<
@@ -218,7 +218,7 @@
                 Nullable<Integer>,
             )>,
         >("((4, NULL::text), NULL::int4)");
-        let res = ::select(tup.is_not_distinct_from(((Some(4), None::<&str>), None::<i32>)))
+        let res = crate::select(tup.is_not_distinct_from(((Some(4), None::<&str>), None::<i32>)))
             .get_result(&conn);
         assert_eq!(Ok(true), res);
     }
@@ -241,11 +241,11 @@
 
         let conn = pg_connection();
 
-        ::sql_query("CREATE TYPE my_type AS (i int4, t text)")
+        crate::sql_query("CREATE TYPE my_type AS (i int4, t text)")
             .execute(&conn)
             .unwrap();
         let sql = sql::<Bool>("(1, 'hi')::my_type = ").bind::<MyType, _>(MyStruct(1, "hi"));
-        let res = ::select(sql).get_result(&conn);
+        let res = crate::select(sql).get_result(&conn);
         assert_eq!(Ok(true), res);
     }
 }
diff --git a/diesel/src/pg/types/uuid_v0_7.rs b/diesel/src/pg/types/uuid_v0_7.rs
index b8f00ba..d7de3f8 100644
--- a/diesel/src/pg/types/uuid_v0_7.rs
+++ b/diesel/src/pg/types/uuid_v0_7.rs
@@ -2,10 +2,10 @@
 
 use std::io::prelude::*;
 
-use deserialize::{self, FromSql};
-use pg::{Pg, PgValue};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types::Uuid;
+use crate::deserialize::{self, FromSql};
+use crate::pg::{Pg, PgValue};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types::Uuid;
 
 #[derive(FromSqlRow, AsExpression)]
 #[diesel(foreign_derive)]
diff --git a/diesel/src/pg/upsert/on_conflict_actions.rs b/diesel/src/pg/upsert/on_conflict_actions.rs
index bda42f6..41b2672 100644
--- a/diesel/src/pg/upsert/on_conflict_actions.rs
+++ b/diesel/src/pg/upsert/on_conflict_actions.rs
@@ -1,8 +1,8 @@
-use expression::{AppearsOnTable, Expression};
-use pg::Pg;
-use query_builder::*;
-use query_source::*;
-use result::QueryResult;
+use crate::expression::{AppearsOnTable, Expression};
+use crate::pg::Pg;
+use crate::query_builder::*;
+use crate::query_source::*;
+use crate::result::QueryResult;
 
 /// Represents `excluded.column` in an `ON CONFLICT DO UPDATE` clause.
 pub fn excluded<T>(excluded: T) -> Excluded<T> {
diff --git a/diesel/src/pg/upsert/on_conflict_clause.rs b/diesel/src/pg/upsert/on_conflict_clause.rs
index 6f0ea01..d1063ab 100644
--- a/diesel/src/pg/upsert/on_conflict_clause.rs
+++ b/diesel/src/pg/upsert/on_conflict_clause.rs
@@ -1,9 +1,9 @@
 use super::on_conflict_actions::*;
 use super::on_conflict_target::*;
-use insertable::*;
-use pg::Pg;
-use query_builder::*;
-use result::QueryResult;
+use crate::insertable::*;
+use crate::pg::Pg;
+use crate::query_builder::*;
+use crate::result::QueryResult;
 
 #[doc(hidden)]
 #[derive(Debug, Clone, Copy)]
diff --git a/diesel/src/pg/upsert/on_conflict_extension.rs b/diesel/src/pg/upsert/on_conflict_extension.rs
index a1b26b0..a23dfe7 100644
--- a/diesel/src/pg/upsert/on_conflict_extension.rs
+++ b/diesel/src/pg/upsert/on_conflict_extension.rs
@@ -1,8 +1,8 @@
 use super::on_conflict_actions::*;
 use super::on_conflict_clause::*;
 use super::on_conflict_target::*;
-use query_builder::{AsChangeset, InsertStatement, UndecoratedInsertRecord};
-use query_source::QuerySource;
+use crate::query_builder::{AsChangeset, InsertStatement, UndecoratedInsertRecord};
+use crate::query_source::QuerySource;
 
 impl<T, U, Op, Ret> InsertStatement<T, U, Op, Ret>
 where
@@ -20,7 +20,7 @@
     /// # include!("on_conflict_docs_setup.rs");
     /// #
     /// # fn main() {
-    /// #     use users::dsl::*;
+    /// #     use self::users::dsl::*;
     /// #     let conn = establish_connection();
     /// #     conn.execute("TRUNCATE TABLE users").unwrap();
     /// let user = User { id: 1, name: "Sean", };
@@ -46,7 +46,7 @@
     /// # include!("on_conflict_docs_setup.rs");
     /// #
     /// # fn main() {
-    /// #     use users::dsl::*;
+    /// #     use self::users::dsl::*;
     /// #     let conn = establish_connection();
     /// #     conn.execute("TRUNCATE TABLE users").unwrap();
     /// let user = User { id: 1, name: "Sean", };
@@ -82,7 +82,7 @@
     /// # include!("on_conflict_docs_setup.rs");
     /// #
     /// # fn main() {
-    /// #     use users::dsl::*;
+    /// #     use self::users::dsl::*;
     /// #     let conn = establish_connection();
     /// #     conn.execute("TRUNCATE TABLE users").unwrap();
     /// conn.execute("CREATE UNIQUE INDEX users_name ON users (name)").unwrap();
@@ -131,7 +131,7 @@
     /// # }
     /// #
     /// # fn main() {
-    /// #     use users::dsl::*;
+    /// #     use self::users::dsl::*;
     /// use diesel::pg::upsert::*;
     ///
     /// #     let conn = establish_connection();
@@ -221,7 +221,7 @@
     /// # include!("on_conflict_docs_setup.rs");
     /// #
     /// # fn main() {
-    /// #     use users::dsl::*;
+    /// #     use self::users::dsl::*;
     /// #     let conn = establish_connection();
     /// #     conn.execute("TRUNCATE TABLE users").unwrap();
     /// let user = User { id: 1, name: "Pascal" };
@@ -249,7 +249,7 @@
     /// # include!("on_conflict_docs_setup.rs");
     /// #
     /// # fn main() {
-    /// #     use users::dsl::*;
+    /// #     use self::users::dsl::*;
     /// #     let conn = establish_connection();
     /// #     conn.execute("TRUNCATE TABLE users").unwrap();
     /// let user = User { id: 1, name: "Pascal" };
@@ -277,7 +277,7 @@
     /// # include!("on_conflict_docs_setup.rs");
     /// #
     /// # fn main() {
-    /// #     use users::dsl::*;
+    /// #     use self::users::dsl::*;
     /// use diesel::pg::upsert::excluded;
     ///
     /// #     let conn = establish_connection();
diff --git a/diesel/src/pg/upsert/on_conflict_target.rs b/diesel/src/pg/upsert/on_conflict_target.rs
index 0881e35..832ffaf 100644
--- a/diesel/src/pg/upsert/on_conflict_target.rs
+++ b/diesel/src/pg/upsert/on_conflict_target.rs
@@ -1,8 +1,8 @@
-use expression::SqlLiteral;
-use pg::Pg;
-use query_builder::*;
-use query_source::Column;
-use result::QueryResult;
+use crate::expression::SqlLiteral;
+use crate::pg::Pg;
+use crate::query_builder::*;
+use crate::query_source::Column;
+use crate::result::QueryResult;
 
 /// Used to specify the constraint name for an upsert statement in the form `ON
 /// CONFLICT ON CONSTRAINT`. Note that `constraint_name` must be the name of a
@@ -15,7 +15,7 @@
 /// # include!("on_conflict_docs_setup.rs");
 /// #
 /// # fn main() {
-/// #     use users::dsl::*;
+/// #     use self::users::dsl::*;
 /// use diesel::pg::upsert::*;
 ///
 /// #     let conn = establish_connection();
diff --git a/diesel/src/pg/value.rs b/diesel/src/pg/value.rs
index 16cba56..24ae07c 100644
--- a/diesel/src/pg/value.rs
+++ b/diesel/src/pg/value.rs
@@ -1,5 +1,5 @@
 use super::Pg;
-use backend::BinaryRawValue;
+use crate::backend::BinaryRawValue;
 use std::num::NonZeroU32;
 use std::ops::Range;
 
diff --git a/diesel/src/query_builder/ast_pass.rs b/diesel/src/query_builder/ast_pass.rs
index 9a1ad91..4ecdf8f 100644
--- a/diesel/src/query_builder/ast_pass.rs
+++ b/diesel/src/query_builder/ast_pass.rs
@@ -1,10 +1,10 @@
 use std::{fmt, mem};
 
-use backend::Backend;
-use query_builder::{BindCollector, QueryBuilder};
-use result::QueryResult;
-use serialize::ToSql;
-use sql_types::HasSqlType;
+use crate::backend::Backend;
+use crate::query_builder::{BindCollector, QueryBuilder};
+use crate::result::QueryResult;
+use crate::serialize::ToSql;
+use crate::sql_types::HasSqlType;
 
 #[allow(missing_debug_implementations)]
 /// The primary type used when walking a Diesel AST during query execution.
diff --git a/diesel/src/query_builder/bind_collector.rs b/diesel/src/query_builder/bind_collector.rs
index da032e0..0e34906 100644
--- a/diesel/src/query_builder/bind_collector.rs
+++ b/diesel/src/query_builder/bind_collector.rs
@@ -1,10 +1,10 @@
 //! Types related to managing bind parameters during query construction.
 
-use backend::Backend;
-use result::Error::SerializationError;
-use result::QueryResult;
-use serialize::{IsNull, Output, ToSql};
-use sql_types::{HasSqlType, TypeMetadata};
+use crate::backend::Backend;
+use crate::result::Error::SerializationError;
+use crate::result::QueryResult;
+use crate::serialize::{IsNull, Output, ToSql};
+use crate::sql_types::{HasSqlType, TypeMetadata};
 
 /// A type which manages serializing bind parameters during query construction.
 ///
diff --git a/diesel/src/query_builder/clause_macro.rs b/diesel/src/query_builder/clause_macro.rs
index a7ec57e..2217382 100644
--- a/diesel/src/query_builder/clause_macro.rs
+++ b/diesel/src/query_builder/clause_macro.rs
@@ -4,8 +4,8 @@
     };
 
     ($no_clause:ident, $clause:ident, $sql:expr, backend_bounds = $($backend_bounds:ident),*) => {
-        use backend::Backend;
-        use result::QueryResult;
+        use crate::backend::Backend;
+        use crate::result::QueryResult;
         use super::{QueryFragment, AstPass};
 
         #[derive(Debug, Clone, Copy, QueryId)]
diff --git a/diesel/src/query_builder/debug_query.rs b/diesel/src/query_builder/debug_query.rs
index b3a7836..2b0524f 100644
--- a/diesel/src/query_builder/debug_query.rs
+++ b/diesel/src/query_builder/debug_query.rs
@@ -3,7 +3,7 @@
 use std::mem;
 
 use super::{AstPass, QueryBuilder, QueryFragment};
-use backend::Backend;
+use crate::backend::Backend;
 
 /// A struct that implements `fmt::Display` and `fmt::Debug` to show the SQL
 /// representation of a query.
diff --git a/diesel/src/query_builder/delete_statement/mod.rs b/diesel/src/query_builder/delete_statement/mod.rs
index 4d98c56..2f5b1ed 100644
--- a/diesel/src/query_builder/delete_statement/mod.rs
+++ b/diesel/src/query_builder/delete_statement/mod.rs
@@ -1,13 +1,13 @@
-use backend::Backend;
-use dsl::{Filter, IntoBoxed};
-use expression::{AppearsOnTable, SelectableExpression};
-use query_builder::returning_clause::*;
-use query_builder::where_clause::*;
-use query_builder::*;
-use query_dsl::methods::{BoxedDsl, FilterDsl};
-use query_dsl::RunQueryDsl;
-use query_source::Table;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::dsl::{Filter, IntoBoxed};
+use crate::expression::{AppearsOnTable, SelectableExpression};
+use crate::query_builder::returning_clause::*;
+use crate::query_builder::where_clause::*;
+use crate::query_builder::*;
+use crate::query_dsl::methods::{BoxedDsl, FilterDsl};
+use crate::query_dsl::RunQueryDsl;
+use crate::query_source::Table;
+use crate::result::QueryResult;
 
 #[derive(Debug, Clone, Copy, QueryId)]
 #[must_use = "Queries are only executed when calling `load`, `get_result` or similar."]
diff --git a/diesel/src/query_builder/distinct_clause.rs b/diesel/src/query_builder/distinct_clause.rs
index 6aabf0e..715d41b 100644
--- a/diesel/src/query_builder/distinct_clause.rs
+++ b/diesel/src/query_builder/distinct_clause.rs
@@ -1,6 +1,6 @@
-use backend::Backend;
-use query_builder::*;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::query_builder::*;
+use crate::result::QueryResult;
 
 #[derive(Debug, Clone, Copy, QueryId)]
 pub struct NoDistinctClause;
@@ -21,4 +21,4 @@
 }
 
 #[cfg(feature = "postgres")]
-pub use pg::DistinctOnClause;
+pub use crate::pg::DistinctOnClause;
diff --git a/diesel/src/query_builder/functions.rs b/diesel/src/query_builder/functions.rs
index 4dce72b..5e56187 100644
--- a/diesel/src/query_builder/functions.rs
+++ b/diesel/src/query_builder/functions.rs
@@ -3,9 +3,9 @@
 use super::{
     IncompleteInsertStatement, IntoUpdateTarget, SelectStatement, SqlQuery, UpdateStatement,
 };
-use dsl::Select;
-use expression::Expression;
-use query_dsl::methods::SelectDsl;
+use crate::dsl::Select;
+use crate::expression::Expression;
+use crate::query_dsl::methods::SelectDsl;
 
 /// Creates an `UPDATE` statement.
 ///
@@ -59,7 +59,7 @@
 /// #
 /// # #[cfg(feature = "postgres")]
 /// # fn main() {
-/// # use users::dsl::*;
+/// # use self::users::dsl::*;
 /// # let connection = establish_connection();
 /// # connection.execute("DROP TABLE users").unwrap();
 /// # connection.execute("CREATE TABLE users (
diff --git a/diesel/src/query_builder/insert_statement/column_list.rs b/diesel/src/query_builder/insert_statement/column_list.rs
index d25f419..322b8cb 100644
--- a/diesel/src/query_builder/insert_statement/column_list.rs
+++ b/diesel/src/query_builder/insert_statement/column_list.rs
@@ -1,7 +1,7 @@
-use backend::Backend;
-use query_builder::*;
-use query_source::Column;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::query_builder::*;
+use crate::query_source::Column;
+use crate::result::QueryResult;
 
 /// Represents the column list for use in an insert statement.
 ///
diff --git a/diesel/src/query_builder/insert_statement/insert_from_select.rs b/diesel/src/query_builder/insert_statement/insert_from_select.rs
index e3db2fd..e609dab 100644
--- a/diesel/src/query_builder/insert_statement/insert_from_select.rs
+++ b/diesel/src/query_builder/insert_statement/insert_from_select.rs
@@ -1,8 +1,8 @@
-use backend::Backend;
-use expression::{Expression, NonAggregate, SelectableExpression};
-use insertable::*;
-use query_builder::*;
-use query_source::Table;
+use crate::backend::Backend;
+use crate::expression::{Expression, NonAggregate, SelectableExpression};
+use crate::insertable::*;
+use crate::query_builder::*;
+use crate::query_source::Table;
 
 /// Represents `(Columns) SELECT FROM ...` for use in an `INSERT` statement
 #[derive(Debug, Clone, Copy)]
diff --git a/diesel/src/query_builder/insert_statement/mod.rs b/diesel/src/query_builder/insert_statement/mod.rs
index 04475f8..243a9c2 100644
--- a/diesel/src/query_builder/insert_statement/mod.rs
+++ b/diesel/src/query_builder/insert_statement/mod.rs
@@ -8,20 +8,20 @@
 use std::marker::PhantomData;
 
 use super::returning_clause::*;
-use backend::Backend;
-use expression::operators::Eq;
-use expression::{Expression, NonAggregate, SelectableExpression};
-use insertable::*;
+use crate::backend::Backend;
+use crate::expression::operators::Eq;
+use crate::expression::{Expression, NonAggregate, SelectableExpression};
+use crate::insertable::*;
 #[cfg(feature = "mysql")]
-use mysql::Mysql;
-use query_builder::*;
+use crate::mysql::Mysql;
+use crate::query_builder::*;
 #[cfg(feature = "sqlite")]
-use query_dsl::methods::ExecuteDsl;
-use query_dsl::RunQueryDsl;
-use query_source::{Column, Table};
-use result::QueryResult;
+use crate::query_dsl::methods::ExecuteDsl;
+use crate::query_dsl::RunQueryDsl;
+use crate::query_source::{Column, Table};
+use crate::result::QueryResult;
 #[cfg(feature = "sqlite")]
-use sqlite::{Sqlite, SqliteConnection};
+use crate::sqlite::{Sqlite, SqliteConnection};
 
 /// The structure returned by [`insert_into`].
 ///
@@ -62,7 +62,7 @@
     /// #
     /// # fn run_test() -> QueryResult<()> {
     /// #     use diesel::insert_into;
-    /// #     use users::dsl::*;
+    /// #     use self::users::dsl::*;
     /// #     let connection = connection_no_data();
     /// connection.execute("CREATE TABLE users (
     ///     name VARCHAR(255) NOT NULL DEFAULT 'Sean',
@@ -210,7 +210,7 @@
     Op: Copy,
 {
     fn execute(query: Self, conn: &SqliteConnection) -> QueryResult<usize> {
-        use connection::Connection;
+        use crate::connection::Connection;
         conn.transaction(|| {
             let mut result = 0;
             for record in query.records.records {
@@ -236,7 +236,7 @@
     Op: Copy,
 {
     fn execute(query: Self, conn: &SqliteConnection) -> QueryResult<usize> {
-        use connection::Connection;
+        use crate::connection::Connection;
         conn.transaction(|| {
             let mut result = 0;
             for value in query.records.values {
@@ -430,7 +430,7 @@
     #[cfg(feature = "mysql")]
     fn walk_ast(&self, mut out: AstPass<DB>) -> QueryResult<()> {
         // This can be less hacky once stabilization lands
-        if TypeId::of::<DB>() == TypeId::of::<::mysql::Mysql>() {
+        if TypeId::of::<DB>() == TypeId::of::<crate::mysql::Mysql>() {
             out.push_sql("() VALUES ()");
         } else {
             out.push_sql("DEFAULT VALUES");
diff --git a/diesel/src/query_builder/locking_clause.rs b/diesel/src/query_builder/locking_clause.rs
index 99afdfe..4467984 100644
--- a/diesel/src/query_builder/locking_clause.rs
+++ b/diesel/src/query_builder/locking_clause.rs
@@ -1,6 +1,6 @@
-use backend::Backend;
-use query_builder::{AstPass, QueryFragment};
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::query_builder::{AstPass, QueryFragment};
+use crate::result::QueryResult;
 
 #[derive(Debug, Clone, Copy, QueryId)]
 pub struct NoLockingClause;
diff --git a/diesel/src/query_builder/mod.rs b/diesel/src/query_builder/mod.rs
index ba30305..cc64a56 100644
--- a/diesel/src/query_builder/mod.rs
+++ b/diesel/src/query_builder/mod.rs
@@ -52,8 +52,8 @@
 
 use std::error::Error;
 
-use backend::Backend;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::result::QueryResult;
 
 #[doc(hidden)]
 pub type Binds = Vec<Option<Vec<u8>>>;
diff --git a/diesel/src/query_builder/nodes/mod.rs b/diesel/src/query_builder/nodes/mod.rs
index 09c0215..7a17870 100644
--- a/diesel/src/query_builder/nodes/mod.rs
+++ b/diesel/src/query_builder/nodes/mod.rs
@@ -1,6 +1,6 @@
-use backend::Backend;
-use query_builder::*;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::query_builder::*;
+use crate::result::QueryResult;
 
 #[derive(Debug, Copy, Clone)]
 pub struct Identifier<'a>(pub &'a str);
diff --git a/diesel/src/query_builder/query_id.rs b/diesel/src/query_builder/query_id.rs
index f2cb3e4..b2aebf4 100644
--- a/diesel/src/query_builder/query_id.rs
+++ b/diesel/src/query_builder/query_id.rs
@@ -118,7 +118,7 @@
     use std::any::TypeId;
 
     use super::QueryId;
-    use prelude::*;
+    use crate::prelude::*;
 
     table! {
         users {
diff --git a/diesel/src/query_builder/returning_clause.rs b/diesel/src/query_builder/returning_clause.rs
index 66db1fc..a76d3d4 100644
--- a/diesel/src/query_builder/returning_clause.rs
+++ b/diesel/src/query_builder/returning_clause.rs
@@ -1,4 +1,4 @@
-use backend::SupportsReturningClause;
+use crate::backend::SupportsReturningClause;
 
 simple_clause!(
     NoReturningClause,
diff --git a/diesel/src/query_builder/select_clause.rs b/diesel/src/query_builder/select_clause.rs
index 08a714e..61f0843 100644
--- a/diesel/src/query_builder/select_clause.rs
+++ b/diesel/src/query_builder/select_clause.rs
@@ -1,7 +1,7 @@
-use backend::Backend;
-use expression::{Expression, SelectableExpression};
-use query_builder::*;
-use query_source::QuerySource;
+use crate::backend::Backend;
+use crate::expression::{Expression, SelectableExpression};
+use crate::query_builder::*;
+use crate::query_source::QuerySource;
 
 #[derive(Debug, Clone, Copy, QueryId)]
 pub struct DefaultSelectClause;
diff --git a/diesel/src/query_builder/select_statement/boxed.rs b/diesel/src/query_builder/select_statement/boxed.rs
index 58cd5bd..0c0eb84 100644
--- a/diesel/src/query_builder/select_statement/boxed.rs
+++ b/diesel/src/query_builder/select_statement/boxed.rs
@@ -1,24 +1,24 @@
 use std::marker::PhantomData;
 
-use backend::Backend;
-use dsl::AsExprOf;
-use expression::subselect::ValidSubselect;
-use expression::*;
-use insertable::Insertable;
-use query_builder::distinct_clause::DistinctClause;
-use query_builder::group_by_clause::GroupByClause;
-use query_builder::insert_statement::InsertFromSelect;
-use query_builder::limit_clause::LimitClause;
-use query_builder::offset_clause::OffsetClause;
-use query_builder::order_clause::OrderClause;
-use query_builder::where_clause::*;
-use query_builder::*;
-use query_dsl::methods::*;
-use query_dsl::*;
-use query_source::joins::*;
-use query_source::{QuerySource, Table};
-use result::QueryResult;
-use sql_types::{BigInt, Bool, NotNull, Nullable};
+use crate::backend::Backend;
+use crate::dsl::AsExprOf;
+use crate::expression::subselect::ValidSubselect;
+use crate::expression::*;
+use crate::insertable::Insertable;
+use crate::query_builder::distinct_clause::DistinctClause;
+use crate::query_builder::group_by_clause::GroupByClause;
+use crate::query_builder::insert_statement::InsertFromSelect;
+use crate::query_builder::limit_clause::LimitClause;
+use crate::query_builder::offset_clause::OffsetClause;
+use crate::query_builder::order_clause::OrderClause;
+use crate::query_builder::where_clause::*;
+use crate::query_builder::*;
+use crate::query_dsl::methods::*;
+use crate::query_dsl::*;
+use crate::query_source::joins::*;
+use crate::query_source::{QuerySource, Table};
+use crate::result::QueryResult;
+use crate::sql_types::{BigInt, Bool, NotNull, Nullable};
 
 #[allow(missing_debug_implementations)]
 pub struct BoxedSelectStatement<'a, ST, QS, DB> {
diff --git a/diesel/src/query_builder/select_statement/dsl_impls.rs b/diesel/src/query_builder/select_statement/dsl_impls.rs
index 2c14ea0..ff2e1b4 100644
--- a/diesel/src/query_builder/select_statement/dsl_impls.rs
+++ b/diesel/src/query_builder/select_statement/dsl_impls.rs
@@ -1,27 +1,27 @@
 use super::BoxedSelectStatement;
-use associations::HasTable;
-use backend::Backend;
-use dsl::AsExprOf;
-use expression::nullable::Nullable;
-use expression::*;
-use insertable::Insertable;
-use query_builder::distinct_clause::*;
-use query_builder::group_by_clause::*;
-use query_builder::insert_statement::InsertFromSelect;
-use query_builder::limit_clause::*;
-use query_builder::locking_clause::*;
-use query_builder::offset_clause::*;
-use query_builder::order_clause::*;
-use query_builder::select_clause::*;
-use query_builder::update_statement::*;
-use query_builder::where_clause::*;
-use query_builder::{AsQuery, Query, QueryFragment, SelectQuery, SelectStatement};
-use query_dsl::boxed_dsl::BoxedDsl;
-use query_dsl::methods::*;
-use query_dsl::*;
-use query_source::joins::{Join, JoinOn, JoinTo};
-use query_source::QuerySource;
-use sql_types::{BigInt, Bool};
+use crate::associations::HasTable;
+use crate::backend::Backend;
+use crate::dsl::AsExprOf;
+use crate::expression::nullable::Nullable;
+use crate::expression::*;
+use crate::insertable::Insertable;
+use crate::query_builder::distinct_clause::*;
+use crate::query_builder::group_by_clause::*;
+use crate::query_builder::insert_statement::InsertFromSelect;
+use crate::query_builder::limit_clause::*;
+use crate::query_builder::locking_clause::*;
+use crate::query_builder::offset_clause::*;
+use crate::query_builder::order_clause::*;
+use crate::query_builder::select_clause::*;
+use crate::query_builder::update_statement::*;
+use crate::query_builder::where_clause::*;
+use crate::query_builder::{AsQuery, Query, QueryFragment, SelectQuery, SelectStatement};
+use crate::query_dsl::boxed_dsl::BoxedDsl;
+use crate::query_dsl::methods::*;
+use crate::query_dsl::*;
+use crate::query_source::joins::{Join, JoinOn, JoinTo};
+use crate::query_source::QuerySource;
+use crate::sql_types::{BigInt, Bool};
 
 impl<F, S, D, W, O, L, Of, G, LC, Rhs, Kind, On> InternalJoinDsl<Rhs, Kind, On>
     for SelectStatement<F, S, D, W, O, L, Of, G, LC>
@@ -136,9 +136,9 @@
     }
 }
 
-use dsl::Filter;
-use expression_methods::EqAll;
-use query_source::Table;
+use crate::dsl::Filter;
+use crate::expression_methods::EqAll;
+use crate::query_source::Table;
 
 impl<F, S, D, W, O, L, Of, G, LC, PK> FindDsl<PK> for SelectStatement<F, S, D, W, O, L, Of, G, LC>
 where
@@ -207,7 +207,7 @@
     Expr: Expression,
     Self: OrderDsl<Expr>,
 {
-    type Output = ::dsl::Order<Self, Expr>;
+    type Output = crate::dsl::Order<Self, Expr>;
 
     fn then_order_by(self, expr: Expr) -> Self::Output {
         self.order_by(expr)
diff --git a/diesel/src/query_builder/select_statement/mod.rs b/diesel/src/query_builder/select_statement/mod.rs
index 7982c11..c4944a1 100644
--- a/diesel/src/query_builder/select_statement/mod.rs
+++ b/diesel/src/query_builder/select_statement/mod.rs
@@ -25,13 +25,13 @@
 use super::select_clause::*;
 use super::where_clause::*;
 use super::{AstPass, Query, QueryFragment};
-use backend::Backend;
-use expression::subselect::ValidSubselect;
-use expression::*;
-use query_builder::SelectQuery;
-use query_source::joins::{AppendSelection, Inner, Join};
-use query_source::*;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::expression::subselect::ValidSubselect;
+use crate::expression::*;
+use crate::query_builder::SelectQuery;
+use crate::query_source::joins::{AppendSelection, Inner, Join};
+use crate::query_source::*;
+use crate::result::QueryResult;
 
 #[derive(Debug, Clone, Copy, QueryId)]
 #[doc(hidden)]
diff --git a/diesel/src/query_builder/sql_query.rs b/diesel/src/query_builder/sql_query.rs
index 4d91425..316c9f4 100644
--- a/diesel/src/query_builder/sql_query.rs
+++ b/diesel/src/query_builder/sql_query.rs
@@ -1,13 +1,13 @@
 use std::marker::PhantomData;
 
-use backend::Backend;
-use connection::Connection;
-use deserialize::QueryableByName;
-use query_builder::{AstPass, QueryFragment, QueryId};
-use query_dsl::{LoadQuery, RunQueryDsl};
-use result::QueryResult;
-use serialize::ToSql;
-use sql_types::HasSqlType;
+use crate::backend::Backend;
+use crate::connection::Connection;
+use crate::deserialize::QueryableByName;
+use crate::query_builder::{AstPass, QueryFragment, QueryId};
+use crate::query_dsl::{LoadQuery, RunQueryDsl};
+use crate::result::QueryResult;
+use crate::serialize::ToSql;
+use crate::sql_types::HasSqlType;
 
 #[derive(Debug, Clone)]
 #[must_use = "Queries are only executed when calling `load`, `get_result` or similar."]
diff --git a/diesel/src/query_builder/update_statement/changeset.rs b/diesel/src/query_builder/update_statement/changeset.rs
index 1838f45..2db594d 100644
--- a/diesel/src/query_builder/update_statement/changeset.rs
+++ b/diesel/src/query_builder/update_statement/changeset.rs
@@ -1,9 +1,9 @@
-use backend::Backend;
-use expression::operators::Eq;
-use expression::AppearsOnTable;
-use query_builder::*;
-use query_source::{Column, QuerySource};
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::expression::operators::Eq;
+use crate::expression::AppearsOnTable;
+use crate::query_builder::*;
+use crate::query_source::{Column, QuerySource};
+use crate::result::QueryResult;
 
 /// Types which can be passed to
 /// [`update.set`](struct.UpdateStatement.html#method.set).
diff --git a/diesel/src/query_builder/update_statement/mod.rs b/diesel/src/query_builder/update_statement/mod.rs
index 53ec787..8e00427 100644
--- a/diesel/src/query_builder/update_statement/mod.rs
+++ b/diesel/src/query_builder/update_statement/mod.rs
@@ -4,17 +4,17 @@
 pub use self::changeset::AsChangeset;
 pub use self::target::{IntoUpdateTarget, UpdateTarget};
 
-use backend::Backend;
-use dsl::{Filter, IntoBoxed};
-use expression::{AppearsOnTable, Expression, NonAggregate, SelectableExpression};
-use query_builder::returning_clause::*;
-use query_builder::where_clause::*;
-use query_builder::*;
-use query_dsl::methods::{BoxedDsl, FilterDsl};
-use query_dsl::RunQueryDsl;
-use query_source::Table;
-use result::Error::QueryBuilderError;
-use result::QueryResult;
+use crate::backend::Backend;
+use crate::dsl::{Filter, IntoBoxed};
+use crate::expression::{AppearsOnTable, Expression, NonAggregate, SelectableExpression};
+use crate::query_builder::returning_clause::*;
+use crate::query_builder::where_clause::*;
+use crate::query_builder::*;
+use crate::query_dsl::methods::{BoxedDsl, FilterDsl};
+use crate::query_dsl::RunQueryDsl;
+use crate::query_source::Table;
+use crate::result::Error::QueryBuilderError;
+use crate::result::QueryResult;
 
 impl<T, U> UpdateStatement<T, U, SetNotCalled> {
     pub(crate) fn new(target: UpdateTarget<T, U>) -> Self {
diff --git a/diesel/src/query_builder/update_statement/target.rs b/diesel/src/query_builder/update_statement/target.rs
index a9cd0aba..a761325 100644
--- a/diesel/src/query_builder/update_statement/target.rs
+++ b/diesel/src/query_builder/update_statement/target.rs
@@ -1,7 +1,7 @@
-use associations::{HasTable, Identifiable};
-use dsl::Find;
-use query_dsl::methods::FindDsl;
-use query_source::Table;
+use crate::associations::{HasTable, Identifiable};
+use crate::dsl::Find;
+use crate::query_dsl::methods::FindDsl;
+use crate::query_source::Table;
 
 #[doc(hidden)]
 #[derive(Debug)]
diff --git a/diesel/src/query_builder/where_clause.rs b/diesel/src/query_builder/where_clause.rs
index 0f89c90..e8ca3e6 100644
--- a/diesel/src/query_builder/where_clause.rs
+++ b/diesel/src/query_builder/where_clause.rs
@@ -1,11 +1,11 @@
 use super::*;
-use backend::Backend;
-use dsl::Or;
-use expression::operators::And;
-use expression::*;
-use expression_methods::*;
-use result::QueryResult;
-use sql_types::Bool;
+use crate::backend::Backend;
+use crate::dsl::Or;
+use crate::expression::operators::And;
+use crate::expression::*;
+use crate::expression_methods::*;
+use crate::result::QueryResult;
+use crate::sql_types::Bool;
 
 /// Add `Predicate` to the current `WHERE` clause, joining with `AND` if
 /// applicable.
@@ -176,8 +176,8 @@
 
     fn or(self, predicate: Predicate) -> Self::Output {
         use self::BoxedWhereClause::Where;
-        use expression::grouped::Grouped;
-        use expression::operators::Or;
+        use crate::expression::grouped::Grouped;
+        use crate::expression::operators::Or;
 
         match self {
             Where(where_clause) => Where(Box::new(Grouped(Or::new(where_clause, predicate)))),
diff --git a/diesel/src/query_dsl/belonging_to_dsl.rs b/diesel/src/query_dsl/belonging_to_dsl.rs
index a64ef2b..f4c620a 100644
--- a/diesel/src/query_dsl/belonging_to_dsl.rs
+++ b/diesel/src/query_dsl/belonging_to_dsl.rs
@@ -28,8 +28,8 @@
 /// #
 /// # fn run_test() -> QueryResult<()> {
 /// #     let connection = establish_connection();
-/// #     use users::dsl::*;
-/// #     use posts::dsl::{posts, title};
+/// #     use self::users::dsl::*;
+/// #     use self::posts::dsl::{posts, title};
 /// let sean = users.filter(name.eq("Sean")).first::<User>(&connection)?;
 /// let tess = users.filter(name.eq("Tess")).first::<User>(&connection)?;
 ///
diff --git a/diesel/src/query_dsl/boxed_dsl.rs b/diesel/src/query_dsl/boxed_dsl.rs
index 4c15ff0..10d18e9 100644
--- a/diesel/src/query_dsl/boxed_dsl.rs
+++ b/diesel/src/query_dsl/boxed_dsl.rs
@@ -1,5 +1,5 @@
-use query_builder::AsQuery;
-use query_source::Table;
+use crate::query_builder::AsQuery;
+use crate::query_source::Table;
 
 /// The `into_boxed` method
 ///
diff --git a/diesel/src/query_dsl/distinct_dsl.rs b/diesel/src/query_dsl/distinct_dsl.rs
index 0ca091b..cf82aad 100644
--- a/diesel/src/query_dsl/distinct_dsl.rs
+++ b/diesel/src/query_dsl/distinct_dsl.rs
@@ -1,6 +1,6 @@
 #[cfg(feature = "postgres")]
-use expression::SelectableExpression;
-use query_source::Table;
+use crate::expression::SelectableExpression;
+use crate::query_source::Table;
 
 /// The `distinct` method
 ///
diff --git a/diesel/src/query_dsl/filter_dsl.rs b/diesel/src/query_dsl/filter_dsl.rs
index e5e3cab..9247b6a 100644
--- a/diesel/src/query_dsl/filter_dsl.rs
+++ b/diesel/src/query_dsl/filter_dsl.rs
@@ -1,6 +1,6 @@
-use dsl::{Filter, OrFilter};
-use expression_methods::*;
-use query_source::*;
+use crate::dsl::{Filter, OrFilter};
+use crate::expression_methods::*;
+use crate::query_source::*;
 
 /// The `filter` method
 ///
diff --git a/diesel/src/query_dsl/group_by_dsl.rs b/diesel/src/query_dsl/group_by_dsl.rs
index 00826d0..1204288 100644
--- a/diesel/src/query_dsl/group_by_dsl.rs
+++ b/diesel/src/query_dsl/group_by_dsl.rs
@@ -1,6 +1,6 @@
-use expression::Expression;
-use query_builder::{AsQuery, Query};
-use query_source::Table;
+use crate::expression::Expression;
+use crate::query_builder::{AsQuery, Query};
+use crate::query_source::Table;
 
 /// This trait is not yet part of Diesel's public API. It may change in the
 /// future without a major version bump.
diff --git a/diesel/src/query_dsl/join_dsl.rs b/diesel/src/query_dsl/join_dsl.rs
index 5032852..025878b 100644
--- a/diesel/src/query_dsl/join_dsl.rs
+++ b/diesel/src/query_dsl/join_dsl.rs
@@ -1,6 +1,6 @@
-use query_builder::AsQuery;
-use query_source::joins::OnClauseWrapper;
-use query_source::{JoinTo, QuerySource, Table};
+use crate::query_builder::AsQuery;
+use crate::query_source::joins::OnClauseWrapper;
+use crate::query_source::{JoinTo, QuerySource, Table};
 
 #[doc(hidden)]
 /// `JoinDsl` support trait to emulate associated type constructors
diff --git a/diesel/src/query_dsl/limit_dsl.rs b/diesel/src/query_dsl/limit_dsl.rs
index 81876e2..b9f94df 100644
--- a/diesel/src/query_dsl/limit_dsl.rs
+++ b/diesel/src/query_dsl/limit_dsl.rs
@@ -1,4 +1,4 @@
-use query_source::Table;
+use crate::query_source::Table;
 
 /// The `limit` method
 ///
diff --git a/diesel/src/query_dsl/load_dsl.rs b/diesel/src/query_dsl/load_dsl.rs
index c6bb4e1..4d74bae 100644
--- a/diesel/src/query_dsl/load_dsl.rs
+++ b/diesel/src/query_dsl/load_dsl.rs
@@ -1,10 +1,10 @@
 use super::RunQueryDsl;
-use backend::Backend;
-use connection::Connection;
-use deserialize::Queryable;
-use query_builder::{AsQuery, QueryFragment, QueryId};
-use result::QueryResult;
-use sql_types::HasSqlType;
+use crate::backend::Backend;
+use crate::connection::Connection;
+use crate::deserialize::Queryable;
+use crate::query_builder::{AsQuery, QueryFragment, QueryId};
+use crate::result::QueryResult;
+use crate::sql_types::HasSqlType;
 
 /// The `load` method
 ///
diff --git a/diesel/src/query_dsl/locking_dsl.rs b/diesel/src/query_dsl/locking_dsl.rs
index c401fd5..1c56d8f 100644
--- a/diesel/src/query_dsl/locking_dsl.rs
+++ b/diesel/src/query_dsl/locking_dsl.rs
@@ -1,5 +1,5 @@
-use query_builder::AsQuery;
-use query_source::Table;
+use crate::query_builder::AsQuery;
+use crate::query_source::Table;
 
 /// Methods related to locking select statements
 ///
diff --git a/diesel/src/query_dsl/mod.rs b/diesel/src/query_dsl/mod.rs
index 584cb29..17b74ae 100644
--- a/diesel/src/query_dsl/mod.rs
+++ b/diesel/src/query_dsl/mod.rs
@@ -13,14 +13,14 @@
 //! [`QueryDsl`]: trait.QueryDsl.html
 //! [`RunQueryDsl`]: trait.RunQueryDsl.html
 
-use backend::Backend;
-use connection::Connection;
-use expression::count::CountStar;
-use expression::Expression;
-use helper_types::*;
-use query_builder::locking_clause as lock;
-use query_source::{joins, Table};
-use result::{first_or_not_found, QueryResult};
+use crate::backend::Backend;
+use crate::connection::Connection;
+use crate::expression::count::CountStar;
+use crate::expression::Expression;
+use crate::helper_types::*;
+use crate::query_builder::locking_clause as lock;
+use crate::query_source::{joins, Table};
+use crate::result::{first_or_not_found, QueryResult};
 
 mod belonging_to_dsl;
 #[doc(hidden)]
@@ -310,7 +310,7 @@
     where
         Self: methods::SelectDsl<CountStar>,
     {
-        use dsl::count_star;
+        use crate::dsl::count_star;
 
         QueryDsl::select(self, count_star())
     }
@@ -698,7 +698,7 @@
     /// # }
     /// #
     /// # fn run_test() -> QueryResult<()> {
-    /// #     use users::dsl::*;
+    /// #     use self::users::dsl::*;
     /// #     let connection = establish_connection();
     /// #     diesel::delete(users).execute(&connection)?;
     /// #     diesel::insert_into(users)
@@ -748,7 +748,7 @@
     /// # }
     /// #
     /// # fn run_test() -> QueryResult<()> {
-    /// #     use users::dsl::*;
+    /// #     use self::users::dsl::*;
     /// #     let connection = establish_connection();
     /// #     diesel::delete(users).execute(&connection)?;
     /// #     diesel::insert_into(users)
diff --git a/diesel/src/query_dsl/offset_dsl.rs b/diesel/src/query_dsl/offset_dsl.rs
index 4998be8..05f0636 100644
--- a/diesel/src/query_dsl/offset_dsl.rs
+++ b/diesel/src/query_dsl/offset_dsl.rs
@@ -1,4 +1,4 @@
-use query_source::Table;
+use crate::query_source::Table;
 
 /// The `offset` method
 ///
diff --git a/diesel/src/query_dsl/order_dsl.rs b/diesel/src/query_dsl/order_dsl.rs
index 439a859..116e69c 100644
--- a/diesel/src/query_dsl/order_dsl.rs
+++ b/diesel/src/query_dsl/order_dsl.rs
@@ -1,5 +1,5 @@
-use expression::Expression;
-use query_source::Table;
+use crate::expression::Expression;
+use crate::query_source::Table;
 
 /// The `order` method
 ///
diff --git a/diesel/src/query_dsl/save_changes_dsl.rs b/diesel/src/query_dsl/save_changes_dsl.rs
index 4e32480..1695fc6 100644
--- a/diesel/src/query_dsl/save_changes_dsl.rs
+++ b/diesel/src/query_dsl/save_changes_dsl.rs
@@ -1,17 +1,17 @@
-use associations::HasTable;
+use crate::associations::HasTable;
 #[cfg(any(feature = "sqlite", feature = "mysql"))]
-use associations::Identifiable;
-use connection::Connection;
+use crate::associations::Identifiable;
+use crate::connection::Connection;
 #[cfg(any(feature = "sqlite", feature = "mysql"))]
-use dsl::Find;
+use crate::dsl::Find;
 #[cfg(any(feature = "sqlite", feature = "postgres", feature = "mysql"))]
-use dsl::Update;
-use query_builder::{AsChangeset, IntoUpdateTarget};
+use crate::dsl::Update;
+use crate::query_builder::{AsChangeset, IntoUpdateTarget};
 #[cfg(any(feature = "sqlite", feature = "mysql"))]
-use query_dsl::methods::{ExecuteDsl, FindDsl};
+use crate::query_dsl::methods::{ExecuteDsl, FindDsl};
 #[cfg(any(feature = "sqlite", feature = "postgres", feature = "mysql"))]
-use query_dsl::{LoadQuery, RunQueryDsl};
-use result::QueryResult;
+use crate::query_dsl::{LoadQuery, RunQueryDsl};
+use crate::result::QueryResult;
 
 /// A trait defining how to update a record and fetch the updated entry
 /// on a certain backend.
@@ -29,7 +29,7 @@
 }
 
 #[cfg(feature = "postgres")]
-use pg::PgConnection;
+use crate::pg::PgConnection;
 
 #[cfg(feature = "postgres")]
 impl<Changes, Output> UpdateAndFetchResults<Changes, Output> for PgConnection
@@ -38,12 +38,12 @@
     Update<Changes, Changes>: LoadQuery<PgConnection, Output>,
 {
     fn update_and_fetch(&self, changeset: Changes) -> QueryResult<Output> {
-        ::update(changeset).set(changeset).get_result(self)
+        crate::update(changeset).set(changeset).get_result(self)
     }
 }
 
 #[cfg(feature = "sqlite")]
-use sqlite::SqliteConnection;
+use crate::sqlite::SqliteConnection;
 
 #[cfg(feature = "sqlite")]
 impl<Changes, Output> UpdateAndFetchResults<Changes, Output> for SqliteConnection
@@ -55,13 +55,13 @@
     Find<Changes::Table, Changes::Id>: LoadQuery<SqliteConnection, Output>,
 {
     fn update_and_fetch(&self, changeset: Changes) -> QueryResult<Output> {
-        ::update(changeset).set(changeset).execute(self)?;
+        crate::update(changeset).set(changeset).execute(self)?;
         Changes::table().find(changeset.id()).get_result(self)
     }
 }
 
 #[cfg(feature = "mysql")]
-use mysql::MysqlConnection;
+use crate::mysql::MysqlConnection;
 
 #[cfg(feature = "mysql")]
 impl<Changes, Output> UpdateAndFetchResults<Changes, Output> for MysqlConnection
@@ -73,7 +73,7 @@
     Find<Changes::Table, Changes::Id>: LoadQuery<MysqlConnection, Output>,
 {
     fn update_and_fetch(&self, changeset: Changes) -> QueryResult<Output> {
-        ::update(changeset).set(changeset).execute(self)?;
+        crate::update(changeset).set(changeset).execute(self)?;
         Changes::table().find(changeset.id()).get_result(self)
     }
 }
@@ -112,7 +112,7 @@
 /// # }
 /// #
 /// # fn run_test() -> QueryResult<()> {
-/// #     use animals::dsl::*;
+/// #     use self::animals::dsl::*;
 /// #     let connection = establish_connection();
 /// let form = AnimalForm { id: 2, name: "Super scary" };
 /// let changed_animal = form.save_changes(&connection)?;
diff --git a/diesel/src/query_dsl/select_dsl.rs b/diesel/src/query_dsl/select_dsl.rs
index e979daf..2385f69 100644
--- a/diesel/src/query_dsl/select_dsl.rs
+++ b/diesel/src/query_dsl/select_dsl.rs
@@ -1,5 +1,5 @@
-use expression::Expression;
-use query_source::Table;
+use crate::expression::Expression;
+use crate::query_source::Table;
 
 /// The `select` method
 ///
diff --git a/diesel/src/query_dsl/single_value_dsl.rs b/diesel/src/query_dsl/single_value_dsl.rs
index 635559b..be4c9b2 100644
--- a/diesel/src/query_dsl/single_value_dsl.rs
+++ b/diesel/src/query_dsl/single_value_dsl.rs
@@ -1,9 +1,9 @@
 use super::methods::LimitDsl;
-use dsl::Limit;
-use expression::grouped::Grouped;
-use expression::subselect::Subselect;
-use query_builder::SelectQuery;
-use sql_types::{IntoNullable, SingleValue};
+use crate::dsl::Limit;
+use crate::expression::grouped::Grouped;
+use crate::expression::subselect::Subselect;
+use crate::query_builder::SelectQuery;
+use crate::sql_types::{IntoNullable, SingleValue};
 
 /// The `single_value` method
 ///
diff --git a/diesel/src/query_source/joins.rs b/diesel/src/query_source/joins.rs
index 728a91a..fd539f3 100644
--- a/diesel/src/query_source/joins.rs
+++ b/diesel/src/query_source/joins.rs
@@ -1,13 +1,13 @@
 use super::{AppearsInFromClause, Plus, QuerySource};
-use backend::Backend;
-use expression::grouped::Grouped;
-use expression::nullable::Nullable;
-use expression::SelectableExpression;
-use prelude::*;
-use query_builder::*;
-use result::QueryResult;
-use sql_types::Bool;
-use util::TupleAppend;
+use crate::backend::Backend;
+use crate::expression::grouped::Grouped;
+use crate::expression::nullable::Nullable;
+use crate::expression::SelectableExpression;
+use crate::prelude::*;
+use crate::query_builder::*;
+use crate::result::QueryResult;
+use crate::sql_types::Bool;
+use crate::util::TupleAppend;
 
 #[derive(Debug, Clone, Copy, QueryId)]
 /// A query source representing the join between two tables
diff --git a/diesel/src/query_source/mod.rs b/diesel/src/query_source/mod.rs
index c335b14..c68e54e 100644
--- a/diesel/src/query_source/mod.rs
+++ b/diesel/src/query_source/mod.rs
@@ -7,8 +7,8 @@
 pub mod joins;
 mod peano_numbers;
 
-use expression::{Expression, NonAggregate, SelectableExpression};
-use query_builder::*;
+use crate::expression::{Expression, NonAggregate, SelectableExpression};
+use crate::query_builder::*;
 
 pub use self::joins::JoinTo;
 pub use self::peano_numbers::*;
diff --git a/diesel/src/r2d2.rs b/diesel/src/r2d2.rs
index 6b706af..9ee49bc 100644
--- a/diesel/src/r2d2.rs
+++ b/diesel/src/r2d2.rs
@@ -16,12 +16,12 @@
 use std::fmt;
 use std::marker::PhantomData;
 
-use backend::UsesAnsiSavepointSyntax;
-use connection::{AnsiTransactionManager, SimpleConnection};
-use deserialize::{Queryable, QueryableByName};
-use prelude::*;
-use query_builder::{AsQuery, QueryFragment, QueryId};
-use sql_types::HasSqlType;
+use crate::backend::UsesAnsiSavepointSyntax;
+use crate::connection::{AnsiTransactionManager, SimpleConnection};
+use crate::deserialize::{Queryable, QueryableByName};
+use crate::prelude::*;
+use crate::query_builder::{AsQuery, QueryFragment, QueryId};
+use crate::sql_types::HasSqlType;
 
 /// An r2d2 connection manager for use with Diesel.
 ///
@@ -54,7 +54,7 @@
     ConnectionError(ConnectionError),
 
     /// An error occurred pinging the database
-    QueryError(::result::Error),
+    QueryError(crate::result::Error),
 }
 
 impl fmt::Display for Error {
@@ -82,21 +82,21 @@
 }
 
 #[cfg(feature = "postgres")]
-impl R2D2Connection for ::pg::PgConnection {
+impl R2D2Connection for crate::pg::PgConnection {
     fn ping(&self) -> QueryResult<()> {
         self.execute("SELECT 1").map(|_| ())
     }
 }
 
 #[cfg(feature = "mysql")]
-impl R2D2Connection for ::mysql::MysqlConnection {
+impl R2D2Connection for crate::mysql::MysqlConnection {
     fn ping(&self) -> QueryResult<()> {
         self.execute("SELECT 1").map(|_| ())
     }
 }
 
 #[cfg(feature = "sqlite")]
-impl R2D2Connection for ::sqlite::SqliteConnection {
+impl R2D2Connection for crate::sqlite::SqliteConnection {
     fn ping(&self) -> QueryResult<()> {
         self.execute("SELECT 1").map(|_| ())
     }
@@ -188,8 +188,8 @@
     use std::sync::Arc;
     use std::thread;
 
-    use r2d2::*;
-    use test_helpers::*;
+    use crate::r2d2::*;
+    use crate::test_helpers::*;
 
     #[test]
     fn establish_basic_connection() {
@@ -235,8 +235,8 @@
 
     #[test]
     fn pooled_connection_impls_connection() {
-        use select;
-        use sql_types::Text;
+        use crate::select;
+        use crate::sql_types::Text;
 
         let manager = ConnectionManager::<TestConnection>::new(database_url());
         let pool = Pool::builder()
diff --git a/diesel/src/row.rs b/diesel/src/row.rs
index 5edab35..f5e6a69 100644
--- a/diesel/src/row.rs
+++ b/diesel/src/row.rs
@@ -1,7 +1,7 @@
 //! Contains the `Row` trait
 
-use backend::{self, Backend};
-use deserialize::{self, FromSql};
+use crate::backend::{self, Backend};
+use crate::deserialize::{self, FromSql};
 
 /// Represents a single database row.
 /// Apps should not need to concern themselves with this trait.
diff --git a/diesel/src/serialize.rs b/diesel/src/serialize.rs
index bd77498..fe70c17 100644
--- a/diesel/src/serialize.rs
+++ b/diesel/src/serialize.rs
@@ -6,11 +6,11 @@
 use std::ops::{Deref, DerefMut};
 use std::result;
 
-use backend::Backend;
-use sql_types::TypeMetadata;
+use crate::backend::Backend;
+use crate::sql_types::TypeMetadata;
 
 #[cfg(feature = "postgres")]
-pub use pg::serialize::*;
+pub use crate::pg::serialize::*;
 
 /// A specialized result type representing the result of serializing
 /// a value for the database.
diff --git a/diesel/src/sql_types/fold.rs b/diesel/src/sql_types/fold.rs
index 2782353..023aedf 100644
--- a/diesel/src/sql_types/fold.rs
+++ b/diesel/src/sql_types/fold.rs
@@ -1,4 +1,4 @@
-use sql_types::{self, NotNull};
+use crate::sql_types::{self, NotNull};
 
 /// Represents SQL types which can be used with `SUM` and `AVG`
 pub trait Foldable {
diff --git a/diesel/src/sql_types/mod.rs b/diesel/src/sql_types/mod.rs
index 109b6e3..79413f4 100644
--- a/diesel/src/sql_types/mod.rs
+++ b/diesel/src/sql_types/mod.rs
@@ -356,10 +356,10 @@
 pub struct Nullable<ST: NotNull>(ST);
 
 #[cfg(feature = "postgres")]
-pub use pg::types::sql_types::*;
+pub use crate::pg::types::sql_types::*;
 
 #[cfg(feature = "mysql")]
-pub use mysql::types::*;
+pub use crate::mysql::types::*;
 
 /// Indicates that a SQL type exists for a backend.
 ///
diff --git a/diesel/src/sql_types/ord.rs b/diesel/src/sql_types/ord.rs
index 3240eab..7ce6293 100644
--- a/diesel/src/sql_types/ord.rs
+++ b/diesel/src/sql_types/ord.rs
@@ -1,4 +1,4 @@
-use sql_types::{self, NotNull};
+use crate::sql_types::{self, NotNull};
 
 /// Marker trait for types which can be used with `MAX` and `MIN`
 pub trait SqlOrd {}
diff --git a/diesel/src/sqlite/backend.rs b/diesel/src/sqlite/backend.rs
index 1f29650..0b04766 100644
--- a/diesel/src/sqlite/backend.rs
+++ b/diesel/src/sqlite/backend.rs
@@ -3,9 +3,9 @@
 
 use super::connection::SqliteValue;
 use super::query_builder::SqliteQueryBuilder;
-use backend::*;
-use query_builder::bind_collector::RawBytesBindCollector;
-use sql_types::TypeMetadata;
+use crate::backend::*;
+use crate::query_builder::bind_collector::RawBytesBindCollector;
+use crate::sql_types::TypeMetadata;
 
 /// The SQLite backend
 #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
diff --git a/diesel/src/sqlite/connection/functions.rs b/diesel/src/sqlite/connection/functions.rs
index 20c82f0..3e6a526 100644
--- a/diesel/src/sqlite/connection/functions.rs
+++ b/diesel/src/sqlite/connection/functions.rs
@@ -3,11 +3,11 @@
 use super::raw::RawConnection;
 use super::serialized_value::SerializedValue;
 use super::{Sqlite, SqliteValue};
-use deserialize::{FromSqlRow, Queryable};
-use result::{DatabaseErrorKind, Error, QueryResult};
-use row::Row;
-use serialize::{IsNull, Output, ToSql};
-use sql_types::HasSqlType;
+use crate::deserialize::{FromSqlRow, Queryable};
+use crate::result::{DatabaseErrorKind, Error, QueryResult};
+use crate::row::Row;
+use crate::serialize::{IsNull, Output, ToSql};
+use crate::sql_types::HasSqlType;
 
 pub fn register<ArgsSqlType, RetSqlType, Args, Ret, F>(
     conn: &RawConnection,
diff --git a/diesel/src/sqlite/connection/mod.rs b/diesel/src/sqlite/connection/mod.rs
index ed2fc7e..2bc6cb1 100644
--- a/diesel/src/sqlite/connection/mod.rs
+++ b/diesel/src/sqlite/connection/mod.rs
@@ -15,14 +15,14 @@
 use self::raw::RawConnection;
 use self::statement_iterator::*;
 use self::stmt::{Statement, StatementUse};
-use connection::*;
-use deserialize::{Queryable, QueryableByName};
-use query_builder::bind_collector::RawBytesBindCollector;
-use query_builder::*;
-use result::*;
-use serialize::ToSql;
-use sql_types::HasSqlType;
-use sqlite::Sqlite;
+use crate::connection::*;
+use crate::deserialize::{Queryable, QueryableByName};
+use crate::query_builder::bind_collector::RawBytesBindCollector;
+use crate::query_builder::*;
+use crate::result::*;
+use crate::serialize::ToSql;
+use crate::sql_types::HasSqlType;
+use crate::sqlite::Sqlite;
 
 /// Connections for the SQLite backend. Unlike other backends, "connection URLs"
 /// for SQLite are file paths, [URIs](https://sqlite.org/uri.html), or special
@@ -50,7 +50,7 @@
     type TransactionManager = AnsiTransactionManager;
 
     fn establish(database_url: &str) -> ConnectionResult<Self> {
-        use result::ConnectionError::CouldntSetupConfiguration;
+        use crate::result::ConnectionError::CouldntSetupConfiguration;
 
         let raw_connection = RawConnection::establish(database_url)?;
         let conn = Self {
@@ -241,7 +241,7 @@
     }
 
     fn register_diesel_sql_functions(&self) -> QueryResult<()> {
-        use sql_types::{Integer, Text};
+        use crate::sql_types::{Integer, Text};
 
         functions::register::<Text, Integer, _, _, _>(
             &self.raw_connection,
@@ -266,14 +266,14 @@
 #[cfg(test)]
 mod tests {
     use super::*;
-    use dsl::sql;
-    use prelude::*;
-    use sql_types::Integer;
+    use crate::dsl::sql;
+    use crate::prelude::*;
+    use crate::sql_types::Integer;
 
     #[test]
     fn prepared_statements_are_cached_when_run() {
         let connection = SqliteConnection::establish(":memory:").unwrap();
-        let query = ::select(1.into_sql::<Integer>());
+        let query = crate::select(1.into_sql::<Integer>());
 
         assert_eq!(Ok(1), query.get_result(&connection));
         assert_eq!(Ok(1), query.get_result(&connection));
@@ -283,7 +283,7 @@
     #[test]
     fn sql_literal_nodes_are_not_cached() {
         let connection = SqliteConnection::establish(":memory:").unwrap();
-        let query = ::select(sql::<Integer>("1"));
+        let query = crate::select(sql::<Integer>("1"));
 
         assert_eq!(Ok(1), query.get_result(&connection));
         assert_eq!(0, connection.statement_cache.len());
@@ -293,7 +293,7 @@
     fn queries_containing_sql_literal_nodes_are_not_cached() {
         let connection = SqliteConnection::establish(":memory:").unwrap();
         let one_as_expr = 1.into_sql::<Integer>();
-        let query = ::select(one_as_expr.eq(sql::<Integer>("1")));
+        let query = crate::select(one_as_expr.eq(sql::<Integer>("1")));
 
         assert_eq!(Ok(true), query.get_result(&connection));
         assert_eq!(0, connection.statement_cache.len());
@@ -303,7 +303,7 @@
     fn queries_containing_in_with_vec_are_not_cached() {
         let connection = SqliteConnection::establish(":memory:").unwrap();
         let one_as_expr = 1.into_sql::<Integer>();
-        let query = ::select(one_as_expr.eq_any(vec![1, 2, 3]));
+        let query = crate::select(one_as_expr.eq_any(vec![1, 2, 3]));
 
         assert_eq!(Ok(true), query.get_result(&connection));
         assert_eq!(0, connection.statement_cache.len());
@@ -313,13 +313,13 @@
     fn queries_containing_in_with_subselect_are_cached() {
         let connection = SqliteConnection::establish(":memory:").unwrap();
         let one_as_expr = 1.into_sql::<Integer>();
-        let query = ::select(one_as_expr.eq_any(::select(one_as_expr)));
+        let query = crate::select(one_as_expr.eq_any(crate::select(one_as_expr)));
 
         assert_eq!(Ok(true), query.get_result(&connection));
         assert_eq!(1, connection.statement_cache.len());
     }
 
-    use sql_types::Text;
+    use crate::sql_types::Text;
     sql_function!(fn fun_case(x: Text) -> Text);
 
     #[test]
@@ -339,7 +339,7 @@
         })
         .unwrap();
 
-        let mapped_string = ::select(fun_case("foobar"))
+        let mapped_string = crate::select(fun_case("foobar"))
             .get_result::<String>(&connection)
             .unwrap();
         assert_eq!("fOoBaR", mapped_string);
@@ -352,7 +352,7 @@
         let connection = SqliteConnection::establish(":memory:").unwrap();
         my_add::register_impl(&connection, |x: i32, y: i32| x + y).unwrap();
 
-        let added = ::select(my_add(1, 2)).get_result::<i32>(&connection);
+        let added = crate::select(my_add(1, 2)).get_result::<i32>(&connection);
         assert_eq!(Ok(3), added);
     }
 
@@ -368,7 +368,7 @@
         })
         .unwrap();
 
-        let added = ::select((add_counter(1), add_counter(1), add_counter(1)))
+        let added = crate::select((add_counter(1), add_counter(1), add_counter(1)))
             .get_result::<(i32, i32, i32)>(&connection);
         assert_eq!(Ok((2, 3, 4)), added);
     }
diff --git a/diesel/src/sqlite/connection/raw.rs b/diesel/src/sqlite/connection/raw.rs
index b6862a0..e46e4f1 100644
--- a/diesel/src/sqlite/connection/raw.rs
+++ b/diesel/src/sqlite/connection/raw.rs
@@ -7,8 +7,8 @@
 use std::{mem, ptr, slice, str};
 
 use super::serialized_value::SerializedValue;
-use result::Error::DatabaseError;
-use result::*;
+use crate::result::Error::DatabaseError;
+use crate::result::*;
 
 #[allow(missing_debug_implementations, missing_copy_implementations)]
 pub struct RawConnection {
diff --git a/diesel/src/sqlite/connection/serialized_value.rs b/diesel/src/sqlite/connection/serialized_value.rs
index 3356f1a..5c38f22 100644
--- a/diesel/src/sqlite/connection/serialized_value.rs
+++ b/diesel/src/sqlite/connection/serialized_value.rs
@@ -3,7 +3,7 @@
 use std::os::raw as libc;
 use std::ptr::{self, NonNull};
 
-use sqlite::SqliteType;
+use crate::sqlite::SqliteType;
 
 pub struct SerializedValue {
     pub ty: SqliteType,
diff --git a/diesel/src/sqlite/connection/sqlite_value.rs b/diesel/src/sqlite/connection/sqlite_value.rs
index c29a18f..247f492 100644
--- a/diesel/src/sqlite/connection/sqlite_value.rs
+++ b/diesel/src/sqlite/connection/sqlite_value.rs
@@ -5,8 +5,8 @@
 use std::ptr::NonNull;
 use std::{slice, str};
 
-use row::*;
-use sqlite::Sqlite;
+use crate::row::*;
+use crate::sqlite::Sqlite;
 
 #[allow(missing_debug_implementations, missing_copy_implementations)]
 pub struct SqliteValue {
diff --git a/diesel/src/sqlite/connection/statement_iterator.rs b/diesel/src/sqlite/connection/statement_iterator.rs
index 4454dc4..098b3c2 100644
--- a/diesel/src/sqlite/connection/statement_iterator.rs
+++ b/diesel/src/sqlite/connection/statement_iterator.rs
@@ -2,10 +2,10 @@
 use std::marker::PhantomData;
 
 use super::stmt::StatementUse;
-use deserialize::{FromSqlRow, Queryable, QueryableByName};
-use result::Error::DeserializationError;
-use result::QueryResult;
-use sqlite::Sqlite;
+use crate::deserialize::{FromSqlRow, Queryable, QueryableByName};
+use crate::result::Error::DeserializationError;
+use crate::result::QueryResult;
+use crate::sqlite::Sqlite;
 
 pub struct StatementIterator<'a, ST, T> {
     stmt: StatementUse<'a>,
diff --git a/diesel/src/sqlite/connection/stmt.rs b/diesel/src/sqlite/connection/stmt.rs
index e95106f..534f421 100644
--- a/diesel/src/sqlite/connection/stmt.rs
+++ b/diesel/src/sqlite/connection/stmt.rs
@@ -8,9 +8,9 @@
 use super::raw::RawConnection;
 use super::serialized_value::SerializedValue;
 use super::sqlite_value::SqliteRow;
-use result::Error::DatabaseError;
-use result::*;
-use sqlite::SqliteType;
+use crate::result::Error::DatabaseError;
+use crate::result::*;
+use crate::sqlite::SqliteType;
 
 pub struct Statement {
     inner_statement: NonNull<ffi::sqlite3_stmt>,
diff --git a/diesel/src/sqlite/query_builder/mod.rs b/diesel/src/sqlite/query_builder/mod.rs
index 6c0caf5..dd98659 100644
--- a/diesel/src/sqlite/query_builder/mod.rs
+++ b/diesel/src/sqlite/query_builder/mod.rs
@@ -1,8 +1,8 @@
 //! The SQLite query builder
 
 use super::backend::Sqlite;
-use query_builder::QueryBuilder;
-use result::QueryResult;
+use crate::query_builder::QueryBuilder;
+use crate::result::QueryResult;
 
 /// Constructs SQL queries for use with the SQLite backend
 #[allow(missing_debug_implementations)]
diff --git a/diesel/src/sqlite/types/date_and_time/chrono.rs b/diesel/src/sqlite/types/date_and_time/chrono.rs
index 9152436..7cdb0a0 100644
--- a/diesel/src/sqlite/types/date_and_time/chrono.rs
+++ b/diesel/src/sqlite/types/date_and_time/chrono.rs
@@ -3,11 +3,11 @@
 use self::chrono::{NaiveDate, NaiveDateTime, NaiveTime};
 use std::io::Write;
 
-use backend;
-use deserialize::{self, FromSql};
-use serialize::{self, Output, ToSql};
-use sql_types::{Date, Text, Time, Timestamp};
-use sqlite::Sqlite;
+use crate::backend;
+use crate::deserialize::{self, FromSql};
+use crate::serialize::{self, Output, ToSql};
+use crate::sql_types::{Date, Text, Time, Timestamp};
+use crate::sqlite::Sqlite;
 
 const SQLITE_DATE_FORMAT: &str = "%F";
 
@@ -111,10 +111,10 @@
     use self::chrono::{Duration, NaiveDate, NaiveDateTime, NaiveTime, Timelike, Utc};
     use self::dotenv::dotenv;
 
-    use dsl::{now, sql};
-    use prelude::*;
-    use select;
-    use sql_types::{Text, Time, Timestamp};
+    use crate::dsl::{now, sql};
+    use crate::prelude::*;
+    use crate::select;
+    use crate::sql_types::{Text, Time, Timestamp};
 
     sql_function!(fn datetime(x: Text) -> Timestamp);
     sql_function!(fn time(x: Text) -> Time);
diff --git a/diesel/src/sqlite/types/date_and_time/mod.rs b/diesel/src/sqlite/types/date_and_time/mod.rs
index 04c4835..6679d43 100644
--- a/diesel/src/sqlite/types/date_and_time/mod.rs
+++ b/diesel/src/sqlite/types/date_and_time/mod.rs
@@ -1,10 +1,10 @@
 use std::io::Write;
 
-use deserialize::{self, FromSql};
-use serialize::{self, Output, ToSql};
-use sql_types;
-use sqlite::connection::SqliteValue;
-use sqlite::Sqlite;
+use crate::deserialize::{self, FromSql};
+use crate::serialize::{self, Output, ToSql};
+use crate::sql_types;
+use crate::sqlite::connection::SqliteValue;
+use crate::sqlite::Sqlite;
 
 #[cfg(feature = "chrono")]
 mod chrono;
diff --git a/diesel/src/sqlite/types/mod.rs b/diesel/src/sqlite/types/mod.rs
index 9b77268..5c73aee 100644
--- a/diesel/src/sqlite/types/mod.rs
+++ b/diesel/src/sqlite/types/mod.rs
@@ -5,9 +5,9 @@
 
 use super::connection::SqliteValue;
 use super::Sqlite;
-use deserialize::{self, FromSql};
-use serialize::{self, Output, ToSql};
-use sql_types;
+use crate::deserialize::{self, FromSql};
+use crate::serialize::{self, Output, ToSql};
+use crate::sql_types;
 
 /// The returned pointer is *only* valid for the lifetime to the argument of
 /// `from_sql`. This impl is intended for uses where you want to write a new
diff --git a/diesel/src/sqlite/types/numeric.rs b/diesel/src/sqlite/types/numeric.rs
index fa8aca4..19d8a95 100644
--- a/diesel/src/sqlite/types/numeric.rs
+++ b/diesel/src/sqlite/types/numeric.rs
@@ -4,10 +4,10 @@
 
 use self::bigdecimal::BigDecimal;
 
-use deserialize::{self, FromSql};
-use sql_types::{Double, Numeric};
-use sqlite::connection::SqliteValue;
-use sqlite::Sqlite;
+use crate::deserialize::{self, FromSql};
+use crate::sql_types::{Double, Numeric};
+use crate::sqlite::connection::SqliteValue;
+use crate::sqlite::Sqlite;
 
 impl FromSql<Numeric, Sqlite> for BigDecimal {
     fn from_sql(bytes: Option<&SqliteValue>) -> deserialize::Result<Self> {
diff --git a/diesel/src/test_helpers.rs b/diesel/src/test_helpers.rs
index de4e25b..513a377 100644
--- a/diesel/src/test_helpers.rs
+++ b/diesel/src/test_helpers.rs
@@ -1,6 +1,6 @@
 extern crate dotenv;
 
-use prelude::*;
+use crate::prelude::*;
 
 cfg_if! {
     if #[cfg(feature = "sqlite")] {
diff --git a/diesel/src/type_impls/date_and_time.rs b/diesel/src/type_impls/date_and_time.rs
index 99f1efb..bb5662f 100644
--- a/diesel/src/type_impls/date_and_time.rs
+++ b/diesel/src/type_impls/date_and_time.rs
@@ -4,14 +4,14 @@
 
 #[derive(FromSqlRow, AsExpression)]
 #[diesel(foreign_derive)]
-#[sql_type = "::sql_types::Timestamp"]
+#[sql_type = "crate::sql_types::Timestamp"]
 struct SystemTimeProxy(SystemTime);
 
 #[cfg(feature = "chrono")]
 mod chrono {
     extern crate chrono;
     use self::chrono::*;
-    use sql_types::{Date, Time, Timestamp};
+    use crate::sql_types::{Date, Time, Timestamp};
 
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
@@ -26,12 +26,12 @@
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
     #[sql_type = "Timestamp"]
-    #[cfg_attr(feature = "postgres", sql_type = "::sql_types::Timestamptz")]
-    #[cfg_attr(feature = "mysql", sql_type = "::sql_types::Datetime")]
+    #[cfg_attr(feature = "postgres", sql_type = "crate::sql_types::Timestamptz")]
+    #[cfg_attr(feature = "mysql", sql_type = "crate::sql_types::Datetime")]
     struct NaiveDateTimeProxy(NaiveDateTime);
 
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
-    #[cfg_attr(feature = "postgres", sql_type = "::sql_types::Timestamptz")]
+    #[cfg_attr(feature = "postgres", sql_type = "crate::sql_types::Timestamptz")]
     struct DateTimeProxy<Tz: TimeZone>(DateTime<Tz>);
 }
diff --git a/diesel/src/type_impls/decimal.rs b/diesel/src/type_impls/decimal.rs
index 942fe4f..130a8e4 100644
--- a/diesel/src/type_impls/decimal.rs
+++ b/diesel/src/type_impls/decimal.rs
@@ -4,7 +4,7 @@
 mod bigdecimal {
     extern crate bigdecimal;
     use self::bigdecimal::BigDecimal;
-    use sql_types::Numeric;
+    use crate::sql_types::Numeric;
 
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
diff --git a/diesel/src/type_impls/floats.rs b/diesel/src/type_impls/floats.rs
index 3574a6d..01d2d13 100644
--- a/diesel/src/type_impls/floats.rs
+++ b/diesel/src/type_impls/floats.rs
@@ -2,16 +2,16 @@
 use std::error::Error;
 use std::io::prelude::*;
 
-use backend::{Backend, BinaryRawValue};
-use deserialize::{self, FromSql};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types;
+use crate::backend::{Backend, BinaryRawValue};
+use crate::deserialize::{self, FromSql};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types;
 
 impl<DB> FromSql<sql_types::Float, DB> for f32
 where
     DB: Backend + for<'a> BinaryRawValue<'a>,
 {
-    fn from_sql(value: Option<::backend::RawValue<DB>>) -> deserialize::Result<Self> {
+    fn from_sql(value: Option<crate::backend::RawValue<DB>>) -> deserialize::Result<Self> {
         let value = not_none!(value);
         let mut bytes = DB::as_bytes(value);
         debug_assert!(
@@ -37,7 +37,7 @@
 where
     DB: Backend + for<'a> BinaryRawValue<'a>,
 {
-    fn from_sql(value: Option<::backend::RawValue<DB>>) -> deserialize::Result<Self> {
+    fn from_sql(value: Option<crate::backend::RawValue<DB>>) -> deserialize::Result<Self> {
         let value = not_none!(value);
         let mut bytes = DB::as_bytes(value);
         debug_assert!(
diff --git a/diesel/src/type_impls/integers.rs b/diesel/src/type_impls/integers.rs
index d1181ea..108e8dd 100644
--- a/diesel/src/type_impls/integers.rs
+++ b/diesel/src/type_impls/integers.rs
@@ -2,16 +2,16 @@
 use std::error::Error;
 use std::io::prelude::*;
 
-use backend::{Backend, BinaryRawValue};
-use deserialize::{self, FromSql};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types;
+use crate::backend::{Backend, BinaryRawValue};
+use crate::deserialize::{self, FromSql};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types;
 
 impl<DB> FromSql<sql_types::SmallInt, DB> for i16
 where
     DB: Backend + for<'a> BinaryRawValue<'a>,
 {
-    fn from_sql(value: Option<::backend::RawValue<DB>>) -> deserialize::Result<Self> {
+    fn from_sql(value: Option<crate::backend::RawValue<DB>>) -> deserialize::Result<Self> {
         let value = not_none!(value);
         let mut bytes = DB::as_bytes(value);
         debug_assert!(
@@ -43,7 +43,7 @@
 where
     DB: Backend + for<'a> BinaryRawValue<'a>,
 {
-    fn from_sql(value: Option<::backend::RawValue<DB>>) -> deserialize::Result<Self> {
+    fn from_sql(value: Option<crate::backend::RawValue<DB>>) -> deserialize::Result<Self> {
         let value = not_none!(value);
         let mut bytes = DB::as_bytes(value);
         debug_assert!(
@@ -74,7 +74,7 @@
 where
     DB: Backend + for<'a> BinaryRawValue<'a>,
 {
-    fn from_sql(value: Option<::backend::RawValue<DB>>) -> deserialize::Result<Self> {
+    fn from_sql(value: Option<crate::backend::RawValue<DB>>) -> deserialize::Result<Self> {
         let value = not_none!(value);
         let mut bytes = DB::as_bytes(value);
         debug_assert!(
diff --git a/diesel/src/type_impls/option.rs b/diesel/src/type_impls/option.rs
index 86c12e3..10414ee 100644
--- a/diesel/src/type_impls/option.rs
+++ b/diesel/src/type_impls/option.rs
@@ -1,14 +1,14 @@
 use std::io::Write;
 
-use backend::{self, Backend};
-use deserialize::{self, FromSql, FromSqlRow, Queryable, QueryableByName};
-use expression::bound::Bound;
-use expression::*;
-use query_builder::QueryId;
-use result::UnexpectedNullError;
-use row::NamedRow;
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types::{HasSqlType, NotNull, Nullable};
+use crate::backend::{self, Backend};
+use crate::deserialize::{self, FromSql, FromSqlRow, Queryable, QueryableByName};
+use crate::expression::bound::Bound;
+use crate::expression::*;
+use crate::query_builder::QueryId;
+use crate::result::UnexpectedNullError;
+use crate::row::NamedRow;
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types::{HasSqlType, NotNull, Nullable};
 
 impl<T, DB> HasSqlType<Nullable<T>> for DB
 where
@@ -89,7 +89,7 @@
 {
     const FIELDS_NEEDED: usize = T::FIELDS_NEEDED;
 
-    fn build_from_row<R: ::row::Row<DB>>(row: &mut R) -> deserialize::Result<Self> {
+    fn build_from_row<R: crate::row::Row<DB>>(row: &mut R) -> deserialize::Result<Self> {
         let fields_needed = Self::FIELDS_NEEDED;
         if row.next_is_null(fields_needed) {
             row.advance(fields_needed);
@@ -138,9 +138,9 @@
 }
 
 #[cfg(all(test, feature = "postgres"))]
-use pg::Pg;
+use crate::pg::Pg;
 #[cfg(all(test, feature = "postgres"))]
-use sql_types;
+use crate::sql_types;
 
 #[test]
 #[cfg(feature = "postgres")]
diff --git a/diesel/src/type_impls/primitives.rs b/diesel/src/type_impls/primitives.rs
index 571eb43..0d889f0 100644
--- a/diesel/src/type_impls/primitives.rs
+++ b/diesel/src/type_impls/primitives.rs
@@ -1,10 +1,12 @@
 use std::error::Error;
 use std::io::Write;
 
-use backend::{self, Backend, BinaryRawValue};
-use deserialize::{self, FromSql, FromSqlRow, Queryable};
-use serialize::{self, IsNull, Output, ToSql};
-use sql_types::{self, BigInt, Binary, Bool, Double, Float, Integer, NotNull, SmallInt, Text};
+use crate::backend::{self, Backend, BinaryRawValue};
+use crate::deserialize::{self, FromSql, FromSqlRow, Queryable};
+use crate::serialize::{self, IsNull, Output, ToSql};
+use crate::sql_types::{
+    self, BigInt, Binary, Bool, Double, Float, Integer, NotNull, SmallInt, Text,
+};
 
 #[allow(dead_code)]
 mod foreign_impls {
@@ -17,7 +19,7 @@
 
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
-    #[cfg_attr(feature = "mysql", sql_type = "::sql_types::TinyInt")]
+    #[cfg_attr(feature = "mysql", sql_type = "crate::sql_types::TinyInt")]
     struct I8Proxy(i8);
 
     #[derive(FromSqlRow, AsExpression)]
@@ -39,24 +41,24 @@
     #[diesel(foreign_derive)]
     #[cfg_attr(
         feature = "mysql",
-        sql_type = "::sql_types::Unsigned<::sql_types::TinyInt>"
+        sql_type = "crate::sql_types::Unsigned<crate::sql_types::TinyInt>"
     )]
     struct U8Proxy(u8);
 
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
-    #[cfg_attr(feature = "mysql", sql_type = "::sql_types::Unsigned<SmallInt>")]
+    #[cfg_attr(feature = "mysql", sql_type = "crate::sql_types::Unsigned<SmallInt>")]
     struct U16Proxy(u16);
 
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
-    #[cfg_attr(feature = "mysql", sql_type = "::sql_types::Unsigned<Integer>")]
-    #[cfg_attr(feature = "postgres", sql_type = "::sql_types::Oid")]
+    #[cfg_attr(feature = "mysql", sql_type = "crate::sql_types::Unsigned<Integer>")]
+    #[cfg_attr(feature = "postgres", sql_type = "crate::sql_types::Oid")]
     struct U32Proxy(u32);
 
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
-    #[cfg_attr(feature = "mysql", sql_type = "::sql_types::Unsigned<BigInt>")]
+    #[cfg_attr(feature = "mysql", sql_type = "crate::sql_types::Unsigned<BigInt>")]
     struct U64Proxy(u64);
 
     #[derive(FromSqlRow, AsExpression)]
@@ -72,17 +74,17 @@
     #[derive(FromSqlRow, AsExpression)]
     #[diesel(foreign_derive)]
     #[sql_type = "Text"]
-    #[cfg_attr(feature = "sqlite", sql_type = "::sql_types::Date")]
-    #[cfg_attr(feature = "sqlite", sql_type = "::sql_types::Time")]
-    #[cfg_attr(feature = "sqlite", sql_type = "::sql_types::Timestamp")]
+    #[cfg_attr(feature = "sqlite", sql_type = "crate::sql_types::Date")]
+    #[cfg_attr(feature = "sqlite", sql_type = "crate::sql_types::Time")]
+    #[cfg_attr(feature = "sqlite", sql_type = "crate::sql_types::Timestamp")]
     struct StringProxy(String);
 
     #[derive(AsExpression)]
     #[diesel(foreign_derive, not_sized)]
     #[sql_type = "Text"]
-    #[cfg_attr(feature = "sqlite", sql_type = "::sql_types::Date")]
-    #[cfg_attr(feature = "sqlite", sql_type = "::sql_types::Time")]
-    #[cfg_attr(feature = "sqlite", sql_type = "::sql_types::Timestamp")]
+    #[cfg_attr(feature = "sqlite", sql_type = "crate::sql_types::Date")]
+    #[cfg_attr(feature = "sqlite", sql_type = "crate::sql_types::Time")]
+    #[cfg_attr(feature = "sqlite", sql_type = "crate::sql_types::Timestamp")]
     struct StrProxy(str);
 
     #[derive(FromSqlRow)]
@@ -125,7 +127,7 @@
 where
     DB: Backend + for<'a> BinaryRawValue<'a>,
 {
-    fn from_sql(value: Option<::backend::RawValue<DB>>) -> deserialize::Result<Self> {
+    fn from_sql(value: Option<crate::backend::RawValue<DB>>) -> deserialize::Result<Self> {
         use std::str;
         let value = not_none!(value);
         let string = str::from_utf8(DB::as_bytes(value))?;
@@ -138,7 +140,7 @@
 where
     DB: Backend + for<'a> BinaryRawValue<'a>,
 {
-    default fn from_sql(value: Option<::backend::RawValue<DB>>) -> deserialize::Result<Self> {
+    default fn from_sql(value: Option<crate::backend::RawValue<DB>>) -> deserialize::Result<Self> {
         use std::str;
         let value = not_none!(value);
         let string = str::from_utf8(DB::as_bytes(value))?;
@@ -239,7 +241,7 @@
     DB: Backend,
     Cow<'a, T>: FromSql<ST, DB>,
 {
-    fn build_from_row<R: ::row::Row<DB>>(row: &mut R) -> deserialize::Result<Self> {
+    fn build_from_row<R: crate::row::Row<DB>>(row: &mut R) -> deserialize::Result<Self> {
         FromSql::<ST, DB>::from_sql(row.take())
     }
 }
@@ -257,8 +259,8 @@
     }
 }
 
-use expression::bound::Bound;
-use expression::{AsExpression, Expression};
+use crate::expression::bound::Bound;
+use crate::expression::{AsExpression, Expression};
 
 impl<'a, T: ?Sized, ST> AsExpression<ST> for Cow<'a, T>
 where
diff --git a/diesel/src/type_impls/tuples.rs b/diesel/src/type_impls/tuples.rs
index 9b582e3..0f47045 100644
--- a/diesel/src/type_impls/tuples.rs
+++ b/diesel/src/type_impls/tuples.rs
@@ -1,18 +1,18 @@
 use std::error::Error;
 
-use associations::BelongsTo;
-use backend::Backend;
-use deserialize::{self, FromSqlRow, Queryable, QueryableByName};
-use expression::{
+use crate::associations::BelongsTo;
+use crate::backend::Backend;
+use crate::deserialize::{self, FromSqlRow, Queryable, QueryableByName};
+use crate::expression::{
     AppearsOnTable, AsExpression, AsExpressionList, Expression, NonAggregate, SelectableExpression,
 };
-use insertable::{CanInsertInSingleQuery, InsertValues, Insertable};
-use query_builder::*;
-use query_source::*;
-use result::QueryResult;
-use row::*;
-use sql_types::{HasSqlType, NotNull};
-use util::TupleAppend;
+use crate::insertable::{CanInsertInSingleQuery, InsertValues, Insertable};
+use crate::query_builder::*;
+use crate::query_source::*;
+use crate::result::QueryResult;
+use crate::row::*;
+use crate::sql_types::{HasSqlType, NotNull};
+use crate::util::TupleAppend;
 
 macro_rules! tuple_impls {
     ($(