Skip to content

Commit ffffc85

Browse files
committed
Added test to check schema validations
1 parent eafa8c6 commit ffffc85

File tree

7 files changed

+556
-120
lines changed

7 files changed

+556
-120
lines changed

crates/core/src/db/datastore/locking_tx_datastore/mod.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ use spacetimedb_lib::{metrics::METRICS, Address};
5252
use spacetimedb_primitives::*;
5353
use spacetimedb_sats::data_key::{DataKey, ToDataKey};
5454
use spacetimedb_sats::db::def::*;
55+
use spacetimedb_sats::db::error::SchemaErrors;
5556
use spacetimedb_sats::hash::Hash;
5657
use spacetimedb_sats::relation::RelValue;
5758
use spacetimedb_sats::{
@@ -993,7 +994,11 @@ impl MutTxId {
993994
return Err(TableError::System(table_schema.table_name.clone()).into());
994995
}
995996

996-
table_schema.clone().into_schema(0.into()).validated()?;
997+
table_schema
998+
.clone()
999+
.into_schema(0.into())
1000+
.validated()
1001+
.map_err(|err| DBError::Schema(SchemaErrors(err)))?;
9971002

9981003
Ok(())
9991004
}
@@ -2968,12 +2973,11 @@ mod tests {
29682973
IndexDef {
29692974
columns: NonEmpty::new(1.into()),
29702975
index_name: "name_idx".into(),
2971-
is_unique: false,
2976+
is_unique: true,
29722977
index_type: IndexType::BTree,
29732978
},
29742979
])
29752980
.with_column_sequence(ColId(0))
2976-
.unwrap()
29772981
}
29782982

