Skip to content

Commit 2bec23a

Browse files
committed
testing cursor by 4+ columns
1 parent 9c71aeb commit 2bec23a

File tree

1 file changed

+156
-0
lines changed

1 file changed

+156
-0
lines changed

src/executor/cursor.rs

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,4 +720,160 @@ mod tests {
720720

721721
Ok(())
722722
}
723+
724+
mod composite_entity {
725+
use crate as sea_orm;
726+
use crate::entity::prelude::*;
727+
728+
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
729+
#[sea_orm(table_name = "t")]
730+
pub struct Model {
731+
#[sea_orm(primary_key)]
732+
pub col_1: String,
733+
#[sea_orm(primary_key)]
734+
pub col_2: String,
735+
#[sea_orm(primary_key)]
736+
pub col_3: String,
737+
#[sea_orm(primary_key)]
738+
pub col_4: String,
739+
#[sea_orm(primary_key)]
740+
pub col_5: String,
741+
#[sea_orm(primary_key)]
742+
pub col_6: String,
743+
#[sea_orm(primary_key)]
744+
pub col_7: String,
745+
#[sea_orm(primary_key)]
746+
pub col_8: String,
747+
#[sea_orm(primary_key)]
748+
pub col_9: String,
749+
#[sea_orm(primary_key)]
750+
pub col_10: String,
751+
#[sea_orm(primary_key)]
752+
pub col_11: String,
753+
#[sea_orm(primary_key)]
754+
pub col_12: String,
755+
}
756+
757+
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
758+
pub enum Relation {}
759+
760+
impl ActiveModelBehavior for ActiveModel {}
761+
}
762+
763+
#[smol_potat::test]
764+
async fn cursor_by_many() -> Result<(), DbErr> {
765+
use composite_entity::*;
766+
767+
let base_sql = [
768+
r#"SELECT "t"."col_1", "t"."col_2", "t"."col_3", "t"."col_4", "t"."col_5", "t"."col_6", "t"."col_7", "t"."col_8", "t"."col_9", "t"."col_10", "t"."col_11", "t"."col_12""#,
769+
r#"FROM "t" WHERE"#,
770+
].join(" ");
771+
772+
assert_eq!(
773+
DbBackend::Postgres.build(&
774+
Entity::find()
775+
.cursor_by((Column::Col1, Column::Col2, Column::Col3, Column::Col4))
776+
.after(("val_1", "val_2", "val_3", "val_4"))
777+
.query
778+
).to_string(),
779+
format!("{base_sql} {}", [
780+
r#"("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" > 'val_4')"#,
781+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" > 'val_3')"#,
782+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" > 'val_2')"#,
783+
r#"OR "t"."col_1" > 'val_1'"#,
784+
].join(" "))
785+
);
786+
787+
assert_eq!(
788+
DbBackend::Postgres.build(&
789+
Entity::find()
790+
.cursor_by((Column::Col1, Column::Col2, Column::Col3, Column::Col4, Column::Col5))
791+
.after(("val_1", "val_2", "val_3", "val_4", "val_5"))
792+
.query
793+
).to_string(),
794+
format!("{base_sql} {}", [
795+
r#"("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" > 'val_5')"#,
796+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" > 'val_4')"#,
797+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" > 'val_3')"#,
798+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" > 'val_2')"#,
799+
r#"OR "t"."col_1" > 'val_1'"#,
800+
].join(" "))
801+
);
802+
803+
assert_eq!(
804+
DbBackend::Postgres.build(&
805+
Entity::find()
806+
.cursor_by((Column::Col1, Column::Col2, Column::Col3, Column::Col4, Column::Col5, Column::Col6))
807+
.after(("val_1", "val_2", "val_3", "val_4", "val_5", "val_6"))
808+
.query
809+
).to_string(),
810+
format!("{base_sql} {}", [
811+
r#"("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" = 'val_5' AND "t"."col_6" > 'val_6')"#,
812+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" > 'val_5')"#,
813+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" > 'val_4')"#,
814+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" > 'val_3')"#,
815+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" > 'val_2')"#,
816+
r#"OR "t"."col_1" > 'val_1'"#,
817+
].join(" "))
818+
);
819+
820+
assert_eq!(
821+
DbBackend::Postgres.build(&
822+
Entity::find()
823+
.cursor_by((Column::Col1, Column::Col2, Column::Col3, Column::Col4, Column::Col5, Column::Col6, Column::Col7))
824+
.before(("val_1", "val_2", "val_3", "val_4", "val_5", "val_6", "val_7"))
825+
.query
826+
).to_string(),
827+
format!("{base_sql} {}", [
828+
r#"("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" = 'val_5' AND "t"."col_6" = 'val_6' AND "t"."col_7" < 'val_7')"#,
829+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" = 'val_5' AND "t"."col_6" < 'val_6')"#,
830+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" < 'val_5')"#,
831+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" < 'val_4')"#,
832+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" < 'val_3')"#,
833+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" < 'val_2')"#,
834+
r#"OR "t"."col_1" < 'val_1'"#,
835+
].join(" "))
836+
);
837+
838+
assert_eq!(
839+
DbBackend::Postgres.build(&
840+
Entity::find()
841+
.cursor_by((Column::Col1, Column::Col2, Column::Col3, Column::Col4, Column::Col5, Column::Col6, Column::Col7, Column::Col8))
842+
.before(("val_1", "val_2", "val_3", "val_4", "val_5", "val_6", "val_7", "val_8"))
843+
.query
844+
).to_string(),
845+
format!("{base_sql} {}", [
846+
r#"("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" = 'val_5' AND "t"."col_6" = 'val_6' AND "t"."col_7" = 'val_7' AND "t"."col_8" < 'val_8')"#,
847+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" = 'val_5' AND "t"."col_6" = 'val_6' AND "t"."col_7" < 'val_7')"#,
848+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" = 'val_5' AND "t"."col_6" < 'val_6')"#,
849+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" < 'val_5')"#,
850+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" < 'val_4')"#,
851+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" < 'val_3')"#,
852+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" < 'val_2')"#,
853+
r#"OR "t"."col_1" < 'val_1'"#,
854+
].join(" "))
855+
);
856+
857+
assert_eq!(
858+
DbBackend::Postgres.build(&
859+
Entity::find()
860+
.cursor_by((Column::Col1, Column::Col2, Column::Col3, Column::Col4, Column::Col5, Column::Col6, Column::Col7, Column::Col8, Column::Col9))
861+
.before(("val_1", "val_2", "val_3", "val_4", "val_5", "val_6", "val_7", "val_8", "val_9"))
862+
.query
863+
).to_string(),
864+
format!("{base_sql} {}", [
865+
r#"("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" = 'val_5' AND "t"."col_6" = 'val_6' AND "t"."col_7" = 'val_7' AND "t"."col_8" = 'val_8' AND "t"."col_9" < 'val_9')"#,
866+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" = 'val_5' AND "t"."col_6" = 'val_6' AND "t"."col_7" = 'val_7' AND "t"."col_8" < 'val_8')"#,
867+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" = 'val_5' AND "t"."col_6" = 'val_6' AND "t"."col_7" < 'val_7')"#,
868+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" = 'val_5' AND "t"."col_6" < 'val_6')"#,
869+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" = 'val_4' AND "t"."col_5" < 'val_5')"#,
870+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" = 'val_3' AND "t"."col_4" < 'val_4')"#,
871+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" = 'val_2' AND "t"."col_3" < 'val_3')"#,
872+
r#"OR ("t"."col_1" = 'val_1' AND "t"."col_2" < 'val_2')"#,
873+
r#"OR "t"."col_1" < 'val_1'"#,
874+
].join(" "))
875+
);
876+
877+
Ok(())
878+
}
723879
}

0 commit comments

Comments
 (0)