Skip to content

Commit 4eb72ab

Browse files
authored
Replace serial with GENERATED BY DEFAULT AS IDENTITY (#918)
## PR Info <!-- mention the related issue --> - Closes #688 ## Breaking Changes - [x] The query builder generates auto increment columns as GENERATED BY DEFAULT AS IDENTITY instead of SERIAL in PostgreSQL
1 parent 2ad8d60 commit 4eb72ab

File tree

6 files changed

+21
-17
lines changed

6 files changed

+21
-17
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ assert_eq!(std::mem::size_of::<Value>(), 32);
5959

6060
### Breaking Changes
6161

62+
* Replace `serial` with `GENERATED BY DEFAULT AS IDENTITY`
63+
6264
* Removed inherent `SimpleExpr` methods that duplicate `ExprTrait`. If you encounter the following error, please add `use sea_query::ExprTrait` in scope https://github.com/SeaQL/sea-query/pull/890
6365
```rust
6466
error[E0599]: no method named `like` found for enum `sea_query::Expr` in the current scope

src/backend/postgres/table.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -242,12 +242,14 @@ impl TableBuilder for PostgresQueryBuilder {
242242

243243
impl PostgresQueryBuilder {
244244
fn prepare_column_auto_increment(&self, column_type: &ColumnType, sql: &mut dyn SqlWriter) {
245-
match &column_type {
246-
ColumnType::SmallInteger => write!(sql, "smallserial").unwrap(),
247-
ColumnType::Integer => write!(sql, "serial").unwrap(),
248-
ColumnType::BigInteger => write!(sql, "bigserial").unwrap(),
245+
let num_ty = match column_type {
246+
ColumnType::SmallInteger => "SMALLINT",
247+
ColumnType::Integer => "INTEGER",
248+
ColumnType::BigInteger => "BIGINT",
249249
_ => unimplemented!("{:?} doesn't support auto increment", column_type),
250-
}
250+
};
251+
252+
write!(sql, "{num_ty} GENERATED BY DEFAULT AS IDENTITY").unwrap();
251253
}
252254

253255
fn prepare_column_type_check_auto_increment(

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@
565565
//! table.to_string(PostgresQueryBuilder),
566566
//! [
567567
//! r#"CREATE TABLE IF NOT EXISTS "character" ("#,
568-
//! r#""id" serial NOT NULL PRIMARY KEY,"#,
568+
//! r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
569569
//! r#""font_size" integer NOT NULL,"#,
570570
//! r#""character" varchar NOT NULL,"#,
571571
//! r#""size_w" integer NOT NULL,"#,

src/table/column.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ impl ColumnDef {
671671
/// .to_string(PostgresQueryBuilder),
672672
/// [
673673
/// r#"CREATE TABLE "glyph" ("#,
674-
/// r#""id" serial NOT NULL PRIMARY KEY,"#,
674+
/// r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
675675
/// r#""tokens" ltree"#,
676676
/// r#")"#,
677677
/// ]

src/table/create.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ use crate::{
5252
/// table.to_string(PostgresQueryBuilder),
5353
/// [
5454
/// r#"CREATE TABLE IF NOT EXISTS "character" ("#,
55-
/// r#""id" serial NOT NULL PRIMARY KEY,"#,
55+
/// r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
5656
/// r#""font_size" integer NOT NULL,"#,
5757
/// r#""character" varchar NOT NULL,"#,
5858
/// r#""size_w" integer NOT NULL,"#,
@@ -385,7 +385,7 @@ impl TableCreateStatement {
385385
/// statement.to_string(PostgresQueryBuilder),
386386
/// [
387387
/// r#"CREATE TEMPORARY TABLE "font" ("#,
388-
/// r#""id" serial NOT NULL PRIMARY KEY,"#,
388+
/// r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
389389
/// r#""name" varchar NOT NULL"#,
390390
/// r#")"#,
391391
/// ]

tests/postgres/table.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ fn create_1() {
1818
.to_string(PostgresQueryBuilder),
1919
[
2020
r#"CREATE TABLE "glyph" ("#,
21-
r#""id" serial NOT NULL PRIMARY KEY,"#,
21+
r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
2222
r#""aspect" double precision NOT NULL,"#,
2323
r#""image" text"#,
2424
r#")"#,
@@ -45,7 +45,7 @@ fn create_2() {
4545
.to_string(PostgresQueryBuilder),
4646
[
4747
r#"CREATE TABLE "font" ("#,
48-
r#""id" serial NOT NULL PRIMARY KEY,"#,
48+
r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
4949
r#""name" varchar NOT NULL,"#,
5050
r#""variant" varchar(255) NOT NULL,"#,
5151
r#""language" varchar(255) NOT NULL"#,
@@ -88,7 +88,7 @@ fn create_3() {
8888
.to_string(PostgresQueryBuilder),
8989
[
9090
r#"CREATE TABLE IF NOT EXISTS "character" ("#,
91-
r#""id" serial NOT NULL PRIMARY KEY,"#,
91+
r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
9292
r#""font_size" integer NOT NULL,"#,
9393
r#""character" varchar(255) NOT NULL,"#,
9494
r#""size_w" integer NOT NULL,"#,
@@ -515,7 +515,7 @@ fn alter_10() {
515515
.to_string(PostgresQueryBuilder),
516516
[
517517
r#"ALTER TABLE "glyph""#,
518-
r#"ADD COLUMN "aspect" serial NOT NULL UNIQUE PRIMARY KEY"#,
518+
r#"ADD COLUMN "aspect" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL UNIQUE PRIMARY KEY"#,
519519
]
520520
.join(" ")
521521
);
@@ -627,7 +627,7 @@ fn create_16() {
627627
.to_string(PostgresQueryBuilder),
628628
[
629629
r#"CREATE TABLE "glyph" ("#,
630-
r#""id" serial NOT NULL PRIMARY KEY,"#,
630+
r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
631631
r#""tokens" ltree"#,
632632
r#")"#,
633633
]
@@ -661,7 +661,7 @@ fn create_17() {
661661
.to_string(PostgresQueryBuilder),
662662
[
663663
r#"CREATE TABLE "font" ("#,
664-
r#""id" serial NOT NULL PRIMARY KEY,"#,
664+
r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
665665
r#""name" varchar,"#,
666666
r#""variant" varchar(255) NOT NULL,"#,
667667
r#""language" varchar(255) NOT NULL,"#,
@@ -689,7 +689,7 @@ fn create_18() {
689689
.to_string(PostgresQueryBuilder),
690690
[
691691
r#"CREATE TEMPORARY TABLE "font" ("#,
692-
r#""id" serial NOT NULL PRIMARY KEY,"#,
692+
r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
693693
r#""name" varchar NOT NULL"#,
694694
r#")"#,
695695
]
@@ -728,7 +728,7 @@ fn create_19() {
728728
.to_string(PostgresQueryBuilder),
729729
[
730730
r#"CREATE TABLE IF NOT EXISTS "character" ("#,
731-
r#""id" serial NOT NULL PRIMARY KEY,"#,
731+
r#""id" INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,"#,
732732
r#""font_size" integer NOT NULL,"#,
733733
r#""character" varchar(255) NOT NULL,"#,
734734
r#""size_w" integer NOT NULL,"#,

0 commit comments

Comments
 (0)