29792983
#[rustfmt::skip]
@@ -2984,11 +2988,11 @@ mod tests {
29842988
map_array(basic_table_schema_cols()),
29852989
map_array([
29862990
IdxSchema { id: 6, table: 6, col: 0, name: "id_idx", unique: true },
2987-
IdxSchema { id: 7, table: 6, col: 1, name: "name_idx", unique: false },
2991+
IdxSchema { id: 7, table: 6, col: 1, name: "name_idx", unique: true },
29882992
]),
29892993
map_array([
29902994
ConstraintRow { constraint_id: 6, table_id: 6, columns: col(0), constraints: Constraints::unique(), constraint_name: "ct_Foo_id_idx_unique" },
2991-
ConstraintRow { constraint_id: 7, table_id: 6, columns: col(1), constraints: Constraints::indexed(), constraint_name: "ct_Foo_name_idx_indexed" }
2995+
ConstraintRow { constraint_id: 7, table_id: 6, columns: col(1), constraints: Constraints::unique(), constraint_name: "ct_Foo_name_idx_unique" }
29922996
]),
29932997
map_array([
29942998
SequenceRow { id: 4, table: 6, col_pos: 0, name: "seq_Foo_id", start: 1 }
@@ -3072,7 +3076,7 @@ mod tests {
30723076
assert_eq!(query.scan_st_indexes()?, map_array([
30733077
IndexRow { id: 0, table: 0, col: col(0), name: "idx_st_table_table_id_primary_key_auto_unique", unique: true },
30743078
IndexRow { id: 1, table: 0, col: col(1), name: "idx_st_table_table_name_unique", unique: true },
3075-
IndexRow { id: 2, table: 1, col: cols(0, vec![1]), name: "idx_st_columns_table_id_col_pos_unique_unique", unique: true },
3079+
IndexRow { id: 2, table: 1, col: cols(0, vec![1]), name: "idx_st_columns_table_id_col_pos_unique", unique: true },
30763080
IndexRow { id: 3, table: 2, col: col(0), name: "idx_st_sequence_sequence_id_primary_key_auto_unique", unique: true },
30773081
IndexRow { id: 4, table: 3, col: col(0), name: "idx_st_indexes_index_id_primary_key_auto_unique", unique: true },
30783082
IndexRow { id: 5, table: 4, col: col(0), name: "idx_st_constraints_constraint_id_primary_key_auto_unique", unique: true },
@@ -3393,7 +3397,7 @@ mod tests {
33933397
assert_eq!(index_rows, [
33943398
IndexRow { id: 0, table: 0, col: col(0), name: "idx_st_table_table_id_primary_key_auto_unique", unique: true },
33953399
IndexRow { id: 1, table: 0, col: col(1), name: "idx_st_table_table_name_unique", unique: true },
3396-
IndexRow { id: 2, table: 1, col: cols(0, vec![1]), name: "idx_st_columns_table_id_col_pos_unique_unique", unique: true },
3400+
IndexRow { id: 2, table: 1, col: cols(0, vec![1]), name: "idx_st_columns_table_id_col_pos_unique", unique: true },
33973401
IndexRow { id: 3, table: 2, col: col(0), name: "idx_st_sequence_sequence_id_primary_key_auto_unique", unique: true },
33983402
IndexRow { id: 4, table: 3, col: col(0), name: "idx_st_indexes_index_id_primary_key_auto_unique", unique: true },
33993403
IndexRow { id: 5, table: 4, col: col(0), name: "idx_st_constraints_constraint_id_primary_key_auto_unique", unique: true },
@@ -3436,7 +3440,7 @@ mod tests {
34363440
assert_eq!(index_rows, [
34373441
IndexRow { id: 0, table: 0, col: col(0), name: "idx_st_table_table_id_primary_key_auto_unique", unique: true },
34383442
IndexRow { id: 1, table: 0, col: col(1), name: "idx_st_table_table_name_unique", unique: true },
3439-
IndexRow { id: 2, table: 1, col: cols(0, vec![1]), name: "idx_st_columns_table_id_col_pos_unique_unique", unique: true },
3443+
IndexRow { id: 2, table: 1, col: cols(0, vec![1]), name: "idx_st_columns_table_id_col_pos_unique", unique: true },
34403444
IndexRow { id: 3, table: 2, col: col(0), name: "idx_st_sequence_sequence_id_primary_key_auto_unique", unique: true },
34413445
IndexRow { id: 4, table: 3, col: col(0), name: "idx_st_indexes_index_id_primary_key_auto_unique", unique: true },
34423446
IndexRow { id: 5, table: 4, col: col(0), name: "idx_st_constraints_constraint_id_primary_key_auto_unique", unique: true },
@@ -3479,7 +3483,7 @@ mod tests {
34793483
assert_eq!(index_rows, [
34803484
IndexRow { id: 0, table: 0, col: col(0), name: "idx_st_table_table_id_primary_key_auto_unique", unique: true },
34813485
IndexRow { id: 1, table: 0, col: col(1), name: "idx_st_table_table_name_unique", unique: true },
3482-
IndexRow { id: 2, table: 1, col: cols(0, vec![1]), name: "idx_st_columns_table_id_col_pos_unique_unique", unique: true },
3486+
IndexRow { id: 2, table: 1, col: cols(0, vec![1]), name: "idx_st_columns_table_id_col_pos_unique", unique: true },
34833487
IndexRow { id: 3, table: 2, col: col(0), name: "idx_st_sequence_sequence_id_primary_key_auto_unique", unique: true },
34843488
IndexRow { id: 4, table: 3, col: col(0), name: "idx_st_indexes_index_id_primary_key_auto_unique", unique: true },
34853489
IndexRow { id: 5, table: 4, col: col(0), name: "idx_st_constraints_constraint_id_primary_key_auto_unique", unique: true },

crates/core/src/db/datastore/system_tables.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,7 @@ pub fn st_table_schema() -> TableSchema {
164164
)
165165
.with_type(StTableType::System)
166166
.with_column_constraint(Constraints::primary_key_auto(), StTableFields::TableId.col_id())
167-
.unwrap()
168167
.with_column_index(StTableFields::TableName.col_id(), true)
169-
.unwrap()
170168
.into_schema(ST_TABLES_ID)
171169
}
172170

@@ -190,7 +188,6 @@ pub fn st_columns_schema() -> TableSchema {
190188
Constraints::unique(),
191189
(StColumnFields::TableId.col_id(), vec![StColumnFields::ColPos.col_id()]),
192190
)
193-
.unwrap()
194191
.into_schema(ST_COLUMNS_ID)
195192
}
196193

@@ -214,7 +211,6 @@ pub fn st_indexes_schema() -> TableSchema {
214211
.with_type(StTableType::System)
215212
// TODO: Unique constraint on index name?
216213
.with_column_constraint(Constraints::primary_key_auto(), StIndexFields::IndexId.col_id())
217-
.unwrap()
218214
.into_schema(ST_INDEXES_ID)
219215
}
220216

@@ -241,7 +237,6 @@ pub(crate) fn st_sequences_schema() -> TableSchema {
241237
.with_type(StTableType::System)
242238
// TODO: Unique constraint on sequence name?
243239
.with_column_constraint(Constraints::primary_key_auto(), StSequenceFields::SequenceId.col_id())
244-
.unwrap()
245240
.into_schema(ST_SEQUENCES_ID)
246241
}
247242

@@ -269,7 +264,6 @@ pub(crate) fn st_constraints_schema() -> TableSchema {
269264
Constraints::primary_key_auto(),
270265
StConstraintFields::ConstraintId.col_id(),
271266
)
272-
.unwrap()
273267
.into_schema(ST_CONSTRAINTS_ID)
274268
}
275269

crates/core/src/db/relational_db.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -946,7 +946,6 @@ mod tests {
946946
}],
947947
)
948948
.with_column_constraint(Constraints::primary_key_auto(), ColId(0))
949-
.unwrap()
950949
}
951950

952951
#[test]
@@ -1039,8 +1038,7 @@ mod tests {
10391038
col_type: AlgebraicType::I64,
10401039
}],
10411040
)
1042-
.with_column_sequence(ColId(0))
1043-
.unwrap();
1041+
.with_column_sequence(ColId(0));
10441042

10451043
let table_id = stdb.create_table(&mut tx, schema)?;
10461044

@@ -1174,8 +1172,7 @@ mod tests {
11741172
is_unique: true,
11751173
index_type: IndexType::BTree,
11761174
}])
1177-
.with_column_constraint(Constraints::identity(), ColId(0))
1178-
.unwrap();
1175+
.with_column_constraint(Constraints::identity(), ColId(0));
11791176

11801177
let table_id = stdb.create_table(&mut tx, schema)?;
11811178

crates/core/src/db/update.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,6 @@ mod tests {
323323
],
324324
)
325325
.with_column_constraint(Constraints::identity(), ColId(0))
326-
.unwrap()
327326
.with_indexes(vec![IndexDef::btree(
328327
"Person_id_unique".into(),
329328
(ColId(0), vec![ColId(1)]),
@@ -346,7 +345,6 @@ mod tests {
346345
],
347346
)
348347
.with_column_constraint(Constraints::identity(), ColId(0))
349-
.unwrap()
350348
.with_indexes(vec![IndexDef::btree(
351349
"Person_id_and_name".into(),
352350
(ColId(0), vec![ColId(1)]),
@@ -401,8 +399,7 @@ mod tests {
401399
},
402400
],
403401
)
404-
.with_column_constraint(Constraints::identity(), ColId(0))
405-
.unwrap()];
402+
.with_column_constraint(Constraints::identity(), ColId(0))];
406403

407404
match schema_updates(current, proposed)? {
408405
SchemaUpdates::Tainted(tainted) => {

crates/core/src/error.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use spacetimedb_lib::buffer::DecodeError;
1313
use spacetimedb_lib::{PrimaryKey, ProductValue};
1414
use spacetimedb_primitives::*;
1515
use spacetimedb_sats::db::def::IndexDef;
16-
use spacetimedb_sats::db::error::{LibError, RelationError, SchemaError};
16+
use spacetimedb_sats::db::error::{LibError, RelationError, SchemaErrors};
1717
use spacetimedb_sats::hash::Hash;
1818
use spacetimedb_sats::product_value::InvalidFieldError;
1919
use spacetimedb_sats::relation::FieldName;
@@ -146,7 +146,7 @@ pub enum DBError {
146146
#[error("IndexError: {0}")]
147147
Index(#[from] IndexError),
148148
#[error("SchemaError: {0}")]
149-
Schema(#[from] SchemaError),
149+
Schema(SchemaErrors),
150150
#[error("IOError: {0}.")]
151151
IoError(#[from] std::io::Error),
152152
#[error("ParseIntError: {0}.")]

0 commit comments

Comments
 (0)