Upgrade type crate versions

Also add the version number to the feature name. This both makes it more
obvious when using them and opens the window for support of multiple
versions simultaneously in the future.
This commit is contained in:
Steven Fackler 2018-04-29 13:12:58 -07:00
parent 2200286bba
commit 15b6cd57f5
9 changed files with 48 additions and 261 deletions

View File

@ -7,14 +7,12 @@ description = "Internal crate used by postgres and postgres-tokio"
repository = "https://github.com/sfackler/rust-postgres"
[features]
with-bit-vec = ["bit-vec"]
with-chrono = ["chrono"]
with-eui48 = ["eui48"]
with-geo = ["geo"]
with-rustc-serialize = ["rustc-serialize"]
with-serde_json = ["serde_json"]
with-time = ["time"]
with-uuid = ["uuid"]
"with-bit-vec-0.5" = ["bit-vec"]
"with-chrono-0.4" = ["chrono"]
"with-eui48-0.3" = ["eui48"]
"with-geo-0.8" = ["geo"]
with-serde_json-1 = ["serde_json"]
"with-uuid-0.6" = ["uuid"]
[dependencies]
hex = "0.3"
@ -22,11 +20,9 @@ fallible-iterator = "0.1.3"
phf = "=0.7.21"
postgres-protocol = { version = "0.3", path = "../postgres-protocol" }
bit-vec = { version = "0.4", optional = true }
bit-vec = { version = "0.5", optional = true }
chrono = { version = "0.4", optional = true }
eui48 = { version = "0.3", optional = true }
geo = { version = "0.4", optional = true }
rustc-serialize = { version = "0.3", optional = true }
geo = { version = "0.8", optional = true }
serde_json = { version = "1.0", optional = true }
time = { version = "0.1.14", optional = true }
uuid = { version = "0.5", optional = true }
uuid = { version = "0.6", optional = true }

View File

@ -65,21 +65,17 @@ where
v.to_sql(ty, out)
}
#[cfg(feature = "with-bit-vec")]
#[cfg(feature = "with-bit-vec-0.5")]
mod bit_vec;
#[cfg(feature = "with-chrono")]
#[cfg(feature = "with-chrono-0.4")]
mod chrono;
#[cfg(feature = "with-eui48")]
#[cfg(feature = "with-eui48-0.3")]
mod eui48;
#[cfg(feature = "with-geo")]
#[cfg(feature = "with-geo-0.8")]
mod geo;
#[cfg(feature = "with-rustc-serialize")]
mod rustc_serialize;
#[cfg(feature = "with-serde_json")]
#[cfg(feature = "with-serde_json-1")]
mod serde_json;
#[cfg(feature = "with-time")]
mod time;
#[cfg(feature = "with-uuid")]
#[cfg(feature = "with-uuid-0.6")]
mod uuid;
mod special;

View File

@ -1,36 +0,0 @@
extern crate rustc_serialize;
use self::rustc_serialize::json;
use std::error::Error;
use std::io::{Read, Write};
use types::{FromSql, IsNull, ToSql, Type};
impl<'a> FromSql<'a> for json::Json {
fn from_sql(ty: &Type, mut raw: &[u8]) -> Result<json::Json, Box<Error + Sync + Send>> {
if *ty == Type::JSONB {
let mut b = [0; 1];
raw.read_exact(&mut b)?;
// We only support version 1 of the jsonb binary format
if b[0] != 1 {
return Err("unsupported JSONB encoding version".into());
}
}
json::Json::from_reader(&mut raw).map_err(Into::into)
}
accepts!(JSON, JSONB);
}
impl ToSql for json::Json {
fn to_sql(&self, ty: &Type, out: &mut Vec<u8>) -> Result<IsNull, Box<Error + Sync + Send>> {
if *ty == Type::JSONB {
out.push(1);
}
write!(out, "{}", self)?;
Ok(IsNull::No)
}
accepts!(JSON, JSONB);
to_sql_checked!();
}

View File

