1use serde::{Deserialize, Serialize};
3
4pub trait Constraint {
6 fn to_sql(&self) -> String;
8 fn name(&self) -> &str;
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct CheckConstraint {
15 pub name: String,
17 pub check: String,
19}
20
21impl CheckConstraint {
22 pub fn new(name: impl Into<String>, check: impl Into<String>) -> Self {
34 Self {
35 name: name.into(),
36 check: check.into(),
37 }
38 }
39}
40
41impl Constraint for CheckConstraint {
42 fn to_sql(&self) -> String {
43 format!("CONSTRAINT {} CHECK ({})", self.name, self.check)
44 }
45
46 fn name(&self) -> &str {
47 &self.name
48 }
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct UniqueConstraint {
54 pub name: String,
56 pub fields: Vec<String>,
58 pub condition: Option<String>, }
61
62impl UniqueConstraint {
63 pub fn new(name: impl Into<String>, fields: Vec<String>) -> Self {
75 Self {
76 name: name.into(),
77 fields,
78 condition: None,
79 }
80 }
81 pub fn with_condition(mut self, condition: String) -> Self {
83 self.condition = Some(condition);
84 self
85 }
86}
87
88impl Constraint for UniqueConstraint {
89 fn to_sql(&self) -> String {
90 let fields = self.fields.join(", ");
91 let mut sql = format!("CONSTRAINT {} UNIQUE ({})", self.name, fields);
92 if let Some(ref cond) = self.condition {
93 sql.push_str(&format!(" WHERE {}", cond));
94 }
95 sql
96 }
97
98 fn name(&self) -> &str {
99 &self.name
100 }
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct ForeignKeyConstraint {
106 pub name: String,
108 pub field: String,
110 pub references_table: String,
112 pub references_field: String,
114 pub on_delete: OnDelete,
116 pub on_update: OnUpdate,
118}
119
120#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
121pub enum OnDelete {
123 Cascade,
125 SetNull,
127 SetDefault,
129 Restrict,
131 NoAction,
133}
134
135impl OnDelete {
136 pub fn to_sql(&self) -> &'static str {
139 match self {
140 OnDelete::Cascade => "CASCADE",
141 OnDelete::SetNull => "SET NULL",
142 OnDelete::SetDefault => "SET DEFAULT",
143 OnDelete::Restrict => "RESTRICT",
144 OnDelete::NoAction => "NO ACTION",
145 }
146 }
147}
148
149#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
150pub enum OnUpdate {
152 Cascade,
154 SetNull,
156 SetDefault,
158 Restrict,
160 NoAction,
162}
163
164impl OnUpdate {
165 pub fn to_sql(&self) -> &'static str {
168 match self {
169 OnUpdate::Cascade => "CASCADE",
170 OnUpdate::SetNull => "SET NULL",
171 OnUpdate::SetDefault => "SET DEFAULT",
172 OnUpdate::Restrict => "RESTRICT",
173 OnUpdate::NoAction => "NO ACTION",
174 }
175 }
176}
177
178impl ForeignKeyConstraint {
179 pub fn new(
196 name: impl Into<String>,
197 field: impl Into<String>,
198 references_table: impl Into<String>,
199 references_field: impl Into<String>,
200 ) -> Self {
201 Self {
202 name: name.into(),
203 field: field.into(),
204 references_table: references_table.into(),
205 references_field: references_field.into(),
206 on_delete: OnDelete::Restrict,
207 on_update: OnUpdate::NoAction,
208 }
209 }
210 pub fn on_delete(mut self, on_delete: OnDelete) -> Self {
213 self.on_delete = on_delete;
214 self
215 }
216 pub fn on_update(mut self, on_update: OnUpdate) -> Self {
219 self.on_update = on_update;
220 self
221 }
222}
223
224impl Constraint for ForeignKeyConstraint {
225 fn to_sql(&self) -> String {
226 format!(
227 "CONSTRAINT {} FOREIGN KEY ({}) REFERENCES {} ({}) ON DELETE {} ON UPDATE {}",
228 self.name,
229 self.field,
230 self.references_table,
231 self.references_field,
232 self.on_delete.to_sql(),
233 self.on_update.to_sql()
234 )
235 }
236
237 fn name(&self) -> &str {
238 &self.name
239 }
240}
241
242#[cfg(test)]
243mod tests {
244 use super::*;
245
246 #[test]
247 fn test_constraints_check() {
248 let constraint = CheckConstraint::new("age_check", "age >= 0");
249 assert_eq!(constraint.to_sql(), "CONSTRAINT age_check CHECK (age >= 0)");
250 assert_eq!(constraint.name(), "age_check");
251 }
252
253 #[test]
254 fn test_unique_constraint() {
255 let constraint = UniqueConstraint::new("unique_email", vec!["email".to_string()]);
256 assert_eq!(
257 constraint.to_sql(),
258 "CONSTRAINT unique_email UNIQUE (email)"
259 );
260 }
261
262 #[test]
263 fn test_unique_constraint_multiple_fields() {
264 let constraint = UniqueConstraint::new(
265 "unique_user_email",
266 vec!["user_id".to_string(), "email".to_string()],
267 );
268 assert_eq!(
269 constraint.to_sql(),
270 "CONSTRAINT unique_user_email UNIQUE (user_id, email)"
271 );
272 }
273
274 #[test]
275 fn test_unique_constraint_with_condition() {
276 let constraint = UniqueConstraint::new("unique_active_email", vec!["email".to_string()])
277 .with_condition("deleted_at IS NULL".to_string());
278 assert_eq!(
279 constraint.to_sql(),
280 "CONSTRAINT unique_active_email UNIQUE (email) WHERE deleted_at IS NULL"
281 );
282 }
283
284 #[test]
285 fn test_constraints_foreign_key_constraint() {
286 let constraint = ForeignKeyConstraint::new("fk_user", "user_id", "users", "id");
287 let sql = constraint.to_sql();
288 assert_eq!(
289 sql,
290 "CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE RESTRICT ON UPDATE NO ACTION",
291 "Expected exact foreign key constraint SQL, got: {}",
292 sql
293 );
294 }
295
296 #[test]
297 fn test_foreign_key_cascade() {
298 let constraint = ForeignKeyConstraint::new("fk_post", "post_id", "posts", "id")
299 .on_delete(OnDelete::Cascade)
300 .on_update(OnUpdate::Cascade);
301 let sql = constraint.to_sql();
302 assert_eq!(
303 sql,
304 "CONSTRAINT fk_post FOREIGN KEY (post_id) REFERENCES posts (id) ON DELETE CASCADE ON UPDATE CASCADE",
305 "Expected exact foreign key constraint SQL with CASCADE actions, got: {}",
306 sql
307 );
308 }
309
310 #[test]
311 fn test_foreign_key_set_null() {
312 let constraint = ForeignKeyConstraint::new("fk_author", "author_id", "users", "id")
313 .on_delete(OnDelete::SetNull);
314 let sql = constraint.to_sql();
315 assert_eq!(
316 sql,
317 "CONSTRAINT fk_author FOREIGN KEY (author_id) REFERENCES users (id) ON DELETE SET NULL ON UPDATE NO ACTION",
318 "Expected exact foreign key constraint SQL with SET NULL action, got: {}",
319 sql
320 );
321 }
322}
323
324#[cfg(test)]
329mod constraints_extended_tests {
330 use super::*;
331
332 #[test]
333 fn test_abstract_name() {
335 #[allow(unused)]
340 let constraint = CheckConstraint::new("test", "age >= 0");
341 }
343
344 #[test]
345 fn test_abstract_name_1() {
347 use super::*;
351 let constraint = CheckConstraint::new("test_constraint", "value > 0");
352 assert_eq!(constraint.name(), "test_constraint");
353 let sql = constraint.to_sql();
354 assert_eq!(
355 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
356 "Expected exact CHECK constraint SQL, got: {}",
357 sql
358 );
359 }
360
361 #[test]
362 fn test_condition_must_be_q() {
364 use super::*;
368 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
369 assert_eq!(constraint.name(), "test_constraint");
370 let sql = constraint.to_sql();
371 assert_eq!(
372 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
373 "Expected exact CHECK constraint SQL, got: {}",
374 sql
375 );
376 }
377
378 #[test]
379 fn test_condition_must_be_q_1() {
381 use super::*;
385 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
386 assert_eq!(constraint.name(), "test_constraint");
387 let sql = constraint.to_sql();
388 assert_eq!(
389 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
390 "Expected exact CHECK constraint SQL, got: {}",
391 sql
392 );
393 }
394
395 #[test]
396 fn test_constraint_sql() {
398 use super::*;
402 let constraint = CheckConstraint::new("test_constraint", "value > 0");
403 assert_eq!(constraint.name(), "test_constraint");
404 let sql = constraint.to_sql();
405 assert_eq!(
406 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
407 "Expected exact CHECK constraint SQL, got: {}",
408 sql
409 );
410 }
411
412 #[test]
413 fn test_constraint_sql_1() {
415 use super::*;
419 let constraint = CheckConstraint::new("test_constraint", "value > 0");
420 assert_eq!(constraint.name(), "test_constraint");
421 let sql = constraint.to_sql();
422 assert_eq!(
423 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
424 "Expected exact CHECK constraint SQL, got: {}",
425 sql
426 );
427 }
428
429 #[test]
430 fn test_contains_expressions() {
432 use super::*;
436 let constraint = CheckConstraint::new("test_constraint", "value > 0");
437 assert_eq!(constraint.name(), "test_constraint");
438 let sql = constraint.to_sql();
439 assert_eq!(
440 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
441 "Expected exact CHECK constraint SQL, got: {}",
442 sql
443 );
444 }
445
446 #[test]
447 fn test_contains_expressions_1() {
449 use super::*;
453 let constraint = CheckConstraint::new("test_constraint", "value > 0");
454 assert_eq!(constraint.name(), "test_constraint");
455 let sql = constraint.to_sql();
456 assert_eq!(
457 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
458 "Expected exact CHECK constraint SQL, got: {}",
459 sql
460 );
461 }
462
463 #[test]
464 fn test_create_sql() {
466 use super::*;
470 let constraint = CheckConstraint::new("test_constraint", "value > 0");
471 assert_eq!(constraint.name(), "test_constraint");
472 let sql = constraint.to_sql();
473 assert_eq!(
474 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
475 "Expected exact CHECK constraint SQL, got: {}",
476 sql
477 );
478 }
479
480 #[test]
481 fn test_create_sql_1() {
483 use super::*;
487 let constraint = CheckConstraint::new("test_constraint", "value > 0");
488 assert_eq!(constraint.name(), "test_constraint");
489 let sql = constraint.to_sql();
490 assert_eq!(
491 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
492 "Expected exact CHECK constraint SQL, got: {}",
493 sql
494 );
495 }
496
497 #[test]
498 fn test_custom_violation_code_message() {
500 use super::*;
504 let constraint = CheckConstraint::new("test_constraint", "value > 0");
505 assert_eq!(constraint.name(), "test_constraint");
506 let sql = constraint.to_sql();
507 assert_eq!(
508 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
509 "Expected exact CHECK constraint SQL, got: {}",
510 sql
511 );
512 }
513
514 #[test]
515 fn test_custom_violation_code_message_1() {
517 use super::*;
521 let constraint = CheckConstraint::new("test_constraint", "value > 0");
522 assert_eq!(constraint.name(), "test_constraint");
523 let sql = constraint.to_sql();
524 assert_eq!(
525 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
526 "Expected exact CHECK constraint SQL, got: {}",
527 sql
528 );
529 }
530
531 #[test]
532 fn test_custom_violation_error_message() {
534 use super::*;
538 let constraint = CheckConstraint::new("test_constraint", "value > 0");
539 assert_eq!(constraint.name(), "test_constraint");
540 let sql = constraint.to_sql();
541 assert_eq!(
542 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
543 "Expected exact CHECK constraint SQL, got: {}",
544 sql
545 );
546 }
547
548 #[test]
549 fn test_custom_violation_error_message_1() {
551 use super::*;
555 let constraint = CheckConstraint::new("test_constraint", "value > 0");
556 assert_eq!(constraint.name(), "test_constraint");
557 let sql = constraint.to_sql();
558 assert_eq!(
559 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
560 "Expected exact CHECK constraint SQL, got: {}",
561 sql
562 );
563 }
564
565 #[test]
566 fn test_custom_violation_error_message_clone() {
568 use super::*;
572 let constraint = CheckConstraint::new("test_constraint", "value > 0");
573 assert_eq!(constraint.name(), "test_constraint");
574 let sql = constraint.to_sql();
575 assert_eq!(
576 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
577 "Expected exact CHECK constraint SQL, got: {}",
578 sql
579 );
580 }
581
582 #[test]
583 fn test_custom_violation_error_message_clone_1() {
585 use super::*;
589 let constraint = CheckConstraint::new("test_constraint", "value > 0");
590 assert_eq!(constraint.name(), "test_constraint");
591 let sql = constraint.to_sql();
592 assert_eq!(
593 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
594 "Expected exact CHECK constraint SQL, got: {}",
595 sql
596 );
597 }
598
599 #[test]
600 fn test_database_constraint() {
602 use super::*;
606 let constraint = CheckConstraint::new("test_constraint", "value > 0");
607 assert_eq!(constraint.name(), "test_constraint");
608 let sql = constraint.to_sql();
609 assert_eq!(
610 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
611 "Expected exact CHECK constraint SQL, got: {}",
612 sql
613 );
614 }
615
616 #[test]
617 fn test_database_constraint_1() {
619 use super::*;
623 let constraint = CheckConstraint::new("test_constraint", "value > 0");
624 assert_eq!(constraint.name(), "test_constraint");
625 let sql = constraint.to_sql();
626 assert_eq!(
627 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
628 "Expected exact CHECK constraint SQL, got: {}",
629 sql
630 );
631 }
632
633 #[test]
634 fn test_database_constraint_2() {
636 use super::*;
640 let constraint = CheckConstraint::new("test_constraint", "value > 0");
641 assert_eq!(constraint.name(), "test_constraint");
642 let sql = constraint.to_sql();
643 assert_eq!(
644 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
645 "Expected exact CHECK constraint SQL, got: {}",
646 sql
647 );
648 }
649
650 #[test]
651 fn test_database_constraint_3() {
653 use super::*;
657 let constraint = CheckConstraint::new("test_constraint", "value > 0");
658 assert_eq!(constraint.name(), "test_constraint");
659 let sql = constraint.to_sql();
660 assert_eq!(
661 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
662 "Expected exact CHECK constraint SQL, got: {}",
663 sql
664 );
665 }
666
667 #[test]
668 fn test_database_constraint_unicode() {
670 use super::*;
674 let constraint = CheckConstraint::new("test_constraint", "value > 0");
675 assert_eq!(constraint.name(), "test_constraint");
676 let sql = constraint.to_sql();
677 assert_eq!(
678 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
679 "Expected exact CHECK constraint SQL, got: {}",
680 sql
681 );
682 }
683
684 #[test]
685 fn test_database_constraint_unicode_1() {
687 use super::*;
691 let constraint = CheckConstraint::new("test_constraint", "value > 0");
692 assert_eq!(constraint.name(), "test_constraint");
693 let sql = constraint.to_sql();
694 assert_eq!(
695 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
696 "Expected exact CHECK constraint SQL, got: {}",
697 sql
698 );
699 }
700
701 #[test]
702 fn test_database_constraint_with_condition() {
704 use super::*;
708 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
709 assert_eq!(constraint.name(), "test_constraint");
710 let sql = constraint.to_sql();
711 assert_eq!(
712 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
713 "Expected exact CHECK constraint SQL, got: {}",
714 sql
715 );
716 }
717
718 #[test]
719 fn test_database_constraint_with_condition_1() {
721 use super::*;
725 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
726 assert_eq!(constraint.name(), "test_constraint");
727 let sql = constraint.to_sql();
728 assert_eq!(
729 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
730 "Expected exact CHECK constraint SQL, got: {}",
731 sql
732 );
733 }
734
735 #[test]
736 fn test_database_default() {
738 use super::*;
742 let constraint = CheckConstraint::new("test_constraint", "value > 0");
743 assert_eq!(constraint.name(), "test_constraint");
744 let sql = constraint.to_sql();
745 assert_eq!(
746 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
747 "Expected exact CHECK constraint SQL, got: {}",
748 sql
749 );
750 }
751
752 #[test]
753 fn test_database_default_1() {
755 use super::*;
759 let constraint = CheckConstraint::new("test_constraint", "value > 0");
760 assert_eq!(constraint.name(), "test_constraint");
761 let sql = constraint.to_sql();
762 assert_eq!(
763 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
764 "Expected exact CHECK constraint SQL, got: {}",
765 sql
766 );
767 }
768
769 #[test]
770 fn test_database_default_2() {
772 use super::*;
776 let constraint = CheckConstraint::new("test_constraint", "value > 0");
777 assert_eq!(constraint.name(), "test_constraint");
778 let sql = constraint.to_sql();
779 assert_eq!(
780 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
781 "Expected exact CHECK constraint SQL, got: {}",
782 sql
783 );
784 }
785
786 #[test]
787 fn test_database_default_3() {
789 use super::*;
793 let constraint = CheckConstraint::new("test_constraint", "value > 0");
794 assert_eq!(constraint.name(), "test_constraint");
795 let sql = constraint.to_sql();
796 assert_eq!(
797 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
798 "Expected exact CHECK constraint SQL, got: {}",
799 sql
800 );
801 }
802
803 #[test]
804 fn test_deconstruction() {
806 use super::*;
810 let constraint = CheckConstraint::new("test_constraint", "value > 0");
811 assert_eq!(constraint.name(), "test_constraint");
812 let sql = constraint.to_sql();
813 assert_eq!(
814 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
815 "Expected exact CHECK constraint SQL, got: {}",
816 sql
817 );
818 }
819
820 #[test]
821 fn test_deconstruction_1() {
823 use super::*;
827 let constraint = CheckConstraint::new("test_constraint", "value > 0");
828 assert_eq!(constraint.name(), "test_constraint");
829 let sql = constraint.to_sql();
830 assert_eq!(
831 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
832 "Expected exact CHECK constraint SQL, got: {}",
833 sql
834 );
835 }
836
837 #[test]
838 fn test_deconstruction_2() {
840 use super::*;
844 let constraint = CheckConstraint::new("test_constraint", "value > 0");
845 assert_eq!(constraint.name(), "test_constraint");
846 let sql = constraint.to_sql();
847 assert_eq!(
848 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
849 "Expected exact CHECK constraint SQL, got: {}",
850 sql
851 );
852 }
853
854 #[test]
855 fn test_deconstruction_3() {
857 use super::*;
861 let constraint = CheckConstraint::new("test_constraint", "value > 0");
862 assert_eq!(constraint.name(), "test_constraint");
863 let sql = constraint.to_sql();
864 assert_eq!(
865 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
866 "Expected exact CHECK constraint SQL, got: {}",
867 sql
868 );
869 }
870
871 #[test]
872 fn test_deconstruction_4() {
874 use super::*;
878 let constraint = CheckConstraint::new("test_constraint", "value > 0");
879 assert_eq!(constraint.name(), "test_constraint");
880 let sql = constraint.to_sql();
881 assert_eq!(
882 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
883 "Expected exact CHECK constraint SQL, got: {}",
884 sql
885 );
886 }
887
888 #[test]
889 fn test_deconstruction_5() {
891 use super::*;
895 let constraint = CheckConstraint::new("test_constraint", "value > 0");
896 assert_eq!(constraint.name(), "test_constraint");
897 let sql = constraint.to_sql();
898 assert_eq!(
899 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
900 "Expected exact CHECK constraint SQL, got: {}",
901 sql
902 );
903 }
904
905 #[test]
906 fn test_deconstruction_with_condition() {
908 use super::*;
912 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
913 assert_eq!(constraint.name(), "test_constraint");
914 let sql = constraint.to_sql();
915 assert_eq!(
916 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
917 "Expected exact CHECK constraint SQL, got: {}",
918 sql
919 );
920 }
921
922 #[test]
923 fn test_deconstruction_with_condition_1() {
925 use super::*;
929 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
930 assert_eq!(constraint.name(), "test_constraint");
931 let sql = constraint.to_sql();
932 assert_eq!(
933 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
934 "Expected exact CHECK constraint SQL, got: {}",
935 sql
936 );
937 }
938
939 #[test]
940 fn test_deconstruction_with_deferrable() {
942 use super::*;
946 let constraint = CheckConstraint::new("test_constraint", "value > 0");
947 assert_eq!(constraint.name(), "test_constraint");
948 let sql = constraint.to_sql();
949 assert_eq!(
950 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
951 "Expected exact CHECK constraint SQL, got: {}",
952 sql
953 );
954 }
955
956 #[test]
957 fn test_deconstruction_with_deferrable_1() {
959 use super::*;
963 let constraint = CheckConstraint::new("test_constraint", "value > 0");
964 assert_eq!(constraint.name(), "test_constraint");
965 let sql = constraint.to_sql();
966 assert_eq!(
967 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
968 "Expected exact CHECK constraint SQL, got: {}",
969 sql
970 );
971 }
972
973 #[test]
974 fn test_deconstruction_with_expressions() {
976 use super::*;
980 let constraint = CheckConstraint::new("test_constraint", "value > 0");
981 assert_eq!(constraint.name(), "test_constraint");
982 let sql = constraint.to_sql();
983 assert_eq!(
984 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
985 "Expected exact CHECK constraint SQL, got: {}",
986 sql
987 );
988 }
989
990 #[test]
991 fn test_deconstruction_with_expressions_1() {
993 use super::*;
997 let constraint = CheckConstraint::new("test_constraint", "value > 0");
998 assert_eq!(constraint.name(), "test_constraint");
999 let sql = constraint.to_sql();
1000 assert_eq!(
1001 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1002 "Expected exact CHECK constraint SQL, got: {}",
1003 sql
1004 );
1005 }
1006
1007 #[test]
1008 fn test_deconstruction_with_include() {
1010 use super::*;
1014 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1015 assert_eq!(constraint.name(), "test_constraint");
1016 let sql = constraint.to_sql();
1017 assert_eq!(
1018 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1019 "Expected exact CHECK constraint SQL, got: {}",
1020 sql
1021 );
1022 }
1023
1024 #[test]
1025 fn test_deconstruction_with_include_1() {
1027 use super::*;
1031 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1032 assert_eq!(constraint.name(), "test_constraint");
1033 let sql = constraint.to_sql();
1034 assert_eq!(
1035 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1036 "Expected exact CHECK constraint SQL, got: {}",
1037 sql
1038 );
1039 }
1040
1041 #[test]
1042 fn test_deconstruction_with_nulls_distinct() {
1044 use super::*;
1048 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1049 assert_eq!(constraint.name(), "test_constraint");
1050 let sql = constraint.to_sql();
1051 assert_eq!(
1052 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1053 "Expected exact CHECK constraint SQL, got: {}",
1054 sql
1055 );
1056 }
1057
1058 #[test]
1059 fn test_deconstruction_with_nulls_distinct_1() {
1061 use super::*;
1065 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1066 assert_eq!(constraint.name(), "test_constraint");
1067 let sql = constraint.to_sql();
1068 assert_eq!(
1069 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1070 "Expected exact CHECK constraint SQL, got: {}",
1071 sql
1072 );
1073 }
1074
1075 #[test]
1076 fn test_deconstruction_with_opclasses() {
1078 use super::*;
1082 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1083 assert_eq!(constraint.name(), "test_constraint");
1084 let sql = constraint.to_sql();
1085 assert_eq!(
1086 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1087 "Expected exact CHECK constraint SQL, got: {}",
1088 sql
1089 );
1090 }
1091
1092 #[test]
1093 fn test_deconstruction_with_opclasses_1() {
1095 use super::*;
1099 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1100 assert_eq!(constraint.name(), "test_constraint");
1101 let sql = constraint.to_sql();
1102 assert_eq!(
1103 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1104 "Expected exact CHECK constraint SQL, got: {}",
1105 sql
1106 );
1107 }
1108
1109 #[test]
1110 fn test_default_violation_error_message() {
1112 use super::*;
1116 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1117 assert_eq!(constraint.name(), "test_constraint");
1118 let sql = constraint.to_sql();
1119 assert_eq!(
1120 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1121 "Expected exact CHECK constraint SQL, got: {}",
1122 sql
1123 );
1124 }
1125
1126 #[test]
1127 fn test_default_violation_error_message_1() {
1129 use super::*;
1133 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1134 assert_eq!(constraint.name(), "test_constraint");
1135 let sql = constraint.to_sql();
1136 assert_eq!(
1137 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1138 "Expected exact CHECK constraint SQL, got: {}",
1139 sql
1140 );
1141 }
1142
1143 #[test]
1144 fn test_deferrable_with_condition() {
1146 use super::*;
1150 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
1151 assert_eq!(constraint.name(), "test_constraint");
1152 let sql = constraint.to_sql();
1153 assert_eq!(
1154 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
1155 "Expected exact CHECK constraint SQL, got: {}",
1156 sql
1157 );
1158 }
1159
1160 #[test]
1161 fn test_deferrable_with_condition_1() {
1163 use super::*;
1167 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
1168 assert_eq!(constraint.name(), "test_constraint");
1169 let sql = constraint.to_sql();
1170 assert_eq!(
1171 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
1172 "Expected exact CHECK constraint SQL, got: {}",
1173 sql
1174 );
1175 }
1176
1177 #[test]
1178 fn test_deferrable_with_expressions() {
1180 use super::*;
1184 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1185 assert_eq!(constraint.name(), "test_constraint");
1186 let sql = constraint.to_sql();
1187 assert_eq!(
1188 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1189 "Expected exact CHECK constraint SQL, got: {}",
1190 sql
1191 );
1192 }
1193
1194 #[test]
1195 fn test_deferrable_with_expressions_1() {
1197 use super::*;
1201 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1202 assert_eq!(constraint.name(), "test_constraint");
1203 let sql = constraint.to_sql();
1204 assert_eq!(
1205 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1206 "Expected exact CHECK constraint SQL, got: {}",
1207 sql
1208 );
1209 }
1210
1211 #[test]
1212 fn test_deferrable_with_include() {
1214 use super::*;
1218 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1219 assert_eq!(constraint.name(), "test_constraint");
1220 let sql = constraint.to_sql();
1221 assert_eq!(
1222 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1223 "Expected exact CHECK constraint SQL, got: {}",
1224 sql
1225 );
1226 }
1227
1228 #[test]
1229 fn test_deferrable_with_include_1() {
1231 use super::*;
1235 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1236 assert_eq!(constraint.name(), "test_constraint");
1237 let sql = constraint.to_sql();
1238 assert_eq!(
1239 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1240 "Expected exact CHECK constraint SQL, got: {}",
1241 sql
1242 );
1243 }
1244
1245 #[test]
1246 fn test_deferrable_with_opclasses() {
1248 use super::*;
1252 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1253 assert_eq!(constraint.name(), "test_constraint");
1254 let sql = constraint.to_sql();
1255 assert_eq!(
1256 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1257 "Expected exact CHECK constraint SQL, got: {}",
1258 sql
1259 );
1260 }
1261
1262 #[test]
1263 fn test_deferrable_with_opclasses_1() {
1265 use super::*;
1269 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1270 assert_eq!(constraint.name(), "test_constraint");
1271 let sql = constraint.to_sql();
1272 assert_eq!(
1273 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1274 "Expected exact CHECK constraint SQL, got: {}",
1275 sql
1276 );
1277 }
1278
1279 #[test]
1280 fn test_eq() {
1282 use super::*;
1286 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1287 assert_eq!(constraint.name(), "test_constraint");
1288 let sql = constraint.to_sql();
1289 assert_eq!(
1290 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1291 "Expected exact CHECK constraint SQL, got: {}",
1292 sql
1293 );
1294 }
1295
1296 #[test]
1297 fn test_eq_1() {
1299 use super::*;
1303 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1304 assert_eq!(constraint.name(), "test_constraint");
1305 let sql = constraint.to_sql();
1306 assert_eq!(
1307 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1308 "Expected exact CHECK constraint SQL, got: {}",
1309 sql
1310 );
1311 }
1312
1313 #[test]
1314 fn test_eq_2() {
1316 use super::*;
1320 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1321 assert_eq!(constraint.name(), "test_constraint");
1322 let sql = constraint.to_sql();
1323 assert_eq!(
1324 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1325 "Expected exact CHECK constraint SQL, got: {}",
1326 sql
1327 );
1328 }
1329
1330 #[test]
1331 fn test_eq_3() {
1333 use super::*;
1337 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1338 assert_eq!(constraint.name(), "test_constraint");
1339 let sql = constraint.to_sql();
1340 assert_eq!(
1341 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1342 "Expected exact CHECK constraint SQL, got: {}",
1343 sql
1344 );
1345 }
1346
1347 #[test]
1348 fn test_eq_with_condition() {
1350 use super::*;
1354 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
1355 assert_eq!(constraint.name(), "test_constraint");
1356 let sql = constraint.to_sql();
1357 assert_eq!(
1358 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
1359 "Expected exact CHECK constraint SQL, got: {}",
1360 sql
1361 );
1362 }
1363
1364 #[test]
1365 fn test_eq_with_condition_1() {
1367 use super::*;
1371 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
1372 assert_eq!(constraint.name(), "test_constraint");
1373 let sql = constraint.to_sql();
1374 assert_eq!(
1375 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
1376 "Expected exact CHECK constraint SQL, got: {}",
1377 sql
1378 );
1379 }
1380
1381 #[test]
1382 fn test_eq_with_deferrable() {
1384 use super::*;
1388 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1389 assert_eq!(constraint.name(), "test_constraint");
1390 let sql = constraint.to_sql();
1391 assert_eq!(
1392 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1393 "Expected exact CHECK constraint SQL, got: {}",
1394 sql
1395 );
1396 }
1397
1398 #[test]
1399 fn test_eq_with_deferrable_1() {
1401 use super::*;
1405 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1406 assert_eq!(constraint.name(), "test_constraint");
1407 let sql = constraint.to_sql();
1408 assert_eq!(
1409 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1410 "Expected exact CHECK constraint SQL, got: {}",
1411 sql
1412 );
1413 }
1414
1415 #[test]
1416 fn test_eq_with_expressions() {
1418 use super::*;
1422 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1423 assert_eq!(constraint.name(), "test_constraint");
1424 let sql = constraint.to_sql();
1425 assert_eq!(
1426 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1427 "Expected exact CHECK constraint SQL, got: {}",
1428 sql
1429 );
1430 }
1431
1432 #[test]
1433 fn test_eq_with_expressions_1() {
1435 use super::*;
1439 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1440 assert_eq!(constraint.name(), "test_constraint");
1441 let sql = constraint.to_sql();
1442 assert_eq!(
1443 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1444 "Expected exact CHECK constraint SQL, got: {}",
1445 sql
1446 );
1447 }
1448
1449 #[test]
1450 fn test_eq_with_include() {
1452 use super::*;
1456 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1457 assert_eq!(constraint.name(), "test_constraint");
1458 let sql = constraint.to_sql();
1459 assert_eq!(
1460 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1461 "Expected exact CHECK constraint SQL, got: {}",
1462 sql
1463 );
1464 }
1465
1466 #[test]
1467 fn test_eq_with_include_1() {
1469 use super::*;
1473 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1474 assert_eq!(constraint.name(), "test_constraint");
1475 let sql = constraint.to_sql();
1476 assert_eq!(
1477 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1478 "Expected exact CHECK constraint SQL, got: {}",
1479 sql
1480 );
1481 }
1482
1483 #[test]
1484 fn test_eq_with_nulls_distinct() {
1486 use super::*;
1490 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1491 assert_eq!(constraint.name(), "test_constraint");
1492 let sql = constraint.to_sql();
1493 assert_eq!(
1494 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1495 "Expected exact CHECK constraint SQL, got: {}",
1496 sql
1497 );
1498 }
1499
1500 #[test]
1501 fn test_eq_with_nulls_distinct_1() {
1503 use super::*;
1507 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1508 assert_eq!(constraint.name(), "test_constraint");
1509 let sql = constraint.to_sql();
1510 assert_eq!(
1511 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1512 "Expected exact CHECK constraint SQL, got: {}",
1513 sql
1514 );
1515 }
1516
1517 #[test]
1518 fn test_eq_with_opclasses() {
1520 use super::*;
1524 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1525 assert_eq!(constraint.name(), "test_constraint");
1526 let sql = constraint.to_sql();
1527 assert_eq!(
1528 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1529 "Expected exact CHECK constraint SQL, got: {}",
1530 sql
1531 );
1532 }
1533
1534 #[test]
1535 fn test_eq_with_opclasses_1() {
1537 use super::*;
1541 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1542 assert_eq!(constraint.name(), "test_constraint");
1543 let sql = constraint.to_sql();
1544 assert_eq!(
1545 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1546 "Expected exact CHECK constraint SQL, got: {}",
1547 sql
1548 );
1549 }
1550
1551 #[test]
1552 fn test_expressions_and_fields_mutually_exclusive() {
1554 use super::*;
1558 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1559 assert_eq!(constraint.name(), "test_constraint");
1560 let sql = constraint.to_sql();
1561 assert_eq!(
1562 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1563 "Expected exact CHECK constraint SQL, got: {}",
1564 sql
1565 );
1566 }
1567
1568 #[test]
1569 fn test_expressions_and_fields_mutually_exclusive_1() {
1571 use super::*;
1575 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1576 assert_eq!(constraint.name(), "test_constraint");
1577 let sql = constraint.to_sql();
1578 assert_eq!(
1579 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1580 "Expected exact CHECK constraint SQL, got: {}",
1581 sql
1582 );
1583 }
1584
1585 #[test]
1586 fn test_expressions_with_opclasses() {
1588 use super::*;
1592 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1593 assert_eq!(constraint.name(), "test_constraint");
1594 let sql = constraint.to_sql();
1595 assert_eq!(
1596 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1597 "Expected exact CHECK constraint SQL, got: {}",
1598 sql
1599 );
1600 }
1601
1602 #[test]
1603 fn test_expressions_with_opclasses_1() {
1605 use super::*;
1609 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1610 assert_eq!(constraint.name(), "test_constraint");
1611 let sql = constraint.to_sql();
1612 assert_eq!(
1613 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1614 "Expected exact CHECK constraint SQL, got: {}",
1615 sql
1616 );
1617 }
1618
1619 #[test]
1620 fn test_include_database_constraint() {
1622 use super::*;
1626 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1627 assert_eq!(constraint.name(), "test_constraint");
1628 let sql = constraint.to_sql();
1629 assert_eq!(
1630 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1631 "Expected exact CHECK constraint SQL, got: {}",
1632 sql
1633 );
1634 }
1635
1636 #[test]
1637 fn test_include_database_constraint_1() {
1639 use super::*;
1643 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1644 assert_eq!(constraint.name(), "test_constraint");
1645 let sql = constraint.to_sql();
1646 assert_eq!(
1647 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1648 "Expected exact CHECK constraint SQL, got: {}",
1649 sql
1650 );
1651 }
1652
1653 #[test]
1654 fn test_initially_deferred_database_constraint() {
1656 use super::*;
1660 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1661 assert_eq!(constraint.name(), "test_constraint");
1662 let sql = constraint.to_sql();
1663 assert_eq!(
1664 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1665 "Expected exact CHECK constraint SQL, got: {}",
1666 sql
1667 );
1668 }
1669
1670 #[test]
1671 fn test_initially_deferred_database_constraint_1() {
1673 use super::*;
1677 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1678 assert_eq!(constraint.name(), "test_constraint");
1679 let sql = constraint.to_sql();
1680 assert_eq!(
1681 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1682 "Expected exact CHECK constraint SQL, got: {}",
1683 sql
1684 );
1685 }
1686
1687 #[test]
1688 fn test_initially_immediate_database_constraint() {
1690 use super::*;
1694 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1695 assert_eq!(constraint.name(), "test_constraint");
1696 let sql = constraint.to_sql();
1697 assert_eq!(
1698 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1699 "Expected exact CHECK constraint SQL, got: {}",
1700 sql
1701 );
1702 }
1703
1704 #[test]
1705 fn test_initially_immediate_database_constraint_1() {
1707 use super::*;
1711 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1712 assert_eq!(constraint.name(), "test_constraint");
1713 let sql = constraint.to_sql();
1714 assert_eq!(
1715 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1716 "Expected exact CHECK constraint SQL, got: {}",
1717 sql
1718 );
1719 }
1720
1721 #[test]
1722 fn test_invalid_check_types() {
1724 use super::*;
1728 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
1729 assert_eq!(constraint.name(), "test_constraint");
1730 let sql = constraint.to_sql();
1731 assert_eq!(
1732 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
1733 "Expected exact CHECK constraint SQL, got: {}",
1734 sql
1735 );
1736 }
1737
1738 #[test]
1739 fn test_invalid_check_types_1() {
1741 use super::*;
1745 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
1746 assert_eq!(constraint.name(), "test_constraint");
1747 let sql = constraint.to_sql();
1748 assert_eq!(
1749 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
1750 "Expected exact CHECK constraint SQL, got: {}",
1751 sql
1752 );
1753 }
1754
1755 #[test]
1756 fn test_invalid_defer_argument() {
1758 use super::*;
1762 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1763 assert_eq!(constraint.name(), "test_constraint");
1764 let sql = constraint.to_sql();
1765 assert_eq!(
1766 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1767 "Expected exact CHECK constraint SQL, got: {}",
1768 sql
1769 );
1770 }
1771
1772 #[test]
1773 fn test_invalid_defer_argument_1() {
1775 use super::*;
1779 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1780 assert_eq!(constraint.name(), "test_constraint");
1781 let sql = constraint.to_sql();
1782 assert_eq!(
1783 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1784 "Expected exact CHECK constraint SQL, got: {}",
1785 sql
1786 );
1787 }
1788
1789 #[test]
1790 fn test_invalid_include_argument() {
1792 use super::*;
1796 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1797 assert_eq!(constraint.name(), "test_constraint");
1798 let sql = constraint.to_sql();
1799 assert_eq!(
1800 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1801 "Expected exact CHECK constraint SQL, got: {}",
1802 sql
1803 );
1804 }
1805
1806 #[test]
1807 fn test_invalid_include_argument_1() {
1809 use super::*;
1813 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1814 assert_eq!(constraint.name(), "test_constraint");
1815 let sql = constraint.to_sql();
1816 assert_eq!(
1817 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1818 "Expected exact CHECK constraint SQL, got: {}",
1819 sql
1820 );
1821 }
1822
1823 #[test]
1824 fn test_invalid_nulls_distinct_argument() {
1826 use super::*;
1830 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1831 assert_eq!(constraint.name(), "test_constraint");
1832 let sql = constraint.to_sql();
1833 assert_eq!(
1834 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1835 "Expected exact CHECK constraint SQL, got: {}",
1836 sql
1837 );
1838 }
1839
1840 #[test]
1841 fn test_invalid_nulls_distinct_argument_1() {
1843 use super::*;
1847 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1848 assert_eq!(constraint.name(), "test_constraint");
1849 let sql = constraint.to_sql();
1850 assert_eq!(
1851 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1852 "Expected exact CHECK constraint SQL, got: {}",
1853 sql
1854 );
1855 }
1856
1857 #[test]
1858 fn test_invalid_opclasses_argument() {
1860 use super::*;
1864 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1865 assert_eq!(constraint.name(), "test_constraint");
1866 let sql = constraint.to_sql();
1867 assert_eq!(
1868 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1869 "Expected exact CHECK constraint SQL, got: {}",
1870 sql
1871 );
1872 }
1873
1874 #[test]
1875 fn test_invalid_opclasses_argument_1() {
1877 use super::*;
1881 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1882 assert_eq!(constraint.name(), "test_constraint");
1883 let sql = constraint.to_sql();
1884 assert_eq!(
1885 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1886 "Expected exact CHECK constraint SQL, got: {}",
1887 sql
1888 );
1889 }
1890
1891 #[test]
1892 fn test_model_validation() {
1894 use super::*;
1898 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1899 assert_eq!(constraint.name(), "test_constraint");
1900 let sql = constraint.to_sql();
1901 assert_eq!(
1902 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1903 "Expected exact CHECK constraint SQL, got: {}",
1904 sql
1905 );
1906 }
1907
1908 #[test]
1909 fn test_model_validation_1() {
1911 use super::*;
1915 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1916 assert_eq!(constraint.name(), "test_constraint");
1917 let sql = constraint.to_sql();
1918 assert_eq!(
1919 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1920 "Expected exact CHECK constraint SQL, got: {}",
1921 sql
1922 );
1923 }
1924
1925 #[test]
1926 fn test_model_validation_constraint_no_code_error() {
1928 use super::*;
1932 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1933 assert_eq!(constraint.name(), "test_constraint");
1934 let sql = constraint.to_sql();
1935 assert_eq!(
1936 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1937 "Expected exact CHECK constraint SQL, got: {}",
1938 sql
1939 );
1940 }
1941
1942 #[test]
1943 fn test_model_validation_constraint_no_code_error_1() {
1945 use super::*;
1949 let constraint = CheckConstraint::new("test_constraint", "value > 0");
1950 assert_eq!(constraint.name(), "test_constraint");
1951 let sql = constraint.to_sql();
1952 assert_eq!(
1953 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
1954 "Expected exact CHECK constraint SQL, got: {}",
1955 sql
1956 );
1957 }
1958
1959 #[test]
1960 fn test_model_validation_with_condition() {
1962 use super::*;
1966 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
1967 assert_eq!(constraint.name(), "test_constraint");
1968 let sql = constraint.to_sql();
1969 assert_eq!(
1970 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
1971 "Expected exact CHECK constraint SQL, got: {}",
1972 sql
1973 );
1974 }
1975
1976 #[test]
1977 fn test_model_validation_with_condition_1() {
1979 use super::*;
1983 let constraint = CheckConstraint::new("test_constraint", "age >= 18");
1984 assert_eq!(constraint.name(), "test_constraint");
1985 let sql = constraint.to_sql();
1986 assert_eq!(
1987 sql, "CONSTRAINT test_constraint CHECK (age >= 18)",
1988 "Expected exact CHECK constraint SQL, got: {}",
1989 sql
1990 );
1991 }
1992
1993 #[test]
1994 fn test_name() {
1996 use super::*;
2000 let constraint = CheckConstraint::new("test_constraint", "value > 0");
2001 assert_eq!(constraint.name(), "test_constraint");
2002 let sql = constraint.to_sql();
2003 assert_eq!(
2004 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
2005 "Expected exact CHECK constraint SQL, got: {}",
2006 sql
2007 );
2008 }
2009
2010 #[test]
2011 fn test_name_1() {
2013 use super::*;
2017 let constraint = CheckConstraint::new("test_constraint", "value > 0");
2018 assert_eq!(constraint.name(), "test_constraint");
2019 let sql = constraint.to_sql();
2020 assert_eq!(
2021 sql, "CONSTRAINT test_constraint CHECK (value > 0)",
2022 "Expected exact CHECK constraint SQL, got: {}",
2023 sql
2024 );
2025 }
2026}