From e2f7cb1ad080b4fd62907a52894fcdea48dba6dc Mon Sep 17 00:00:00 2001 From: Olivier Lischer Date: Tue, 9 Feb 2021 11:42:18 +0100 Subject: [PATCH] Add smallserial and bigserial column types --- src/backend/pg.rs | 4 ++++ src/tests/pg/add_column.rs | 24 ++++++++++++++++++++++++ src/types/builders.rs | 11 ++++++++++- src/types/impls.rs | 6 +++++- 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/backend/pg.rs b/src/backend/pg.rs index d309bda..586858f 100644 --- a/src/backend/pg.rs +++ b/src/backend/pg.rs @@ -63,6 +63,8 @@ impl SqlGenerator for Pg { Primary => format!("{}\"{}\" {}", Pg::prefix(ex), name, Pg::print_type(bt, schema)), Integer => format!("{}\"{}\" {}", Pg::prefix(ex), name, Pg::print_type(bt, schema)), Serial => format!("{}\"{}\" {}", Pg::prefix(ex), name, Pg::print_type(bt, schema)), + SmallSerial => format!("{}\"{}\" {}", Pg::prefix(ex), name, Pg::print_type(bt, schema)), + BigSerial => format!("{}\"{}\" {}", Pg::prefix(ex), name, Pg::print_type(bt, schema)), Float => format!("{}\"{}\" {}", Pg::prefix(ex), name, Pg::print_type(bt, schema)), Double => format!("{}\"{}\" {}", Pg::prefix(ex), name, Pg::print_type(bt, schema)), UUID => format!("{}\"{}\" {}", Pg::prefix(ex), name, Pg::print_type(bt, schema)), @@ -210,6 +212,8 @@ impl Pg { Primary => format!("SERIAL PRIMARY KEY NOT NULL"), Integer => format!("INTEGER"), Serial => format!("SERIAL"), + SmallSerial => format!("SMALLSERIAL"), + BigSerial => format!("BIGSERIAL"), Float => format!("FLOAT"), Double => format!("DOUBLE PRECISION"), UUID => format!("UUID"), diff --git a/src/tests/pg/add_column.rs b/src/tests/pg/add_column.rs index ef889ec..cc14585 100644 --- a/src/tests/pg/add_column.rs +++ b/src/tests/pg/add_column.rs @@ -25,6 +25,30 @@ fn integer() { assert_eq!(String::from("ADD COLUMN \"Integer\" INTEGER NOT NULL"), sql); } +#[test] +fn serial() { + let sql = Pg::add_column(true, None, "Serial", &types::serial()); + assert_eq!(String::from("ADD COLUMN \"Serial\" SERIAL NOT NULL"), sql); +} + +#[test] +fn big_serial() { + let sql = Pg::add_column(true, None, "BigSerial", &types::big_serial()); + assert_eq!( + String::from("ADD COLUMN \"BigSerial\" BIGSERIAL NOT NULL"), + sql + ); +} + +#[test] +fn small_serial() { + let sql = Pg::add_column(true, None, "SmallSerial", &types::small_serial()); + assert_eq!( + String::from("ADD COLUMN \"SmallSerial\" SMALLSERIAL NOT NULL"), + sql + ); +} + #[test] fn float() { let sql = Pg::add_column(true, None, "Float", &types::float()); diff --git a/src/types/builders.rs b/src/types/builders.rs index 6a18192..f88fd6a 100644 --- a/src/types/builders.rs +++ b/src/types/builders.rs @@ -36,11 +36,20 @@ pub fn integer() -> Type { Type::new(BaseType::Integer) } -/// Create an auto-incrementing integer type +/// Create an auto-incrementing 4 integer type pub fn serial() -> Type { Type::new(BaseType::Serial) } +/// Create an auto-incrementing 2 byte integer type +pub fn small_serial() -> Type { + Type::new(BaseType::SmallSerial) +} + +/// Create an auto-incrementing 8 byte integer type +pub fn big_serial() -> Type { + Type::new(BaseType::BigSerial) +} /// A 32-bit floating point type pub fn float() -> Type { Type::new(BaseType::Float) diff --git a/src/types/impls.rs b/src/types/impls.rs index 114a381..3bf053a 100644 --- a/src/types/impls.rs +++ b/src/types/impls.rs @@ -34,8 +34,12 @@ pub enum BaseType { Primary, /// Simple integer Integer, - /// An integer that as a default value of the next biggest number + /// An integer that as a default value of the next biggest number (4 bytes) Serial, + /// An integer that as a default value of the next biggest number (2 bytes) + SmallSerial, + /// An integer that as a default value of the next biggest number (8 bytes) + BigSerial, /// Floating point number Float, /// Like Float but `~ ~ d o u b l e p r e c i s i o n ~ ~`