@ -1,41 +0,0 @@
extern crate time;
use self::time::Timespec;
use postgres_protocol::types;
use std::error::Error;
use types::{FromSql, IsNull, ToSql, Type};
const USEC_PER_SEC: i64 = 1_000_000;
const NSEC_PER_USEC: i64 = 1_000;
// Number of seconds from 1970-01-01 to 2000-01-01
const TIME_SEC_CONVERSION: i64 = 946684800;
impl<'a> FromSql<'a> for Timespec {
fn from_sql(_: &Type, raw: &[u8]) -> Result<Timespec, Box<Error + Sync + Send>> {
let t = types::timestamp_from_sql(raw)?;
let mut sec = t / USEC_PER_SEC + TIME_SEC_CONVERSION;
let mut usec = t % USEC_PER_SEC;
if usec < 0 {
sec -= 1;
usec = USEC_PER_SEC + usec;
}
Ok(Timespec::new(sec, (usec * NSEC_PER_USEC) as i32))
}
accepts!(TIMESTAMP, TIMESTAMPTZ);
}
impl ToSql for Timespec {
fn to_sql(&self, _: &Type, w: &mut Vec<u8>) -> Result<IsNull, Box<Error + Sync + Send>> {
let t = (self.sec - TIME_SEC_CONVERSION) * USEC_PER_SEC + self.nsec as i64 / NSEC_PER_USEC;
types::timestamp_to_sql(t, w);
Ok(IsNull::No)
}
accepts!(TIMESTAMP, TIMESTAMPTZ);
to_sql_checked!();
}

View File

@ -12,14 +12,12 @@ categories = ["database"]
[package.metadata.docs.rs]
features = [
"with-bit-vec",
"with-chrono",
"with-eui48",
"with-geo",
"with-rustc-serialize",
"with-serde_json",
"with-time",
"with-uuid",
"with-bit-vec-0.5",
"with-chrono-0.4",
"with-eui48-0.3",
"with-geo-0.8",
"with-serde_json-1",
"with-uuid-0.6",
"with-openssl",
"with-native-tls",
]
@ -38,14 +36,12 @@ name = "test"
path = "tests/test.rs"
[features]
with-bit-vec = ["postgres-shared/with-bit-vec"]
with-chrono = ["postgres-shared/with-chrono"]
with-eui48 = ["postgres-shared/with-eui48"]
with-geo = ["postgres-shared/with-geo"]
with-rustc-serialize = ["postgres-shared/with-rustc-serialize"]
with-serde_json = ["postgres-shared/with-serde_json"]
with-time = ["postgres-shared/with-time"]
with-uuid = ["postgres-shared/with-uuid"]
"with-bit-vec-0.5" = ["postgres-shared/with-bit-vec-0.5"]
"with-chrono-0.4" = ["postgres-shared/with-chrono-0.4"]
"with-eui48-0.3" = ["postgres-shared/with-eui48-0.3"]
"with-geo-0.8" = ["postgres-shared/with-geo-0.8"]
"with-serde_json-1" = ["postgres-shared/with-serde_json-1"]
"with-uuid-0.6" = ["postgres-shared/with-uuid-0.6"]
with-openssl = ["openssl"]
with-native-tls = ["native-tls"]
@ -62,7 +58,6 @@ socket2 = { version = "0.3.5", features = ["unix"] }
openssl = { version = "0.9.23", optional = true }
native-tls = { version = "0.1", optional = true }
rustc-serialize = { version = "0.3", optional = true }
schannel = { version = "0.1", optional = true }
security-framework = { version = "0.1.2", optional = true }
@ -73,11 +68,9 @@ postgres-shared = { version = "0.4.1", path = "../postgres-shared" }
hex = "0.3"
url = "1.0"
bit-vec = "0.4"
bit-vec = "0.5"
chrono = "0.4"
eui48 = "0.3"
geo = "0.4"
rustc-serialize = "0.3"
geo = "0.8"
serde_json = "1.0"
time = "0.1.14"
uuid = "0.5"
uuid = "0.6"

View File

@ -8,21 +8,17 @@ use std::result;
use postgres::types::{FromSql, FromSqlOwned, IsNull, Kind, ToSql, Type, WrongType};
use postgres::{Connection, TlsMode};
#[cfg(feature = "with-bit-vec")]
#[cfg(feature = "with-bit-vec-0.5")]
mod bit_vec;
#[cfg(feature = "with-chrono")]
#[cfg(feature = "with-chrono-0.4")]
mod chrono;
#[cfg(feature = "with-eui48")]
#[cfg(feature = "with-eui48-0.3")]
mod eui48;
#[cfg(feature = "with-geo")]
#[cfg(feature = "with-geo-0.8")]
mod geo;
#[cfg(feature = "with-rustc-serialize")]
mod rustc_serialize;
#[cfg(feature = "with-serde_json")]
#[cfg(feature = "with-serde_json-1")]
mod serde_json;
#[cfg(feature = "with-time")]
mod time;
#[cfg(feature = "with-uuid")]
#[cfg(feature = "with-uuid-0.6")]
mod uuid;
fn test_type<T, S>(sql_type: &str, checks: &[(T, S)])

View File

