Revert "Strip prefixes from types"
This reverts commit ccdb02f661
.
I'm not sure this is the right way to go just yet
This commit is contained in:
parent
ccdb02f661
commit
30a3210be0
@ -14,12 +14,12 @@ path = "tests/test.rs"
|
||||
|
||||
[dependencies.openssl]
|
||||
git = "https://github.com/sfackler/rust-openssl"
|
||||
rev = "182ec4a6e77a53381e8b5e161f5d9c8fb3d965ff"
|
||||
rev = "39343df472b4b0c99055d371f42beceeef527bd6"
|
||||
|
||||
[dependencies.phf]
|
||||
git = "https://github.com/sfackler/rust-phf"
|
||||
rev = "9fd8d24f59b1af976526fc43baf6635a3714c71e"
|
||||
rev = "b2220d9a428049fb9c52b51c16d8f6b15cd02487"
|
||||
|
||||
[dependencies.phf_mac]
|
||||
git = "https://github.com/sfackler/rust-phf"
|
||||
rev = "9fd8d24f59b1af976526fc43baf6635a3714c71e"
|
||||
rev = "b2220d9a428049fb9c52b51c16d8f6b15cd02487"
|
||||
|
@ -15,7 +15,7 @@ extern crate time;
|
||||
|
||||
use time::Timespec;
|
||||
|
||||
use postgres::NoSsl;
|
||||
use postgres::{PostgresConnection, NoSsl};
|
||||
use postgres::types::ToSql;
|
||||
|
||||
struct Person {
|
||||
@ -26,7 +26,7 @@ struct Person {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let conn = postgres::Connection::connect("postgres://postgres@localhost",
|
||||
let conn = PostgresConnection::connect("postgres://postgres@localhost",
|
||||
&NoSsl).unwrap();
|
||||
|
||||
conn.execute("CREATE TABLE person (
|
||||
|
@ -4,7 +4,7 @@ use std::io::net::tcp::TcpStream;
|
||||
use std::io::net::unix::UnixStream;
|
||||
use std::io::{Stream, IoResult};
|
||||
|
||||
use {ConnectParams,
|
||||
use {PostgresConnectParams,
|
||||
SslMode,
|
||||
NoSsl,
|
||||
PreferSsl,
|
||||
@ -81,7 +81,8 @@ impl Writer for InternalStream {
|
||||
}
|
||||
}
|
||||
|
||||
fn open_socket(params: &ConnectParams) -> Result<InternalStream, PostgresConnectError> {
|
||||
fn open_socket(params: &PostgresConnectParams)
|
||||
-> Result<InternalStream, PostgresConnectError> {
|
||||
let port = params.port.unwrap_or(DEFAULT_PORT);
|
||||
let socket = match params.target {
|
||||
TargetTcp(ref host) =>
|
||||
@ -95,7 +96,7 @@ fn open_socket(params: &ConnectParams) -> Result<InternalStream, PostgresConnect
|
||||
socket.map_err(|e| SocketError(e))
|
||||
}
|
||||
|
||||
pub fn initialize_stream(params: &ConnectParams, ssl: &SslMode)
|
||||
pub fn initialize_stream(params: &PostgresConnectParams, ssl: &SslMode)
|
||||
-> Result<MaybeSslStream<InternalStream>, PostgresConnectError> {
|
||||
let mut socket = try!(open_socket(params));
|
||||
|
||||
|
327
src/lib.rs
327
src/lib.rs
@ -8,7 +8,7 @@
|
||||
//!
|
||||
//! use time::Timespec;
|
||||
//!
|
||||
//! use postgres::NoSsl;
|
||||
//! use postgres::{PostgresConnection, NoSsl};
|
||||
//!
|
||||
//! struct Person {
|
||||
//! id: i32,
|
||||
@ -18,7 +18,7 @@
|
||||
//! }
|
||||
//!
|
||||
//! fn main() {
|
||||
//! let conn = postgres::Connection::connect("postgresql://postgres@localhost",
|
||||
//! let conn = PostgresConnection::connect("postgresql://postgres@localhost",
|
||||
//! &NoSsl).unwrap();
|
||||
//!
|
||||
//! conn.execute("CREATE TABLE person (
|
||||
@ -66,18 +66,17 @@ extern crate url;
|
||||
extern crate log;
|
||||
|
||||
use collections::{Deque, RingBuf};
|
||||
use url::Url;
|
||||
use url::{UserInfo, Url};
|
||||
use openssl::crypto::hash::{MD5, Hasher};
|
||||
use openssl::ssl::SslContext;
|
||||
use serialize::hex::ToHex;
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::collections::HashMap;
|
||||
use std::fmt;
|
||||
use std::from_str::FromStr;
|
||||
use std::io::{BufferedStream, IoResult};
|
||||
use std::io::net::ip::Port;
|
||||
use std::mem;
|
||||
use std::result;
|
||||
use std::fmt;
|
||||
|
||||
use error::{InvalidUrl,
|
||||
MissingPassword,
|
||||
@ -149,11 +148,11 @@ pub mod types;
|
||||
static CANARY: u32 = 0xdeadbeef;
|
||||
|
||||
/// A typedef of the result returned by many methods.
|
||||
pub type Result<T> = result::Result<T, PostgresError>;
|
||||
pub type PostgresResult<T> = Result<T, PostgresError>;
|
||||
|
||||
/// Specifies the target server to connect to.
|
||||
#[deriving(Clone)]
|
||||
pub enum ConnectTarget {
|
||||
pub enum PostgresConnectTarget {
|
||||
/// Connect via TCP to the specified host.
|
||||
TargetTcp(String),
|
||||
/// Connect via a Unix domain socket in the specified directory.
|
||||
@ -162,7 +161,7 @@ pub enum ConnectTarget {
|
||||
|
||||
/// Authentication information
|
||||
#[deriving(Clone)]
|
||||
pub struct UserInfo {
|
||||
pub struct PostgresUserInfo {
|
||||
/// The username
|
||||
pub user: String,
|
||||
/// An optional password
|
||||
@ -171,37 +170,39 @@ pub struct UserInfo {
|
||||
|
||||
/// Information necessary to open a new connection to a Postgres server.
|
||||
#[deriving(Clone)]
|
||||
pub struct ConnectParams {
|
||||
pub struct PostgresConnectParams {
|
||||
/// The target server
|
||||
pub target: ConnectTarget,
|
||||
pub target: PostgresConnectTarget,
|
||||
/// The target port.
|
||||
///
|
||||
/// Defaults to 5432 if not specified.
|
||||
pub port: Option<Port>,
|
||||
/// The user to login as.
|
||||
///
|
||||
/// `Connection::connect` requires a user but `cancel_query` does not.
|
||||
pub user: Option<UserInfo>,
|
||||
/// `PostgresConnection::connect` requires a user but `cancel_query` does
|
||||
/// not.
|
||||
pub user: Option<PostgresUserInfo>,
|
||||
/// The database to connect to. Defaults the value of `user`.
|
||||
pub database: Option<String>,
|
||||
/// Runtime parameters to be passed to the Postgres backend.
|
||||
pub options: Vec<(String, String)>,
|
||||
}
|
||||
|
||||
/// A trait implemented by types that can be converted into a `ConnectParams`.
|
||||
/// A trait implemented by types that can be converted into a
|
||||
/// `PostgresConnectParams`.
|
||||
pub trait IntoConnectParams {
|
||||
/// Converts the value of `self` into a `ConnectParams`.
|
||||
fn into_connect_params(self) -> result::Result<ConnectParams, PostgresConnectError>;
|
||||
/// Converts the value of `self` into a `PostgresConnectParams`.
|
||||
fn into_connect_params(self) -> Result<PostgresConnectParams, PostgresConnectError>;
|
||||
}
|
||||
|
||||
impl IntoConnectParams for ConnectParams {
|
||||
fn into_connect_params(self) -> result::Result<ConnectParams, PostgresConnectError> {
|
||||
impl IntoConnectParams for PostgresConnectParams {
|
||||
fn into_connect_params(self) -> Result<PostgresConnectParams, PostgresConnectError> {
|
||||
Ok(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> IntoConnectParams for &'a str {
|
||||
fn into_connect_params(self) -> result::Result<ConnectParams, PostgresConnectError> {
|
||||
fn into_connect_params(self) -> Result<PostgresConnectParams, PostgresConnectError> {
|
||||
match Url::parse(self) {
|
||||
Ok(url) => url.into_connect_params(),
|
||||
Err(err) => return Err(InvalidUrl(err)),
|
||||
@ -210,7 +211,7 @@ impl<'a> IntoConnectParams for &'a str {
|
||||
}
|
||||
|
||||
impl IntoConnectParams for Url {
|
||||
fn into_connect_params(self) -> result::Result<ConnectParams, PostgresConnectError> {
|
||||
fn into_connect_params(self) -> Result<PostgresConnectParams, PostgresConnectError> {
|
||||
let Url {
|
||||
host,
|
||||
port,
|
||||
@ -230,7 +231,8 @@ impl IntoConnectParams for Url {
|
||||
};
|
||||
|
||||
let user = match user {
|
||||
Some(url::UserInfo { user, pass }) => Some(UserInfo { user: user, password: pass }),
|
||||
Some(UserInfo { user, pass }) =>
|
||||
Some(PostgresUserInfo { user: user, password: pass }),
|
||||
None => None,
|
||||
};
|
||||
|
||||
@ -242,7 +244,7 @@ impl IntoConnectParams for Url {
|
||||
None
|
||||
};
|
||||
|
||||
Ok(ConnectParams {
|
||||
Ok(PostgresConnectParams {
|
||||
target: target,
|
||||
port: port,
|
||||
user: user,
|
||||
@ -253,24 +255,24 @@ impl IntoConnectParams for Url {
|
||||
}
|
||||
|
||||
/// Trait for types that can handle Postgres notice messages
|
||||
pub trait NoticeHandler {
|
||||
pub trait PostgresNoticeHandler {
|
||||
/// Handle a Postgres notice message
|
||||
fn handle(&mut self, notice: PostgresDbError);
|
||||
}
|
||||
|
||||
/// A notice handler which logs at the `info` level.
|
||||
///
|
||||
/// This is the default handler used by a `Connection`.
|
||||
/// This is the default handler used by a `PostgresConnection`.
|
||||
pub struct DefaultNoticeHandler;
|
||||
|
||||
impl NoticeHandler for DefaultNoticeHandler {
|
||||
impl PostgresNoticeHandler for DefaultNoticeHandler {
|
||||
fn handle(&mut self, notice: PostgresDbError) {
|
||||
info!("{}: {}", notice.severity, notice.message);
|
||||
}
|
||||
}
|
||||
|
||||
/// An asynchronous notification
|
||||
pub struct Notification {
|
||||
pub struct PostgresNotification {
|
||||
/// The process ID of the notifying backend process
|
||||
pub pid: u32,
|
||||
/// The name of the channel that the notify has been raised on
|
||||
@ -280,24 +282,24 @@ pub struct Notification {
|
||||
}
|
||||
|
||||
/// An iterator over asynchronous notifications
|
||||
pub struct Notifications<'conn> {
|
||||
conn: &'conn Connection
|
||||
pub struct PostgresNotifications<'conn> {
|
||||
conn: &'conn PostgresConnection
|
||||
}
|
||||
|
||||
impl<'conn> Iterator<Notification> for Notifications<'conn> {
|
||||
impl<'conn> Iterator<PostgresNotification> for PostgresNotifications<'conn> {
|
||||
/// Returns the oldest pending notification or `None` if there are none.
|
||||
///
|
||||
/// ## Note
|
||||
///
|
||||
/// `next` may return `Some` notification after returning `None` if a new
|
||||
/// notification was received.
|
||||
fn next(&mut self) -> Option<Notification> {
|
||||
fn next(&mut self) -> Option<PostgresNotification> {
|
||||
self.conn.conn.borrow_mut().notifications.pop_front()
|
||||
}
|
||||
}
|
||||
|
||||
/// Contains information necessary to cancel queries for a session
|
||||
pub struct CancelData {
|
||||
pub struct PostgresCancelData {
|
||||
/// The process ID of the session
|
||||
pub process_id: u32,
|
||||
/// The secret key for the session
|
||||
@ -310,18 +312,19 @@ pub struct CancelData {
|
||||
/// was successful or not. An error will only be returned if the driver was
|
||||
/// unable to connect to the database.
|
||||
///
|
||||
/// A `CancelData` object can be created via `Connection::cancel_data`. The
|
||||
/// object can cancel any query made on that connection.
|
||||
/// A `PostgresCancelData` object can be created via
|
||||
/// `PostgresConnection::cancel_data`. The object can cancel any query made on
|
||||
/// that connection.
|
||||
///
|
||||
/// Only the host and port of the connetion info are used. See
|
||||
/// `Connection::connect` for details of the `params` argument.
|
||||
/// `PostgresConnection::connect` for details of the `params` argument.
|
||||
///
|
||||
/// ## Example
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use postgres::NoSsl;
|
||||
/// # use postgres::{PostgresConnection, NoSsl};
|
||||
/// # let url = "";
|
||||
/// let conn = postgres::Connection::connect(url, &NoSsl).unwrap();
|
||||
/// let conn = PostgresConnection::connect(url, &NoSsl).unwrap();
|
||||
/// let cancel_data = conn.cancel_data();
|
||||
/// spawn(proc() {
|
||||
/// conn.execute("SOME EXPENSIVE QUERY", []).unwrap();
|
||||
@ -329,8 +332,8 @@ pub struct CancelData {
|
||||
/// # let _ =
|
||||
/// postgres::cancel_query(url, &NoSsl, cancel_data);
|
||||
/// ```
|
||||
pub fn cancel_query<T>(params: T, ssl: &SslMode, data: CancelData)
|
||||
-> result::Result<(), PostgresConnectError> where T: IntoConnectParams {
|
||||
pub fn cancel_query<T>(params: T, ssl: &SslMode, data: PostgresCancelData)
|
||||
-> Result<(), PostgresConnectError> where T: IntoConnectParams {
|
||||
let params = try!(params.into_connect_params());
|
||||
|
||||
let mut socket = match io::initialize_stream(¶ms, ssl) {
|
||||
@ -348,12 +351,12 @@ pub fn cancel_query<T>(params: T, ssl: &SslMode, data: CancelData)
|
||||
Ok(())
|
||||
}
|
||||
|
||||
struct InnerConnection {
|
||||
struct InnerPostgresConnection {
|
||||
stream: BufferedStream<MaybeSslStream<InternalStream>>,
|
||||
next_stmt_id: uint,
|
||||
notice_handler: Box<NoticeHandler+Send>,
|
||||
notifications: RingBuf<Notification>,
|
||||
cancel_data: CancelData,
|
||||
notice_handler: Box<PostgresNoticeHandler+Send>,
|
||||
notifications: RingBuf<PostgresNotification>,
|
||||
cancel_data: PostgresCancelData,
|
||||
unknown_types: HashMap<Oid, String>,
|
||||
desynchronized: bool,
|
||||
finished: bool,
|
||||
@ -361,7 +364,7 @@ struct InnerConnection {
|
||||
canary: u32,
|
||||
}
|
||||
|
||||
impl Drop for InnerConnection {
|
||||
impl Drop for InnerPostgresConnection {
|
||||
fn drop(&mut self) {
|
||||
if !self.finished {
|
||||
let _ = self.finish_inner();
|
||||
@ -369,14 +372,14 @@ impl Drop for InnerConnection {
|
||||
}
|
||||
}
|
||||
|
||||
impl InnerConnection {
|
||||
impl InnerPostgresConnection {
|
||||
fn connect<T>(params: T, ssl: &SslMode)
|
||||
-> result::Result<InnerConnection, PostgresConnectError>
|
||||
-> Result<InnerPostgresConnection, PostgresConnectError>
|
||||
where T: IntoConnectParams {
|
||||
let params = try!(params.into_connect_params());
|
||||
let stream = try!(io::initialize_stream(¶ms, ssl));
|
||||
|
||||
let ConnectParams {
|
||||
let PostgresConnectParams {
|
||||
user,
|
||||
database,
|
||||
mut options,
|
||||
@ -388,12 +391,12 @@ impl InnerConnection {
|
||||
None => return Err(MissingUser),
|
||||
};
|
||||
|
||||
let mut conn = InnerConnection {
|
||||
let mut conn = InnerPostgresConnection {
|
||||
stream: BufferedStream::new(stream),
|
||||
next_stmt_id: 0,
|
||||
notice_handler: box DefaultNoticeHandler,
|
||||
notifications: RingBuf::new(),
|
||||
cancel_data: CancelData { process_id: 0, secret_key: 0 },
|
||||
cancel_data: PostgresCancelData { process_id: 0, secret_key: 0 },
|
||||
unknown_types: HashMap::new(),
|
||||
desynchronized: false,
|
||||
finished: false,
|
||||
@ -452,7 +455,7 @@ impl InnerConnection {
|
||||
self.notice_handler.handle(PostgresDbError::new(fields))
|
||||
}
|
||||
NotificationResponse { pid, channel, payload } => {
|
||||
self.notifications.push(Notification {
|
||||
self.notifications.push(PostgresNotification {
|
||||
pid: pid,
|
||||
channel: channel,
|
||||
payload: payload
|
||||
@ -466,7 +469,7 @@ impl InnerConnection {
|
||||
}
|
||||
}
|
||||
|
||||
fn handle_auth(&mut self, user: UserInfo) -> result::Result<(), PostgresConnectError> {
|
||||
fn handle_auth(&mut self, user: PostgresUserInfo) -> Result<(), PostgresConnectError> {
|
||||
match try_pg_conn!(self.read_message()) {
|
||||
AuthenticationOk => return Ok(()),
|
||||
AuthenticationCleartextPassword => {
|
||||
@ -517,13 +520,13 @@ impl InnerConnection {
|
||||
}
|
||||
}
|
||||
|
||||
fn set_notice_handler(&mut self, handler: Box<NoticeHandler+Send>)
|
||||
-> Box<NoticeHandler+Send> {
|
||||
fn set_notice_handler(&mut self, handler: Box<PostgresNoticeHandler+Send>)
|
||||
-> Box<PostgresNoticeHandler+Send> {
|
||||
mem::replace(&mut self.notice_handler, handler)
|
||||
}
|
||||
|
||||
fn prepare<'a>(&mut self, query: &str, conn: &'a Connection)
|
||||
-> Result<Statement<'a>> {
|
||||
fn prepare<'a>(&mut self, query: &str, conn: &'a PostgresConnection)
|
||||
-> PostgresResult<PostgresStatement<'a>> {
|
||||
let stmt_name = format!("s{}", self.next_stmt_id);
|
||||
self.next_stmt_id += 1;
|
||||
|
||||
@ -575,7 +578,7 @@ impl InnerConnection {
|
||||
try!(self.set_type_names(param_types.mut_iter()));
|
||||
try!(self.set_type_names(result_desc.mut_iter().map(|d| &mut d.ty)));
|
||||
|
||||
Ok(Statement {
|
||||
Ok(PostgresStatement {
|
||||
conn: conn,
|
||||
name: stmt_name,
|
||||
param_types: param_types,
|
||||
@ -586,7 +589,7 @@ impl InnerConnection {
|
||||
}
|
||||
|
||||
fn set_type_names<'a, I: Iterator<&'a mut PostgresType>>(&mut self, mut it: I)
|
||||
-> Result<()> {
|
||||
-> PostgresResult<()> {
|
||||
for ty in it {
|
||||
match *ty {
|
||||
PgUnknownType { oid, ref mut name } => *name = try!(self.get_type_name(oid)),
|
||||
@ -597,7 +600,7 @@ impl InnerConnection {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_type_name(&mut self, oid: Oid) -> Result<String> {
|
||||
fn get_type_name(&mut self, oid: Oid) -> PostgresResult<String> {
|
||||
match self.unknown_types.find(&oid) {
|
||||
Some(name) => return Ok(name.clone()),
|
||||
None => {}
|
||||
@ -617,7 +620,7 @@ impl InnerConnection {
|
||||
self.canary
|
||||
}
|
||||
|
||||
fn wait_for_ready(&mut self) -> Result<()> {
|
||||
fn wait_for_ready(&mut self) -> PostgresResult<()> {
|
||||
match try_pg!(self.read_message()) {
|
||||
ReadyForQuery { .. } => Ok(()),
|
||||
_ => bad_response!(self)
|
||||
@ -625,7 +628,7 @@ impl InnerConnection {
|
||||
}
|
||||
|
||||
fn quick_query(&mut self, query: &str)
|
||||
-> Result<Vec<Vec<Option<String>>>> {
|
||||
-> PostgresResult<Vec<Vec<Option<String>>>> {
|
||||
check_desync!(self);
|
||||
try_pg!(self.write_messages([Query { query: query }]));
|
||||
|
||||
@ -648,7 +651,7 @@ impl InnerConnection {
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn finish_inner(&mut self) -> Result<()> {
|
||||
fn finish_inner(&mut self) -> PostgresResult<()> {
|
||||
check_desync!(self);
|
||||
self.canary = 0;
|
||||
try_pg!(self.write_messages([Terminate]));
|
||||
@ -657,11 +660,11 @@ impl InnerConnection {
|
||||
}
|
||||
|
||||
/// A connection to a Postgres database.
|
||||
pub struct Connection {
|
||||
conn: RefCell<InnerConnection>
|
||||
pub struct PostgresConnection {
|
||||
conn: RefCell<InnerPostgresConnection>
|
||||
}
|
||||
|
||||
impl Connection {
|
||||
impl PostgresConnection {
|
||||
/// Creates a new connection to a Postgres database.
|
||||
///
|
||||
/// Most applications can use a URL string in the normal format:
|
||||
@ -677,16 +680,16 @@ impl Connection {
|
||||
/// To connect to the server via Unix sockets, `host` should be set to the
|
||||
/// absolute path of the directory containing the socket file. Since `/` is
|
||||
/// a reserved character in URLs, the path should be URL encoded. If the
|
||||
/// path contains non-UTF 8 characters, a `ConnectParams` struct should be
|
||||
/// created manually and passed in. Note that Postgres does not support SSL
|
||||
/// over Unix sockets.
|
||||
/// path contains non-UTF 8 characters, a `PostgresConnectParams` struct
|
||||
/// should be created manually and passed in. Note that Postgres does not
|
||||
/// support SSL over Unix sockets.
|
||||
///
|
||||
/// ## Examples
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use postgres::NoSsl;
|
||||
/// # use postgres::{PostgresConnection, NoSsl};
|
||||
/// let url = "postgresql://postgres:hunter2@localhost:2994/foodb";
|
||||
/// let maybe_conn = postgres::Connection::connect(url, &NoSsl);
|
||||
/// let maybe_conn = PostgresConnection::connect(url, &NoSsl);
|
||||
/// let conn = match maybe_conn {
|
||||
/// Ok(conn) => conn,
|
||||
/// Err(err) => fail!("Error connecting: {}", err)
|
||||
@ -694,42 +697,46 @@ impl Connection {
|
||||
/// ```
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use postgres::NoSsl;
|
||||
/// # use postgres::{PostgresConnection, NoSsl};
|
||||
/// let url = "postgresql://postgres@%2Frun%2Fpostgres";
|
||||
/// let maybe_conn = postgres::Connection::connect(url, &NoSsl);
|
||||
/// let maybe_conn = PostgresConnection::connect(url, &NoSsl);
|
||||
/// ```
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use postgres::{NoSsl, TargetUnix};
|
||||
/// # use postgres::{PostgresConnection, PostgresUserInfo, PostgresConnectParams, NoSsl, TargetUnix};
|
||||
/// # let some_crazy_path = Path::new("");
|
||||
/// let params = postgres::ConnectParams {
|
||||
/// let params = PostgresConnectParams {
|
||||
/// target: TargetUnix(some_crazy_path),
|
||||
/// port: None,
|
||||
/// user: Some(postgres::UserInfo {
|
||||
/// user: Some(PostgresUserInfo {
|
||||
/// user: "postgres".to_string(),
|
||||
/// password: None
|
||||
/// }),
|
||||
/// database: None,
|
||||
/// options: vec![],
|
||||
/// };
|
||||
/// let maybe_conn = postgres::Connection::connect(params, &NoSsl);
|
||||
/// let maybe_conn = PostgresConnection::connect(params, &NoSsl);
|
||||
/// ```
|
||||
pub fn connect<T>(params: T, ssl: &SslMode) -> result::Result<Connection, PostgresConnectError>
|
||||
pub fn connect<T>(params: T, ssl: &SslMode) -> Result<PostgresConnection, PostgresConnectError>
|
||||
where T: IntoConnectParams {
|
||||
InnerConnection::connect(params, ssl).map(|conn| Connection { conn: RefCell::new(conn) })
|
||||
InnerPostgresConnection::connect(params, ssl).map(|conn| {
|
||||
PostgresConnection { conn: RefCell::new(conn) }
|
||||
})
|
||||
}
|
||||
|
||||
/// Sets the notice handler for the connection, returning the old handler.
|
||||
pub fn set_notice_handler(&self, handler: Box<NoticeHandler+Send>)
|
||||
-> Box<NoticeHandler+Send> {
|
||||
pub fn set_notice_handler(&self, handler: Box<PostgresNoticeHandler+Send>)
|
||||
-> Box<PostgresNoticeHandler+Send> {
|
||||
self.conn.borrow_mut().set_notice_handler(handler)
|
||||
}
|
||||
|
||||
/// Returns an iterator over asynchronous notification messages.
|
||||
///
|
||||
/// Use the `LISTEN` command to register this connection for notifications.
|
||||
pub fn notifications<'a>(&'a self) -> Notifications<'a> {
|
||||
Notifications { conn: self }
|
||||
pub fn notifications<'a>(&'a self) -> PostgresNotifications<'a> {
|
||||
PostgresNotifications {
|
||||
conn: self
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates a new prepared statement.
|
||||
@ -744,14 +751,14 @@ impl Connection {
|
||||
/// ## Example
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use postgres::NoSsl;
|
||||
/// # let conn = postgres::Connection::connect("", &NoSsl).unwrap();
|
||||
/// # use postgres::{PostgresConnection, NoSsl};
|
||||
/// # let conn = PostgresConnection::connect("", &NoSsl).unwrap();
|
||||
/// let maybe_stmt = conn.prepare("SELECT foo FROM bar WHERE baz = $1");
|
||||
/// let stmt = match maybe_stmt {
|
||||
/// Ok(stmt) => stmt,
|
||||
/// Err(err) => fail!("Error preparing statement: {}", err)
|
||||
/// };
|
||||
pub fn prepare<'a>(&'a self, query: &str) -> Result<Statement<'a>> {
|
||||
pub fn prepare<'a>(&'a self, query: &str) -> PostgresResult<PostgresStatement<'a>> {
|
||||
let mut conn = self.conn.borrow_mut();
|
||||
if conn.trans_depth != 0 {
|
||||
return Err(PgWrongTransaction);
|
||||
@ -772,9 +779,9 @@ impl Connection {
|
||||
/// ## Example
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use postgres::NoSsl;
|
||||
/// # use postgres::{PostgresConnection, NoSsl};
|
||||
/// # fn foo() -> Result<(), postgres::error::PostgresError> {
|
||||
/// # let conn = postgres::Connection::connect("", &NoSsl).unwrap();
|
||||
/// # let conn = PostgresConnection::connect("", &NoSsl).unwrap();
|
||||
/// let trans = try!(conn.transaction());
|
||||
/// try!(trans.execute("UPDATE foo SET bar = 10", []));
|
||||
/// // ...
|
||||
@ -784,7 +791,7 @@ impl Connection {
|
||||
/// # Ok(())
|
||||
/// # }
|
||||
/// ```
|
||||
pub fn transaction<'a>(&'a self) -> Result<PostgresTransaction<'a>> {
|
||||
pub fn transaction<'a>(&'a self) -> PostgresResult<PostgresTransaction<'a>> {
|
||||
check_desync!(self);
|
||||
if self.conn.borrow().trans_depth != 0 {
|
||||
return Err(PgWrongTransaction);
|
||||
@ -805,7 +812,7 @@ impl Connection {
|
||||
/// or execution of the statement.
|
||||
///
|
||||
/// On success, returns the number of rows modified or 0 if not applicable.
|
||||
pub fn execute(&self, query: &str, params: &[&ToSql]) -> Result<uint> {
|
||||
pub fn execute(&self, query: &str, params: &[&ToSql]) -> PostgresResult<uint> {
|
||||
self.prepare(query).and_then(|stmt| stmt.execute(params))
|
||||
}
|
||||
|
||||
@ -826,8 +833,8 @@ impl Connection {
|
||||
/// ## Example
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use postgres::Result;
|
||||
/// fn init_db(conn: &postgres::Connection) -> Result<()> {
|
||||
/// # use postgres::{PostgresConnection, PostgresResult};
|
||||
/// fn init_db(conn: &PostgresConnection) -> PostgresResult<()> {
|
||||
/// conn.batch_execute("
|
||||
/// CREATE TABLE person (
|
||||
/// id SERIAL PRIMARY KEY,
|
||||
@ -844,7 +851,7 @@ impl Connection {
|
||||
/// ")
|
||||
/// }
|
||||
/// ```
|
||||
pub fn batch_execute(&self, query: &str) -> Result<()> {
|
||||
pub fn batch_execute(&self, query: &str) -> PostgresResult<()> {
|
||||
let mut conn = self.conn.borrow_mut();
|
||||
if conn.trans_depth != 0 {
|
||||
return Err(PgWrongTransaction);
|
||||
@ -856,7 +863,7 @@ impl Connection {
|
||||
///
|
||||
/// Used with the `cancel_query` function. The object returned can be used
|
||||
/// to cancel any query executed by the connection it was created from.
|
||||
pub fn cancel_data(&self) -> CancelData {
|
||||
pub fn cancel_data(&self) -> PostgresCancelData {
|
||||
self.conn.borrow().cancel_data
|
||||
}
|
||||
|
||||
@ -871,9 +878,10 @@ impl Connection {
|
||||
|
||||
/// Consumes the connection, closing it.
|
||||
///
|
||||
/// Functionally equivalent to the `Drop` implementation for `Connection`
|
||||
/// except that it returns any error encountered to the caller.
|
||||
pub fn finish(self) -> Result<()> {
|
||||
/// Functionally equivalent to the `Drop` implementation for
|
||||
/// `PostgresConnection` except that it returns any error encountered to
|
||||
/// the caller.
|
||||
pub fn finish(self) -> PostgresResult<()> {
|
||||
let mut conn = self.conn.borrow_mut();
|
||||
conn.finished = true;
|
||||
conn.finish_inner()
|
||||
@ -883,11 +891,11 @@ impl Connection {
|
||||
self.conn.borrow().canary()
|
||||
}
|
||||
|
||||
fn quick_query(&self, query: &str) -> Result<Vec<Vec<Option<String>>>> {
|
||||
fn quick_query(&self, query: &str) -> PostgresResult<Vec<Vec<Option<String>>>> {
|
||||
self.conn.borrow_mut().quick_query(query)
|
||||
}
|
||||
|
||||
fn wait_for_ready(&self) -> Result<()> {
|
||||
fn wait_for_ready(&self) -> PostgresResult<()> {
|
||||
self.conn.borrow_mut().wait_for_ready()
|
||||
}
|
||||
|
||||
@ -914,7 +922,7 @@ pub enum SslMode {
|
||||
///
|
||||
/// The transaction will roll back by default.
|
||||
pub struct PostgresTransaction<'conn> {
|
||||
conn: &'conn Connection,
|
||||
conn: &'conn PostgresConnection,
|
||||
commit: Cell<bool>,
|
||||
depth: u32,
|
||||
finished: bool,
|
||||
@ -930,7 +938,7 @@ impl<'conn> Drop for PostgresTransaction<'conn> {
|
||||
}
|
||||
|
||||
impl<'conn> PostgresTransaction<'conn> {
|
||||
fn finish_inner(&mut self) -> Result<()> {
|
||||
fn finish_inner(&mut self) -> PostgresResult<()> {
|
||||
debug_assert!(self.depth == self.conn.conn.borrow().trans_depth);
|
||||
let query = match (self.commit.get(), self.depth != 1) {
|
||||
(false, true) => "ROLLBACK TO sp",
|
||||
@ -942,21 +950,21 @@ impl<'conn> PostgresTransaction<'conn> {
|
||||
self.conn.quick_query(query).map(|_| ())
|
||||
}
|
||||
|
||||
/// Like `Connection::prepare`.
|
||||
pub fn prepare<'a>(&'a self, query: &str) -> Result<Statement<'a>> {
|
||||
/// Like `PostgresConnection::prepare`.
|
||||
pub fn prepare<'a>(&'a self, query: &str) -> PostgresResult<PostgresStatement<'a>> {
|
||||
if self.conn.conn.borrow().trans_depth != self.depth {
|
||||
return Err(PgWrongTransaction);
|
||||
}
|
||||
self.conn.conn.borrow_mut().prepare(query, self.conn)
|
||||
}
|
||||
|
||||
/// Like `Connection::execute`.
|
||||
pub fn execute(&self, query: &str, params: &[&ToSql]) -> Result<uint> {
|
||||
/// Like `PostgresConnection::execute`.
|
||||
pub fn execute(&self, query: &str, params: &[&ToSql]) -> PostgresResult<uint> {
|
||||
self.prepare(query).and_then(|s| s.execute(params))
|
||||
}
|
||||
|
||||
/// Like `Connection::batch_execute`.
|
||||
pub fn batch_execute(&self, query: &str) -> Result<()> {
|
||||
/// Like `PostgresConnection::batch_execute`.
|
||||
pub fn batch_execute(&self, query: &str) -> PostgresResult<()> {
|
||||
let mut conn = self.conn.conn.borrow_mut();
|
||||
if conn.trans_depth != self.depth {
|
||||
return Err(PgWrongTransaction);
|
||||
@ -964,8 +972,8 @@ impl<'conn> PostgresTransaction<'conn> {
|
||||
conn.quick_query(query).map(|_| ())
|
||||
}
|
||||
|
||||
/// Like `Connection::transaction`.
|
||||
pub fn transaction<'a>(&'a self) -> Result<PostgresTransaction<'a>> {
|
||||
/// Like `PostgresConnection::transaction`.
|
||||
pub fn transaction<'a>(&'a self) -> PostgresResult<PostgresTransaction<'a>> {
|
||||
check_desync!(self.conn);
|
||||
if self.conn.conn.borrow().trans_depth != self.depth {
|
||||
return Err(PgWrongTransaction);
|
||||
@ -988,16 +996,16 @@ impl<'conn> PostgresTransaction<'conn> {
|
||||
/// If `row_limit` is less than or equal to 0, `lazy_query` is equivalent
|
||||
/// to `query`.
|
||||
pub fn lazy_query<'trans, 'stmt>(&'trans self,
|
||||
stmt: &'stmt Statement,
|
||||
stmt: &'stmt PostgresStatement,
|
||||
params: &[&ToSql],
|
||||
row_limit: i32)
|
||||
-> Result<LazyRows<'trans, 'stmt>> {
|
||||
-> PostgresResult<PostgresLazyRows<'trans, 'stmt>> {
|
||||
if self.conn as *const _ != stmt.conn as *const _ {
|
||||
return Err(PgWrongConnection);
|
||||
}
|
||||
check_desync!(self.conn);
|
||||
stmt.lazy_query(row_limit, params).map(|result| {
|
||||
LazyRows {
|
||||
PostgresLazyRows {
|
||||
_trans: self,
|
||||
result: result
|
||||
}
|
||||
@ -1020,7 +1028,7 @@ impl<'conn> PostgresTransaction<'conn> {
|
||||
}
|
||||
|
||||
/// A convenience method which consumes and commits a transaction.
|
||||
pub fn commit(self) -> Result<()> {
|
||||
pub fn commit(self) -> PostgresResult<()> {
|
||||
self.set_commit();
|
||||
self.finish()
|
||||
}
|
||||
@ -1029,15 +1037,15 @@ impl<'conn> PostgresTransaction<'conn> {
|
||||
///
|
||||
/// Functionally equivalent to the `Drop` implementation of
|
||||
/// `PostgresTransaction` except that it returns any error to the caller.
|
||||
pub fn finish(mut self) -> Result<()> {
|
||||
pub fn finish(mut self) -> PostgresResult<()> {
|
||||
self.finished = true;
|
||||
self.finish_inner()
|
||||
}
|
||||
}
|
||||
|
||||
/// A prepared statement
|
||||
pub struct Statement<'conn> {
|
||||
conn: &'conn Connection,
|
||||
pub struct PostgresStatement<'conn> {
|
||||
conn: &'conn PostgresConnection,
|
||||
name: String,
|
||||
param_types: Vec<PostgresType>,
|
||||
result_desc: Vec<ResultDescription>,
|
||||
@ -1046,7 +1054,7 @@ pub struct Statement<'conn> {
|
||||
}
|
||||
|
||||
#[unsafe_destructor]
|
||||
impl<'conn> Drop for Statement<'conn> {
|
||||
impl<'conn> Drop for PostgresStatement<'conn> {
|
||||
fn drop(&mut self) {
|
||||
if !self.finished {
|
||||
let _ = self.finish_inner();
|
||||
@ -1054,8 +1062,8 @@ impl<'conn> Drop for Statement<'conn> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'conn> Statement<'conn> {
|
||||
fn finish_inner(&mut self) -> Result<()> {
|
||||
impl<'conn> PostgresStatement<'conn> {
|
||||
fn finish_inner(&mut self) -> PostgresResult<()> {
|
||||
check_desync!(self.conn);
|
||||
try_pg!(self.conn.write_messages([
|
||||
Close {
|
||||
@ -1077,7 +1085,7 @@ impl<'conn> Statement<'conn> {
|
||||
}
|
||||
|
||||
fn inner_execute(&self, portal_name: &str, row_limit: i32, params: &[&ToSql])
|
||||
-> Result<()> {
|
||||
-> PostgresResult<()> {
|
||||
if self.param_types.len() != params.len() {
|
||||
return Err(PgWrongParamCount {
|
||||
expected: self.param_types.len(),
|
||||
@ -1122,14 +1130,14 @@ impl<'conn> Statement<'conn> {
|
||||
}
|
||||
|
||||
fn lazy_query<'a>(&'a self, row_limit: i32, params: &[&ToSql])
|
||||
-> Result<Rows<'a>> {
|
||||
-> PostgresResult<PostgresRows<'a>> {
|
||||
let id = self.next_portal_id.get();
|
||||
self.next_portal_id.set(id + 1);
|
||||
let portal_name = format!("{}p{}", self.name, id);
|
||||
|
||||
try!(self.inner_execute(portal_name.as_slice(), row_limit, params));
|
||||
|
||||
let mut result = Rows {
|
||||
let mut result = PostgresRows {
|
||||
stmt: self,
|
||||
name: portal_name,
|
||||
data: RingBuf::new(),
|
||||
@ -1159,8 +1167,8 @@ impl<'conn> Statement<'conn> {
|
||||
/// ## Example
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use postgres::NoSsl;
|
||||
/// # let conn = postgres::Connection::connect("", &NoSsl).unwrap();
|
||||
/// # use postgres::{PostgresConnection, NoSsl};
|
||||
/// # let conn = PostgresConnection::connect("", &NoSsl).unwrap();
|
||||
/// # let bar = 1i32;
|
||||
/// # let baz = true;
|
||||
/// let stmt = conn.prepare("UPDATE foo SET bar = $1 WHERE baz = $2").unwrap();
|
||||
@ -1168,7 +1176,7 @@ impl<'conn> Statement<'conn> {
|
||||
/// Ok(count) => println!("{} row(s) updated", count),
|
||||
/// Err(err) => println!("Error executing query: {}", err)
|
||||
/// }
|
||||
pub fn execute(&self, params: &[&ToSql]) -> Result<uint> {
|
||||
pub fn execute(&self, params: &[&ToSql]) -> PostgresResult<uint> {
|
||||
check_desync!(self.conn);
|
||||
try!(self.inner_execute("", 0, params));
|
||||
|
||||
@ -1206,8 +1214,8 @@ impl<'conn> Statement<'conn> {
|
||||
/// ## Example
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use postgres::NoSsl;
|
||||
/// # let conn = postgres::Connection::connect("", &NoSsl).unwrap();
|
||||
/// # use postgres::{PostgresConnection, NoSsl};
|
||||
/// # let conn = PostgresConnection::connect("", &NoSsl).unwrap();
|
||||
/// let stmt = conn.prepare("SELECT foo FROM bar WHERE baz = $1").unwrap();
|
||||
/// # let baz = true;
|
||||
/// let mut rows = match stmt.query([&baz]) {
|
||||
@ -1219,16 +1227,16 @@ impl<'conn> Statement<'conn> {
|
||||
/// println!("foo: {}", foo);
|
||||
/// }
|
||||
/// ```
|
||||
pub fn query<'a>(&'a self, params: &[&ToSql]) -> Result<Rows<'a>> {
|
||||
pub fn query<'a>(&'a self, params: &[&ToSql]) -> PostgresResult<PostgresRows<'a>> {
|
||||
check_desync!(self.conn);
|
||||
self.lazy_query(0, params)
|
||||
}
|
||||
|
||||
/// Consumes the statement, clearing it from the Postgres session.
|
||||
///
|
||||
/// Functionally identical to the `Drop` implementation of the `Statement`
|
||||
/// except that it returns any error to the caller.
|
||||
pub fn finish(mut self) -> Result<()> {
|
||||
/// Functionally identical to the `Drop` implementation of the
|
||||
/// `PostgresStatement` except that it returns any error to the caller.
|
||||
pub fn finish(mut self) -> PostgresResult<()> {
|
||||
self.finished = true;
|
||||
self.finish_inner()
|
||||
}
|
||||
@ -1244,8 +1252,8 @@ pub struct ResultDescription {
|
||||
}
|
||||
|
||||
/// An iterator over the resulting rows of a query.
|
||||
pub struct Rows<'stmt> {
|
||||
stmt: &'stmt Statement<'stmt>,
|
||||
pub struct PostgresRows<'stmt> {
|
||||
stmt: &'stmt PostgresStatement<'stmt>,
|
||||
name: String,
|
||||
data: RingBuf<Vec<Option<Vec<u8>>>>,
|
||||
row_limit: i32,
|
||||
@ -1254,7 +1262,7 @@ pub struct Rows<'stmt> {
|
||||
}
|
||||
|
||||
#[unsafe_destructor]
|
||||
impl<'stmt> Drop for Rows<'stmt> {
|
||||
impl<'stmt> Drop for PostgresRows<'stmt> {
|
||||
fn drop(&mut self) {
|
||||
if !self.finished {
|
||||
let _ = self.finish_inner();
|
||||
@ -1262,8 +1270,8 @@ impl<'stmt> Drop for Rows<'stmt> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'stmt> Rows<'stmt> {
|
||||
fn finish_inner(&mut self) -> Result<()> {
|
||||
impl<'stmt> PostgresRows<'stmt> {
|
||||
fn finish_inner(&mut self) -> PostgresResult<()> {
|
||||
check_desync!(self.stmt.conn);
|
||||
try_pg!(self.stmt.conn.write_messages([
|
||||
Close {
|
||||
@ -1284,7 +1292,7 @@ impl<'stmt> Rows<'stmt> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn read_rows(&mut self) -> Result<()> {
|
||||
fn read_rows(&mut self) -> PostgresResult<()> {
|
||||
loop {
|
||||
match try_pg!(self.stmt.conn.read_message()) {
|
||||
EmptyQueryResponse | CommandComplete { .. } => {
|
||||
@ -1309,7 +1317,7 @@ impl<'stmt> Rows<'stmt> {
|
||||
self.stmt.conn.wait_for_ready()
|
||||
}
|
||||
|
||||
fn execute(&mut self) -> Result<()> {
|
||||
fn execute(&mut self) -> PostgresResult<()> {
|
||||
try_pg!(self.stmt.conn.write_messages([
|
||||
Execute {
|
||||
portal: self.name.as_slice(),
|
||||
@ -1319,16 +1327,16 @@ impl<'stmt> Rows<'stmt> {
|
||||
self.read_rows()
|
||||
}
|
||||
|
||||
/// Consumes the `Rows`, cleaning up associated state.
|
||||
/// Consumes the `PostgresRows`, cleaning up associated state.
|
||||
///
|
||||
/// Functionally identical to the `Drop` implementation on `Rows` except
|
||||
/// that it returns any error to the caller.
|
||||
pub fn finish(mut self) -> Result<()> {
|
||||
/// Functionally identical to the `Drop` implementation on `PostgresRows`
|
||||
/// except that it returns any error to the caller.
|
||||
pub fn finish(mut self) -> PostgresResult<()> {
|
||||
self.finished = true;
|
||||
self.finish_inner()
|
||||
}
|
||||
|
||||
fn try_next(&mut self) -> Option<Result<Row<'stmt>>> {
|
||||
fn try_next(&mut self) -> Option<PostgresResult<PostgresRow<'stmt>>> {
|
||||
if self.data.is_empty() && self.more_rows {
|
||||
match self.execute() {
|
||||
Ok(()) => {}
|
||||
@ -1337,7 +1345,7 @@ impl<'stmt> Rows<'stmt> {
|
||||
}
|
||||
|
||||
self.data.pop_front().map(|row| {
|
||||
Ok(Row {
|
||||
Ok(PostgresRow {
|
||||
stmt: self.stmt,
|
||||
data: row
|
||||
})
|
||||
@ -1345,9 +1353,9 @@ impl<'stmt> Rows<'stmt> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'stmt> Iterator<Row<'stmt>> for Rows<'stmt> {
|
||||
impl<'stmt> Iterator<PostgresRow<'stmt>> for PostgresRows<'stmt> {
|
||||
#[inline]
|
||||
fn next(&mut self) -> Option<Row<'stmt>> {
|
||||
fn next(&mut self) -> Option<PostgresRow<'stmt>> {
|
||||
// we'll never hit the network on a non-lazy result
|
||||
self.try_next().map(|r| r.unwrap())
|
||||
}
|
||||
@ -1365,12 +1373,12 @@ impl<'stmt> Iterator<Row<'stmt>> for Rows<'stmt> {
|
||||
}
|
||||
|
||||
/// A single result row of a query.
|
||||
pub struct Row<'stmt> {
|
||||
stmt: &'stmt Statement<'stmt>,
|
||||
pub struct PostgresRow<'stmt> {
|
||||
stmt: &'stmt PostgresStatement<'stmt>,
|
||||
data: Vec<Option<Vec<u8>>>
|
||||
}
|
||||
|
||||
impl<'stmt> Row<'stmt> {
|
||||
impl<'stmt> PostgresRow<'stmt> {
|
||||
/// Retrieves the contents of a field of the row.
|
||||
///
|
||||
/// A field can be accessed by the name or index of its column, though
|
||||
@ -1378,7 +1386,7 @@ impl<'stmt> Row<'stmt> {
|
||||
///
|
||||
/// Returns an `Error` value if the index does not reference a column or
|
||||
/// the return type is not compatible with the Postgres type.
|
||||
pub fn get_opt<I, T>(&self, idx: I) -> Result<T> where I: RowIndex, T: FromSql {
|
||||
pub fn get_opt<I, T>(&self, idx: I) -> PostgresResult<T> where I: RowIndex, T: FromSql {
|
||||
let idx = match idx.idx(self.stmt) {
|
||||
Some(idx) => idx,
|
||||
None => return Err(PgInvalidColumn)
|
||||
@ -1399,8 +1407,8 @@ impl<'stmt> Row<'stmt> {
|
||||
/// ## Example
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use postgres::NoSsl;
|
||||
/// # let conn = postgres::Connection::connect("", &NoSsl).unwrap();
|
||||
/// # use postgres::{PostgresConnection, NoSsl};
|
||||
/// # let conn = PostgresConnection::connect("", &NoSsl).unwrap();
|
||||
/// # let stmt = conn.prepare("").unwrap();
|
||||
/// # let mut result = stmt.query([]).unwrap();
|
||||
/// # let row = result.next().unwrap();
|
||||
@ -1415,7 +1423,7 @@ impl<'stmt> Row<'stmt> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'stmt> Collection for Row<'stmt> {
|
||||
impl<'stmt> Collection for PostgresRow<'stmt> {
|
||||
#[inline]
|
||||
fn len(&self) -> uint {
|
||||
self.data.len()
|
||||
@ -1426,12 +1434,12 @@ impl<'stmt> Collection for Row<'stmt> {
|
||||
pub trait RowIndex {
|
||||
/// Returns the index of the appropriate column, or `None` if no such
|
||||
/// column exists.
|
||||
fn idx(&self, stmt: &Statement) -> Option<uint>;
|
||||
fn idx(&self, stmt: &PostgresStatement) -> Option<uint>;
|
||||
}
|
||||
|
||||
impl RowIndex for uint {
|
||||
#[inline]
|
||||
fn idx(&self, stmt: &Statement) -> Option<uint> {
|
||||
fn idx(&self, stmt: &PostgresStatement) -> Option<uint> {
|
||||
if *self > stmt.result_desc.len() {
|
||||
None
|
||||
} else {
|
||||
@ -1442,28 +1450,29 @@ impl RowIndex for uint {
|
||||
|
||||
impl<'a> RowIndex for &'a str {
|
||||
#[inline]
|
||||
fn idx(&self, stmt: &Statement) -> Option<uint> {
|
||||
fn idx(&self, stmt: &PostgresStatement) -> Option<uint> {
|
||||
stmt.result_descriptions().iter().position(|d| d.name.as_slice() == *self)
|
||||
}
|
||||
}
|
||||
|
||||
/// A lazily-loaded iterator over the resulting rows of a query
|
||||
pub struct LazyRows<'trans, 'stmt> {
|
||||
result: Rows<'stmt>,
|
||||
pub struct PostgresLazyRows<'trans, 'stmt> {
|
||||
result: PostgresRows<'stmt>,
|
||||
_trans: &'trans PostgresTransaction<'trans>,
|
||||
}
|
||||
|
||||
impl<'trans, 'stmt> LazyRows<'trans, 'stmt> {
|
||||
/// Like `Rows::finish`.
|
||||
impl<'trans, 'stmt> PostgresLazyRows<'trans, 'stmt> {
|
||||
/// Like `PostgresRows::finish`.
|
||||
#[inline]
|
||||
pub fn finish(self) -> Result<()> {
|
||||
pub fn finish(self) -> PostgresResult<()> {
|
||||
self.result.finish()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'trans, 'stmt> Iterator<Result<Row<'stmt>>> for LazyRows<'trans, 'stmt> {
|
||||
impl<'trans, 'stmt> Iterator<PostgresResult<PostgresRow<'stmt>>>
|
||||
for PostgresLazyRows<'trans, 'stmt> {
|
||||
#[inline]
|
||||
fn next(&mut self) -> Option<Result<Row<'stmt>>> {
|
||||
fn next(&mut self) -> Option<PostgresResult<PostgresRow<'stmt>>> {
|
||||
self.result.try_next()
|
||||
}
|
||||
|
||||
|
15
src/pool.rs
15
src/pool.rs
@ -4,18 +4,19 @@
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use {ConnectParams, IntoConnectParams, Connection, SslMode};
|
||||
use {PostgresConnectParams, IntoConnectParams, PostgresConnection, SslMode};
|
||||
use error::PostgresConnectError;
|
||||
|
||||
struct InnerConnectionPool {
|
||||
params: ConnectParams,
|
||||
params: PostgresConnectParams,
|
||||
ssl: SslMode,
|
||||
pool: Vec<Connection>,
|
||||
pool: Vec<PostgresConnection>,
|
||||
}
|
||||
|
||||
impl InnerConnectionPool {
|
||||
fn add_connection(&mut self) -> Result<(), PostgresConnectError> {
|
||||
Connection::connect(self.params.clone(), &self.ssl).map(|c| self.pool.push(c))
|
||||
PostgresConnection::connect(self.params.clone(), &self.ssl)
|
||||
.map(|c| self.pool.push(c))
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,7 +94,7 @@ impl PostgresConnectionPool {
|
||||
pub struct PooledPostgresConnection {
|
||||
pool: PostgresConnectionPool,
|
||||
// TODO remove the Option wrapper when drop takes self by value
|
||||
conn: Option<Connection>
|
||||
conn: Option<PostgresConnection>
|
||||
}
|
||||
|
||||
impl Drop for PooledPostgresConnection {
|
||||
@ -104,8 +105,8 @@ impl Drop for PooledPostgresConnection {
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref<Connection> for PooledPostgresConnection {
|
||||
fn deref<'a>(&'a self) -> &'a Connection {
|
||||
impl Deref<PostgresConnection> for PooledPostgresConnection {
|
||||
fn deref<'a>(&'a self) -> &'a PostgresConnection {
|
||||
self.conn.get_ref()
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ use std::io::{MemWriter, BufReader};
|
||||
use std::io::util::LimitReader;
|
||||
use time::Timespec;
|
||||
|
||||
use Result;
|
||||
use PostgresResult;
|
||||
use error::{PgWrongType, PgStreamError, PgWasNull, PgBadData};
|
||||
use types::array::{Array, ArrayBase, DimensionInfo};
|
||||
use types::range::{RangeBound, Inclusive, Exclusive, Range};
|
||||
@ -220,18 +220,18 @@ pub trait FromSql {
|
||||
/// Creates a new value of this type from a buffer of Postgres data.
|
||||
///
|
||||
/// If the value was `NULL`, the buffer will be `None`.
|
||||
fn from_sql(ty: &PostgresType, raw: &Option<Vec<u8>>) -> Result<Self>;
|
||||
fn from_sql(ty: &PostgresType, raw: &Option<Vec<u8>>) -> PostgresResult<Self>;
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
trait RawFromSql {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> Result<Self>;
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> PostgresResult<Self>;
|
||||
}
|
||||
|
||||
macro_rules! raw_from_impl(
|
||||
($t:ty, $f:ident) => (
|
||||
impl RawFromSql for $t {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> Result<$t> {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> PostgresResult<$t> {
|
||||
Ok(try_pg!(raw.$f()))
|
||||
}
|
||||
}
|
||||
@ -239,19 +239,19 @@ macro_rules! raw_from_impl(
|
||||
)
|
||||
|
||||
impl RawFromSql for bool {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> Result<bool> {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> PostgresResult<bool> {
|
||||
Ok((try_pg!(raw.read_u8())) != 0)
|
||||
}
|
||||
}
|
||||
|
||||
impl RawFromSql for Vec<u8> {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> Result<Vec<u8>> {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> PostgresResult<Vec<u8>> {
|
||||
Ok(try_pg!(raw.read_to_end()))
|
||||
}
|
||||
}
|
||||
|
||||
impl RawFromSql for String {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> Result<String> {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> PostgresResult<String> {
|
||||
String::from_utf8(try_pg!(raw.read_to_end())).map_err(|_| PgBadData)
|
||||
}
|
||||
}
|
||||
@ -264,7 +264,7 @@ raw_from_impl!(f32, read_be_f32)
|
||||
raw_from_impl!(f64, read_be_f64)
|
||||
|
||||
impl RawFromSql for Timespec {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> Result<Timespec> {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> PostgresResult<Timespec> {
|
||||
let t = try_pg!(raw.read_be_i64());
|
||||
let mut sec = t / USEC_PER_SEC + TIME_SEC_CONVERSION;
|
||||
let mut usec = t % USEC_PER_SEC;
|
||||
@ -281,7 +281,7 @@ impl RawFromSql for Timespec {
|
||||
macro_rules! from_range_impl(
|
||||
($t:ty) => (
|
||||
impl RawFromSql for Range<$t> {
|
||||
fn raw_from_sql<R: Reader>(rdr: &mut R) -> Result<Range<$t>> {
|
||||
fn raw_from_sql<R: Reader>(rdr: &mut R) -> PostgresResult<Range<$t>> {
|
||||
let t = try_pg!(rdr.read_i8());
|
||||
|
||||
if t & RANGE_EMPTY != 0 {
|
||||
@ -330,7 +330,7 @@ from_range_impl!(i64)
|
||||
from_range_impl!(Timespec)
|
||||
|
||||
impl RawFromSql for Json {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> Result<Json> {
|
||||
fn raw_from_sql<R: Reader>(raw: &mut R) -> PostgresResult<Json> {
|
||||
json::from_reader(raw).map_err(|_| PgBadData)
|
||||
}
|
||||
}
|
||||
@ -339,7 +339,7 @@ macro_rules! from_map_impl(
|
||||
($($expected:pat)|+, $t:ty, $blk:expr) => (
|
||||
impl FromSql for Option<$t> {
|
||||
fn from_sql(ty: &PostgresType, raw: &Option<Vec<u8>>)
|
||||
-> Result<Option<$t>> {
|
||||
-> PostgresResult<Option<$t>> {
|
||||
check_types!($($expected)|+, ty)
|
||||
match *raw {
|
||||
Some(ref buf) => ($blk)(buf).map(|ok| Some(ok)),
|
||||
@ -350,9 +350,9 @@ macro_rules! from_map_impl(
|
||||
|
||||
impl FromSql for $t {
|
||||
fn from_sql(ty: &PostgresType, raw: &Option<Vec<u8>>)
|
||||
-> Result<$t> {
|
||||
-> PostgresResult<$t> {
|
||||
// FIXME when you can specify Self types properly
|
||||
let ret: Result<Option<$t>> = FromSql::from_sql(ty, raw);
|
||||
let ret: PostgresResult<Option<$t>> = FromSql::from_sql(ty, raw);
|
||||
match ret {
|
||||
Ok(Some(val)) => Ok(val),
|
||||
Ok(None) => Err(PgWasNull),
|
||||
@ -440,7 +440,7 @@ from_array_impl!(PgInt8RangeArray, Range<i64>)
|
||||
|
||||
impl FromSql for Option<HashMap<String, Option<String>>> {
|
||||
fn from_sql(ty: &PostgresType, raw: &Option<Vec<u8>>)
|
||||
-> Result<Option<HashMap<String, Option<String>>>> {
|
||||
-> PostgresResult<Option<HashMap<String, Option<String>>>> {
|
||||
match *ty {
|
||||
PgUnknownType { name: ref name, .. } if "hstore" == name.as_slice() => {}
|
||||
_ => return Err(PgWrongType(ty.clone()))
|
||||
@ -483,9 +483,9 @@ impl FromSql for Option<HashMap<String, Option<String>>> {
|
||||
|
||||
impl FromSql for HashMap<String, Option<String>> {
|
||||
fn from_sql(ty: &PostgresType, raw: &Option<Vec<u8>>)
|
||||
-> Result<HashMap<String, Option<String>>> {
|
||||
-> PostgresResult<HashMap<String, Option<String>>> {
|
||||
// FIXME when you can specify Self types properly
|
||||
let ret: Result<Option<HashMap<String, Option<String>>>> =
|
||||
let ret: PostgresResult<Option<HashMap<String, Option<String>>>> =
|
||||
FromSql::from_sql(ty, raw);
|
||||
match ret {
|
||||
Ok(Some(val)) => Ok(val),
|
||||
@ -500,18 +500,18 @@ pub trait ToSql {
|
||||
/// Converts the value of `self` into a format appropriate for the Postgres
|
||||
/// backend.
|
||||
fn to_sql(&self, ty: &PostgresType)
|
||||
-> Result<(Format, Option<Vec<u8>>)>;
|
||||
-> PostgresResult<(Format, Option<Vec<u8>>)>;
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
trait RawToSql {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> Result<()>;
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> PostgresResult<()>;
|
||||
}
|
||||
|
||||
macro_rules! raw_to_impl(
|
||||
($t:ty, $f:ident) => (
|
||||
impl RawToSql for $t {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> Result<()> {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> PostgresResult<()> {
|
||||
Ok(try_pg!(w.$f(*self)))
|
||||
}
|
||||
}
|
||||
@ -519,19 +519,19 @@ macro_rules! raw_to_impl(
|
||||
)
|
||||
|
||||
impl RawToSql for bool {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> Result<()> {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> PostgresResult<()> {
|
||||
Ok(try_pg!(w.write_u8(*self as u8)))
|
||||
}
|
||||
}
|
||||
|
||||
impl RawToSql for Vec<u8> {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> Result<()> {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> PostgresResult<()> {
|
||||
Ok(try_pg!(w.write(self.as_slice())))
|
||||
}
|
||||
}
|
||||
|
||||
impl RawToSql for String {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> Result<()> {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> PostgresResult<()> {
|
||||
Ok(try_pg!(w.write(self.as_bytes())))
|
||||
}
|
||||
}
|
||||
@ -544,7 +544,7 @@ raw_to_impl!(f32, write_be_f32)
|
||||
raw_to_impl!(f64, write_be_f64)
|
||||
|
||||
impl RawToSql for Timespec {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> Result<()> {
|
||||
fn raw_to_sql<W: Writer>(&self, w: &mut W) -> PostgresResult<()> {
|
||||
let t = (self.sec - TIME_SEC_CONVERSION) * USEC_PER_SEC + self.nsec as i64 / NSEC_PER_USEC;
|
||||
Ok(try_pg!(w.write_be_i64(t)))
|
||||
}
|
||||
@ -553,7 +553,7 @@ impl RawToSql for Timespec {
|
||||
macro_rules! to_range_impl(
|
||||
($t:ty) => (
|
||||
impl RawToSql for Range<$t> {
|
||||
fn raw_to_sql<W: Writer>(&self, buf: &mut W) -> Result<()> {
|
||||
fn raw_to_sql<W: Writer>(&self, buf: &mut W) -> PostgresResult<()> {
|
||||
let mut tag = 0;
|
||||
if self.is_empty() {
|
||||
tag |= RANGE_EMPTY;
|
||||
@ -604,7 +604,7 @@ to_range_impl!(i64)
|
||||
to_range_impl!(Timespec)
|
||||
|
||||
impl RawToSql for Json {
|
||||
fn raw_to_sql<W: Writer>(&self, raw: &mut W) -> Result<()> {
|
||||
fn raw_to_sql<W: Writer>(&self, raw: &mut W) -> PostgresResult<()> {
|
||||
Ok(try_pg!(self.to_writer(raw as &mut Writer)))
|
||||
}
|
||||
}
|
||||
@ -612,7 +612,7 @@ impl RawToSql for Json {
|
||||
macro_rules! to_option_impl(
|
||||
($($oid:pat)|+, $t:ty) => (
|
||||
impl ToSql for Option<$t> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> Result<(Format, Option<Vec<u8>>)> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> PostgresResult<(Format, Option<Vec<u8>>)> {
|
||||
check_types!($($oid)|+, ty)
|
||||
|
||||
match *self {
|
||||
@ -627,7 +627,7 @@ macro_rules! to_option_impl(
|
||||
macro_rules! to_option_impl_lifetime(
|
||||
($($oid:pat)|+, $t:ty) => (
|
||||
impl<'a> ToSql for Option<$t> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> Result<(Format, Option<Vec<u8>>)> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> PostgresResult<(Format, Option<Vec<u8>>)> {
|
||||
check_types!($($oid)|+, ty)
|
||||
|
||||
match *self {
|
||||
@ -642,7 +642,7 @@ macro_rules! to_option_impl_lifetime(
|
||||
macro_rules! to_raw_to_impl(
|
||||
($($oid:ident)|+, $t:ty) => (
|
||||
impl ToSql for $t {
|
||||
fn to_sql(&self, ty: &PostgresType) -> Result<(Format, Option<Vec<u8>>)> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> PostgresResult<(Format, Option<Vec<u8>>)> {
|
||||
check_types!($($oid)|+, ty)
|
||||
|
||||
let mut writer = MemWriter::new();
|
||||
@ -670,7 +670,7 @@ to_raw_to_impl!(PgInt8Range, Range<i64>)
|
||||
to_raw_to_impl!(PgTsRange | PgTstzRange, Range<Timespec>)
|
||||
|
||||
impl<'a> ToSql for &'a str {
|
||||
fn to_sql(&self, ty: &PostgresType) -> Result<(Format, Option<Vec<u8>>)> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> PostgresResult<(Format, Option<Vec<u8>>)> {
|
||||
check_types!(PgVarchar | PgText | PgCharN | PgName, ty)
|
||||
Ok((Text, Some(Vec::from_slice(self.as_bytes()))))
|
||||
}
|
||||
@ -679,7 +679,7 @@ impl<'a> ToSql for &'a str {
|
||||
to_option_impl_lifetime!(PgVarchar | PgText | PgCharN | PgName, &'a str)
|
||||
|
||||
impl<'a> ToSql for &'a [u8] {
|
||||
fn to_sql(&self, ty: &PostgresType) -> Result<(Format, Option<Vec<u8>>)> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> PostgresResult<(Format, Option<Vec<u8>>)> {
|
||||
check_types!(PgByteA, ty)
|
||||
Ok((Binary, Some(Vec::from_slice(*self))))
|
||||
}
|
||||
@ -692,7 +692,7 @@ to_raw_to_impl!(PgTimestamp | PgTimestampTZ, Timespec)
|
||||
macro_rules! to_array_impl(
|
||||
($($oid:ident)|+, $t:ty) => (
|
||||
impl ToSql for ArrayBase<Option<$t>> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> Result<(Format, Option<Vec<u8>>)> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> PostgresResult<(Format, Option<Vec<u8>>)> {
|
||||
check_types!($($oid)|+, ty)
|
||||
let mut buf = MemWriter::new();
|
||||
|
||||
@ -742,7 +742,7 @@ to_array_impl!(PgInt8RangeArray, Range<i64>)
|
||||
to_array_impl!(PgJsonArray, Json)
|
||||
|
||||
impl ToSql for HashMap<String, Option<String>> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> Result<(Format, Option<Vec<u8>>)> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> PostgresResult<(Format, Option<Vec<u8>>)> {
|
||||
match *ty {
|
||||
PgUnknownType { name: ref name, .. } if "hstore" == name.as_slice() => {}
|
||||
_ => return Err(PgWrongType(ty.clone()))
|
||||
@ -770,7 +770,7 @@ impl ToSql for HashMap<String, Option<String>> {
|
||||
}
|
||||
|
||||
impl ToSql for Option<HashMap<String, Option<String>>> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> Result<(Format, Option<Vec<u8>>)> {
|
||||
fn to_sql(&self, ty: &PostgresType) -> PostgresResult<(Format, Option<Vec<u8>>)> {
|
||||
match *ty {
|
||||
PgUnknownType { name: ref name, .. } if "hstore" == name.as_slice() => {}
|
||||
_ => return Err(PgWrongType(ty.clone()))
|
||||
|
115
tests/test.rs
115
tests/test.rs
@ -11,7 +11,10 @@ use openssl::ssl::{SslContext, Sslv3};
|
||||
use std::io::timer;
|
||||
use std::time::Duration;
|
||||
|
||||
use postgres::{ResultDescription,
|
||||
use postgres::{PostgresNoticeHandler,
|
||||
PostgresNotification,
|
||||
PostgresConnection,
|
||||
ResultDescription,
|
||||
RequireSsl,
|
||||
PreferSsl,
|
||||
NoSsl};
|
||||
@ -48,17 +51,17 @@ mod pool;
|
||||
|
||||
#[test]
|
||||
fn test_non_default_database() {
|
||||
or_fail!(postgres::Connection::connect("postgres://postgres@localhost/postgres", &NoSsl));
|
||||
or_fail!(PostgresConnection::connect("postgres://postgres@localhost/postgres", &NoSsl));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_url_terminating_slash() {
|
||||
or_fail!(postgres::Connection::connect("postgres://postgres@localhost/", &NoSsl));
|
||||
or_fail!(PostgresConnection::connect("postgres://postgres@localhost/", &NoSsl));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_prepare_err() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
match conn.prepare("invalid sql statment") {
|
||||
Err(PgDbError(PostgresDbError { code: SyntaxError, position: Some(Position(1)), .. })) => (),
|
||||
Err(e) => fail!("Unexpected result {}", e),
|
||||
@ -68,7 +71,7 @@ fn test_prepare_err() {
|
||||
|
||||
#[test]
|
||||
fn test_unknown_database() {
|
||||
match postgres::Connection::connect("postgres://postgres@localhost/asdf", &NoSsl) {
|
||||
match PostgresConnection::connect("postgres://postgres@localhost/asdf", &NoSsl) {
|
||||
Err(PgConnectDbError(PostgresDbError { code: InvalidCatalogName, .. })) => {}
|
||||
Err(resp) => fail!("Unexpected result {}", resp),
|
||||
_ => fail!("Unexpected result"),
|
||||
@ -77,13 +80,13 @@ fn test_unknown_database() {
|
||||
|
||||
#[test]
|
||||
fn test_connection_finish() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
assert!(conn.finish().is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_unix_connection() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let stmt = or_fail!(conn.prepare("SHOW unix_socket_directories"));
|
||||
let result = or_fail!(stmt.query([]));
|
||||
let unix_socket_directories: String = result.map(|row| row.get(0u)).next().unwrap();
|
||||
@ -95,13 +98,13 @@ fn test_unix_connection() {
|
||||
let unix_socket_directory = unix_socket_directories.as_slice() .split(',').next().unwrap();
|
||||
|
||||
let url = format!("postgres://postgres@{}", url::encode_component(unix_socket_directory));
|
||||
let conn = or_fail!(postgres::Connection::connect(url.as_slice(), &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect(url.as_slice(), &NoSsl));
|
||||
assert!(conn.finish().is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_transaction_commit() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (id INT PRIMARY KEY)", []));
|
||||
|
||||
let trans = or_fail!(conn.transaction());
|
||||
@ -117,7 +120,7 @@ fn test_transaction_commit() {
|
||||
|
||||
#[test]
|
||||
fn test_transaction_commit_finish() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (id INT PRIMARY KEY)", []));
|
||||
|
||||
let trans = or_fail!(conn.transaction());
|
||||
@ -133,7 +136,7 @@ fn test_transaction_commit_finish() {
|
||||
|
||||
#[test]
|
||||
fn test_transaction_commit_method() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (id INT PRIMARY KEY)", []));
|
||||
|
||||
let trans = or_fail!(conn.transaction());
|
||||
@ -148,7 +151,7 @@ fn test_transaction_commit_method() {
|
||||
|
||||
#[test]
|
||||
fn test_transaction_rollback() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (id INT PRIMARY KEY)", []));
|
||||
|
||||
or_fail!(conn.execute("INSERT INTO foo (id) VALUES ($1)", [&1i32]));
|
||||
@ -165,7 +168,7 @@ fn test_transaction_rollback() {
|
||||
|
||||
#[test]
|
||||
fn test_transaction_rollback_finish() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (id INT PRIMARY KEY)", []));
|
||||
|
||||
or_fail!(conn.execute("INSERT INTO foo (id) VALUES ($1)", [&1i32]));
|
||||
@ -182,7 +185,7 @@ fn test_transaction_rollback_finish() {
|
||||
|
||||
#[test]
|
||||
fn test_nested_transactions() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (id INT PRIMARY KEY)", []));
|
||||
|
||||
or_fail!(conn.execute("INSERT INTO foo (id) VALUES (1)", []));
|
||||
@ -228,7 +231,7 @@ fn test_nested_transactions() {
|
||||
|
||||
#[test]
|
||||
fn test_nested_transactions_finish() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (id INT PRIMARY KEY)", []));
|
||||
|
||||
or_fail!(conn.execute("INSERT INTO foo (id) VALUES (1)", []));
|
||||
@ -283,7 +286,7 @@ fn test_nested_transactions_finish() {
|
||||
|
||||
#[test]
|
||||
fn test_conn_prepare_with_trans() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let _trans = or_fail!(conn.transaction());
|
||||
match conn.prepare("") {
|
||||
Err(PgWrongTransaction) => {}
|
||||
@ -299,7 +302,7 @@ fn test_conn_prepare_with_trans() {
|
||||
|
||||
#[test]
|
||||
fn test_trans_prepare_with_nested_trans() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let trans = or_fail!(conn.transaction());
|
||||
let _trans2 = or_fail!(trans.transaction());
|
||||
match trans.prepare("") {
|
||||
@ -316,7 +319,7 @@ fn test_trans_prepare_with_nested_trans() {
|
||||
|
||||
#[test]
|
||||
fn test_stmt_finish() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (id BIGINT PRIMARY KEY)", []));
|
||||
let stmt = or_fail!(conn.prepare("SELECT * FROM foo"));
|
||||
assert!(stmt.finish().is_ok());
|
||||
@ -324,7 +327,7 @@ fn test_stmt_finish() {
|
||||
|
||||
#[test]
|
||||
fn test_batch_execute() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let query = "CREATE TEMPORARY TABLE foo (id BIGINT PRIMARY KEY);
|
||||
INSERT INTO foo (id) VALUES (10);";
|
||||
or_fail!(conn.batch_execute(query));
|
||||
@ -337,7 +340,7 @@ fn test_batch_execute() {
|
||||
|
||||
#[test]
|
||||
fn test_batch_execute_error() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let query = "CREATE TEMPORARY TABLE foo (id BIGINT PRIMARY KEY);
|
||||
INSERT INTO foo (id) VALUES (10);
|
||||
asdfa;
|
||||
@ -353,7 +356,7 @@ fn test_batch_execute_error() {
|
||||
|
||||
#[test]
|
||||
fn test_transaction_batch_execute() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let trans = or_fail!(conn.transaction());
|
||||
let query = "CREATE TEMPORARY TABLE foo (id BIGINT PRIMARY KEY);
|
||||
INSERT INTO foo (id) VALUES (10);";
|
||||
@ -367,7 +370,7 @@ fn test_transaction_batch_execute() {
|
||||
|
||||
#[test]
|
||||
fn test_query() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (id BIGINT PRIMARY KEY)", []));
|
||||
or_fail!(conn.execute("INSERT INTO foo (id) VALUES ($1), ($2)",
|
||||
[&1i64, &2i64]));
|
||||
@ -379,7 +382,7 @@ fn test_query() {
|
||||
|
||||
#[test]
|
||||
fn test_error_after_datarow() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let stmt = or_fail!(conn.prepare("
|
||||
SELECT
|
||||
(SELECT generate_series(1, ss.i))
|
||||
@ -396,7 +399,7 @@ FROM (SELECT gs.i
|
||||
|
||||
#[test]
|
||||
fn test_result_finish() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (id BIGINT PRIMARY KEY)", []));
|
||||
let stmt = or_fail!(conn.prepare("SELECT * FROM foo"));
|
||||
let result = or_fail!(stmt.query([]));
|
||||
@ -405,7 +408,7 @@ fn test_result_finish() {
|
||||
|
||||
#[test]
|
||||
fn test_lazy_query() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
|
||||
let trans = or_fail!(conn.transaction());
|
||||
or_fail!(trans.execute("CREATE TEMPORARY TABLE foo (id INT PRIMARY KEY)", []));
|
||||
@ -421,8 +424,8 @@ fn test_lazy_query() {
|
||||
|
||||
#[test]
|
||||
fn test_lazy_query_wrong_conn() {
|
||||
let conn1 = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn2 = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn1 = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn2 = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
|
||||
let trans = or_fail!(conn1.transaction());
|
||||
let stmt = or_fail!(conn2.prepare("SELECT 1::INT"));
|
||||
@ -435,14 +438,14 @@ fn test_lazy_query_wrong_conn() {
|
||||
|
||||
#[test]
|
||||
fn test_param_types() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let stmt = or_fail!(conn.prepare("SELECT $1::INT, $2::VARCHAR"));
|
||||
assert_eq!(stmt.param_types(), &[PgInt4, PgVarchar]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_result_descriptions() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let stmt = or_fail!(conn.prepare("SELECT 1::INT as a, 'hi'::VARCHAR as b"));
|
||||
assert!(stmt.result_descriptions() ==
|
||||
[ResultDescription { name: "a".to_string(), ty: PgInt4},
|
||||
@ -451,7 +454,7 @@ fn test_result_descriptions() {
|
||||
|
||||
#[test]
|
||||
fn test_execute_counts() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
assert_eq!(0, or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (
|
||||
id SERIAL PRIMARY KEY,
|
||||
b INT
|
||||
@ -464,7 +467,7 @@ fn test_execute_counts() {
|
||||
|
||||
#[test]
|
||||
fn test_wrong_param_type() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
match conn.execute("SELECT $1::VARCHAR", [&1i32]) {
|
||||
Err(PgWrongType(_)) => {}
|
||||
res => fail!("unexpected result {}", res)
|
||||
@ -473,7 +476,7 @@ fn test_wrong_param_type() {
|
||||
|
||||
#[test]
|
||||
fn test_too_few_params() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
match conn.execute("SELECT $1::INT, $2::INT", [&1i32]) {
|
||||
Err(PgWrongParamCount { expected: 2, actual: 1 }) => {},
|
||||
res => fail!("unexpected result {}", res)
|
||||
@ -482,7 +485,7 @@ fn test_too_few_params() {
|
||||
|
||||
#[test]
|
||||
fn test_too_many_params() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
match conn.execute("SELECT $1::INT, $2::INT", [&1i32, &2i32, &3i32]) {
|
||||
Err(PgWrongParamCount { expected: 2, actual: 3 }) => {},
|
||||
res => fail!("unexpected result {}", res)
|
||||
@ -491,7 +494,7 @@ fn test_too_many_params() {
|
||||
|
||||
#[test]
|
||||
fn test_index_named() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let stmt = or_fail!(conn.prepare("SELECT 10::INT as val"));
|
||||
let result = or_fail!(stmt.query([]));
|
||||
|
||||
@ -501,7 +504,7 @@ fn test_index_named() {
|
||||
#[test]
|
||||
#[should_fail]
|
||||
fn test_index_named_fail() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let stmt = or_fail!(conn.prepare("SELECT 10::INT as id"));
|
||||
let mut result = or_fail!(stmt.query([]));
|
||||
|
||||
@ -510,7 +513,7 @@ fn test_index_named_fail() {
|
||||
|
||||
#[test]
|
||||
fn test_get_named_err() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let stmt = or_fail!(conn.prepare("SELECT 10::INT as id"));
|
||||
let mut result = or_fail!(stmt.query([]));
|
||||
|
||||
@ -522,7 +525,7 @@ fn test_get_named_err() {
|
||||
|
||||
#[test]
|
||||
fn test_get_was_null() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let stmt = or_fail!(conn.prepare("SELECT NULL::INT as id"));
|
||||
let mut result = or_fail!(stmt.query([]));
|
||||
|
||||
@ -537,14 +540,14 @@ fn test_custom_notice_handler() {
|
||||
static mut count: uint = 0;
|
||||
struct Handler;
|
||||
|
||||
impl postgres::NoticeHandler for Handler {
|
||||
impl PostgresNoticeHandler for Handler {
|
||||
fn handle(&mut self, notice: PostgresDbError) {
|
||||
assert_eq!("note", notice.message.as_slice());
|
||||
unsafe { count += 1; }
|
||||
}
|
||||
}
|
||||
|
||||
let conn = or_fail!(postgres::Connection::connect(
|
||||
let conn = or_fail!(PostgresConnection::connect(
|
||||
"postgres://postgres@localhost?client_min_messages=NOTICE", &NoSsl));
|
||||
conn.set_notice_handler(box Handler);
|
||||
or_fail!(conn.execute("CREATE FUNCTION pg_temp.note() RETURNS INT AS $$
|
||||
@ -559,16 +562,16 @@ fn test_custom_notice_handler() {
|
||||
|
||||
#[test]
|
||||
fn test_notification_iterator_none() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
assert!(conn.notifications().next().is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_notification_iterator_some() {
|
||||
fn check_notification(expected: postgres::Notification,
|
||||
actual: Option<postgres::Notification>) {
|
||||
fn check_notification(expected: PostgresNotification,
|
||||
actual: Option<PostgresNotification>) {
|
||||
match actual {
|
||||
Some(postgres::Notification { channel, payload, .. }) => {
|
||||
Some(PostgresNotification { channel, payload, .. }) => {
|
||||
assert_eq!(&expected.channel, &channel);
|
||||
assert_eq!(&expected.payload, &payload);
|
||||
}
|
||||
@ -576,19 +579,19 @@ fn test_notification_iterator_some() {
|
||||
}
|
||||
}
|
||||
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let mut it = conn.notifications();
|
||||
or_fail!(conn.execute("LISTEN test_notification_iterator_one_channel", []));
|
||||
or_fail!(conn.execute("LISTEN test_notification_iterator_one_channel2", []));
|
||||
or_fail!(conn.execute("NOTIFY test_notification_iterator_one_channel, 'hello'", []));
|
||||
or_fail!(conn.execute("NOTIFY test_notification_iterator_one_channel2, 'world'", []));
|
||||
|
||||
check_notification(postgres::Notification {
|
||||
check_notification(PostgresNotification {
|
||||
pid: 0,
|
||||
channel: "test_notification_iterator_one_channel".to_string(),
|
||||
payload: "hello".to_string()
|
||||
}, it.next());
|
||||
check_notification(postgres::Notification {
|
||||
check_notification(PostgresNotification {
|
||||
pid: 0,
|
||||
channel: "test_notification_iterator_one_channel2".to_string(),
|
||||
payload: "world".to_string()
|
||||
@ -596,7 +599,7 @@ fn test_notification_iterator_some() {
|
||||
assert!(it.next().is_none());
|
||||
|
||||
or_fail!(conn.execute("NOTIFY test_notification_iterator_one_channel, '!'", []));
|
||||
check_notification(postgres::Notification {
|
||||
check_notification(PostgresNotification {
|
||||
pid: 0,
|
||||
channel: "test_notification_iterator_one_channel".to_string(),
|
||||
payload: "!".to_string()
|
||||
@ -607,7 +610,7 @@ fn test_notification_iterator_some() {
|
||||
#[test]
|
||||
// This test is pretty sad, but I don't think there's a better way :(
|
||||
fn test_cancel_query() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let cancel_data = conn.cancel_data();
|
||||
|
||||
spawn(proc() {
|
||||
@ -626,7 +629,7 @@ fn test_cancel_query() {
|
||||
#[test]
|
||||
fn test_require_ssl_conn() {
|
||||
let ctx = SslContext::new(Sslv3);
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost",
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost",
|
||||
&RequireSsl(ctx)));
|
||||
or_fail!(conn.execute("SELECT 1::VARCHAR", []));
|
||||
}
|
||||
@ -634,19 +637,19 @@ fn test_require_ssl_conn() {
|
||||
#[test]
|
||||
fn test_prefer_ssl_conn() {
|
||||
let ctx = SslContext::new(Sslv3);
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost",
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost",
|
||||
&PreferSsl(ctx)));
|
||||
or_fail!(conn.execute("SELECT 1::VARCHAR", []));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_plaintext_pass() {
|
||||
or_fail!(postgres::Connection::connect("postgres://pass_user:password@localhost/postgres", &NoSsl));
|
||||
or_fail!(PostgresConnection::connect("postgres://pass_user:password@localhost/postgres", &NoSsl));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_plaintext_pass_no_pass() {
|
||||
let ret = postgres::Connection::connect("postgres://pass_user@localhost/postgres", &NoSsl);
|
||||
let ret = PostgresConnection::connect("postgres://pass_user@localhost/postgres", &NoSsl);
|
||||
match ret {
|
||||
Err(MissingPassword) => (),
|
||||
Err(err) => fail!("Unexpected error {}", err),
|
||||
@ -656,7 +659,7 @@ fn test_plaintext_pass_no_pass() {
|
||||
|
||||
#[test]
|
||||
fn test_plaintext_pass_wrong_pass() {
|
||||
let ret = postgres::Connection::connect("postgres://pass_user:asdf@localhost/postgres", &NoSsl);
|
||||
let ret = PostgresConnection::connect("postgres://pass_user:asdf@localhost/postgres", &NoSsl);
|
||||
match ret {
|
||||
Err(PgConnectDbError(PostgresDbError { code: InvalidPassword, .. })) => (),
|
||||
Err(err) => fail!("Unexpected error {}", err),
|
||||
@ -666,12 +669,12 @@ fn test_plaintext_pass_wrong_pass() {
|
||||
|
||||
#[test]
|
||||
fn test_md5_pass() {
|
||||
or_fail!(postgres::Connection::connect("postgres://md5_user:password@localhost/postgres", &NoSsl));
|
||||
or_fail!(PostgresConnection::connect("postgres://md5_user:password@localhost/postgres", &NoSsl));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_md5_pass_no_pass() {
|
||||
let ret = postgres::Connection::connect("postgres://md5_user@localhost/postgres", &NoSsl);
|
||||
let ret = PostgresConnection::connect("postgres://md5_user@localhost/postgres", &NoSsl);
|
||||
match ret {
|
||||
Err(MissingPassword) => (),
|
||||
Err(err) => fail!("Unexpected error {}", err),
|
||||
@ -681,7 +684,7 @@ fn test_md5_pass_no_pass() {
|
||||
|
||||
#[test]
|
||||
fn test_md5_pass_wrong_pass() {
|
||||
let ret = postgres::Connection::connect("postgres://md5_user:asdf@localhost/postgres", &NoSsl);
|
||||
let ret = PostgresConnection::connect("postgres://md5_user:asdf@localhost/postgres", &NoSsl);
|
||||
match ret {
|
||||
Err(PgConnectDbError(PostgresDbError { code: InvalidPassword, .. })) => (),
|
||||
Err(err) => fail!("Unexpected error {}", err),
|
||||
|
@ -5,7 +5,7 @@ use std::f64;
|
||||
use time;
|
||||
use time::Timespec;
|
||||
|
||||
use postgres::{mod, NoSsl};
|
||||
use postgres::{PostgresConnection, NoSsl};
|
||||
use postgres::types::array::ArrayBase;
|
||||
use postgres::types::{ToSql, FromSql};
|
||||
|
||||
@ -13,7 +13,7 @@ mod array;
|
||||
mod range;
|
||||
|
||||
fn test_type<T: PartialEq+FromSql+ToSql, S: Str>(sql_type: &str, checks: &[(T, S)]) {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
for &(ref val, ref repr) in checks.iter() {
|
||||
let stmt = or_fail!(conn.prepare(format!("SELECT {:s}::{}", *repr, sql_type).as_slice()));
|
||||
let result = or_fail!(stmt.query([])).next().unwrap().get(0u);
|
||||
@ -93,7 +93,7 @@ fn test_text_params() {
|
||||
|
||||
#[test]
|
||||
fn test_bpchar_params() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
or_fail!(conn.execute("CREATE TEMPORARY TABLE foo (
|
||||
id SERIAL PRIMARY KEY,
|
||||
b CHAR(5)
|
||||
@ -335,7 +335,7 @@ fn test_hstore_params() {
|
||||
}
|
||||
|
||||
fn test_nan_param<T: Float+ToSql+FromSql>(sql_type: &str) {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let stmt = or_fail!(conn.prepare(format!("SELECT 'NaN'::{}", sql_type).as_slice()));
|
||||
let mut result = or_fail!(stmt.query([]));
|
||||
let val: T = result.next().unwrap().get(0u);
|
||||
@ -371,7 +371,7 @@ fn test_jsonarray_params() {
|
||||
|
||||
#[test]
|
||||
fn test_pg_database_datname() {
|
||||
let conn = or_fail!(postgres::Connection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let conn = or_fail!(PostgresConnection::connect("postgres://postgres@localhost", &NoSsl));
|
||||
let stmt = or_fail!(conn.prepare("SELECT datname FROM pg_database"));
|
||||
let mut result = or_fail!(stmt.query([]));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user