@ -1,41 +0,0 @@
extern crate rustc_serialize;
use self::rustc_serialize::json::Json;
use types::test_type;
#[test]
fn test_json_params() {
test_type(
"JSON",
&[
(
Some(Json::from_str("[10, 11, 12]").unwrap()),
"'[10, 11, 12]'",
),
(
Some(Json::from_str("{\"f\": \"asd\"}").unwrap()),
"'{\"f\": \"asd\"}'",
),
(None, "NULL"),
],
)
}
#[test]
fn test_jsonb_params() {
test_type(
"JSONB",
&[
(
Some(Json::from_str("[10, 11, 12]").unwrap()),
"'[10, 11, 12]'",
),
(
Some(Json::from_str("{\"f\": \"asd\"}").unwrap()),
"'{\"f\": \"asd\"}'",
),
(None, "NULL"),
],
)
}

View File

@ -1,72 +0,0 @@
extern crate time;
use self::time::Timespec;
use types::test_type;
use postgres::types::Timestamp;
#[test]
fn test_tm_params() {
fn make_check<'a>(time: &'a str) -> (Option<Timespec>, &'a str) {
(
Some(
time::strptime(time, "'%Y-%m-%d %H:%M:%S.%f'")
.unwrap()
.to_timespec(),
),
time,
)
}
test_type(
"TIMESTAMP",
&[
make_check("'1970-01-01 00:00:00.01'"),
make_check("'1965-09-25 11:19:33.100314'"),
make_check("'2010-02-09 23:11:45.1202'"),
(None, "NULL"),
],
);
test_type(
"TIMESTAMP WITH TIME ZONE",
&[
make_check("'1970-01-01 00:00:00.01'"),
make_check("'1965-09-25 11:19:33.100314'"),
make_check("'2010-02-09 23:11:45.1202'"),
(None, "NULL"),
],
);
}
#[test]
fn test_with_special_tm_params() {
fn make_check<'a>(time: &'a str) -> (Timestamp<Timespec>, &'a str) {
(
Timestamp::Value(
time::strptime(time, "'%Y-%m-%d %H:%M:%S.%f'")
.unwrap()
.to_timespec(),
),
time,
)
}
test_type(
"TIMESTAMP",
&[
make_check("'1970-01-01 00:00:00.01'"),
make_check("'1965-09-25 11:19:33.100314'"),
make_check("'2010-02-09 23:11:45.1202'"),
(Timestamp::PosInfinity, "'infinity'"),
(Timestamp::NegInfinity, "'-infinity'"),
],
);
test_type(
"TIMESTAMP WITH TIME ZONE",
&[
make_check("'1970-01-01 00:00:00.01'"),
make_check("'1965-09-25 11:19:33.100314'"),
make_check("'2010-02-09 23:11:45.1202'"),
(Timestamp::PosInfinity, "'infinity'"),
(Timestamp::NegInfinity, "'-infinity'"),
],
);
}

View File

@ -11,14 +11,12 @@ categories = ["database"]
[package.metadata.docs.rs]
features = [
"with-bit-vec",
"with-chrono",
"with-eui48",
"with-geo",
"with-rustc-serialize",
"with-serde_json",
"with-time",
"with-uuid",
"with-bit-vec-0.5",
"with-chrono-0.4",
"with-eui48-0.3",
"with-geo-0.8",
"with-serde_json-1",
"with-uuid-0.6",
"with-openssl",
]
@ -26,14 +24,12 @@ features = [
circle-ci = { repository = "sfackler/rust-postgres" }
[features]
with-bit-vec = ["postgres-shared/with-bit-vec"]
with-chrono = ["postgres-shared/with-chrono"]
with-eui48 = ["postgres-shared/with-eui48"]
with-geo = ["postgres-shared/with-geo"]
with-rustc-serialize = ["postgres-shared/with-rustc-serialize"]
with-serde_json = ["postgres-shared/with-serde_json"]
with-time = ["postgres-shared/with-time"]
with-uuid = ["postgres-shared/with-uuid"]
"with-bit-vec-0.5" = ["postgres-shared/with-bit-vec-0.5"]
"with-chrono-0.4" = ["postgres-shared/with-chrono-0.4"]
"with-eui48-0.3" = ["postgres-shared/with-eui48-0.3"]
"with-geo-0.8" = ["postgres-shared/with-geo-0.8"]
"with-serde_json-1" = ["postgres-shared/with-serde_json-1"]
"with-uuid-0.6" = ["postgres-shared/with-uuid-0.6"]
with-openssl = ["tokio-openssl", "openssl"]