use super::super::*;
use super::{fixtures, v3_0_0, v3_0_0_beta_1, v3_0_0_beta_3, v3_1_0, v3_1_1};
use crate::cf::TableMutations;
use crate::dbs::node::Node;
use crate::idx::ft::fulltext::{DocLengthAndCount, TermDocument};
use crate::kvs::KVValue;
use crate::kvs::index::{Appending, PrimaryAppending};
use crate::kvs::sequences::{BatchValue, SequenceState};
use crate::kvs::tasklease::TaskLease;
use crate::kvs::version::MajorVersion;
use crate::val::{RecordId, RecordIdKey};
const fn version_writes_current_format(version_name: &str) -> bool {
matches!(version_name.as_bytes(), b"v3_1_1")
}
macro_rules! compat_test {
($base_name:ident, $type:ty, $const_name:ident, $expected:expr, [$($version:ident),+ $(,)?]) => {
compat_test!(@inner $base_name, $type, $const_name, $expected, (), [$($version),+]);
};
($base_name:ident, $type:ty, $const_name:ident, $expected:expr, $ctx:expr, [$($version:ident),+ $(,)?]) => {
compat_test!(@inner $base_name, $type, $const_name, $expected, $ctx, [$($version),+]);
};
(@inner $base_name:ident, $type:ty, $const_name:ident, $expected:expr, $ctx:expr, [$($version:ident),+ $(,)?]) => {
$(
paste::paste! {
#[test]
fn [<$version _ $base_name>]() {
let fixture_bytes = [<$version>]::$const_name;
let decoded = <$type>::kv_decode_value(fixture_bytes, $ctx).unwrap_or_else(|e| {
panic!(
concat!(
"BACKWARDS COMPATIBILITY BROKEN: Failed to decode ",
stringify!([<$version _ $base_name>]),
" fixture.\n",
"Type: ",
stringify!($type),
"\n",
"Error: {}\n",
"Bytes: {:?}\n\n",
"This indicates that the serialization format has changed in an ",
"incompatible way. Old databases may fail to load.\n",
"If this change is intentional, you MUST implement a migration path."
),
e, fixture_bytes
)
});
let expected = $expected;
assert_eq!(
decoded, expected,
concat!(
"BACKWARDS COMPATIBILITY BROKEN: Decoded value does not match expected ",
"fixture for ",
stringify!([<$version _ $base_name>]),
".\n\n",
"This indicates that while deserialization succeeded, the data was ",
"interpreted differently than expected. This could cause data corruption ",
"or unexpected behavior when loading old databases.\n\n",
"If this change is intentional, update the fixture in fixtures.rs to ",
"reflect how old data should be interpreted by the current code."
)
);
let re_encoded = decoded.kv_encode_value().unwrap_or_else(|e| {
panic!(
concat!(
"Failed to re-encode ",
stringify!([<$version _ $base_name>]),
" after successful decode.\n",
"Error: {}"
),
e
)
});
if version_writes_current_format(stringify!($version)) {
assert_eq!(
re_encoded.as_slice(),
fixture_bytes,
concat!(
"WIRE STABILITY BROKEN: re-encoded bytes do not match the frozen ",
stringify!([<$version _ $base_name>]),
" fixture.\n\n",
"The encoder is producing different bytes for the same value than ",
"what was captured under this version. If the change is intentional ",
"(e.g. revision crate format shift), capture a NEW version snapshot ",
"rather than mutating this one — the frozen file at ",
stringify!($version),
".rs must NEVER be modified after commit."
)
);
}
}
}
)+
};
}
compat_test!(
namespace_basic,
NamespaceDefinition,
NAMESPACE_BASIC,
fixtures::namespace_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
namespace_with_comment,
NamespaceDefinition,
NAMESPACE_WITH_COMMENT,
fixtures::namespace_with_comment(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
database_basic,
DatabaseDefinition,
DATABASE_BASIC,
fixtures::database_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
database_with_changefeed,
DatabaseDefinition,
DATABASE_WITH_CHANGEFEED,
fixtures::database_with_changefeed(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
database_strict,
DatabaseDefinition,
DATABASE_STRICT,
fixtures::database_strict(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_basic,
TableDefinition,
TABLE_BASIC,
fixtures::table_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_with_view,
TableDefinition,
TABLE_WITH_VIEW,
fixtures::table_with_view(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_schemafull,
TableDefinition,
TABLE_SCHEMAFULL,
fixtures::table_schemafull(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_relation,
TableDefinition,
TABLE_RELATION,
fixtures::table_relation(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_with_materialized_view,
TableDefinition,
TABLE_WITH_MATERIALIZED_VIEW,
fixtures::table_with_materialized_view(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_any_type,
TableDefinition,
TABLE_ANY_TYPE,
fixtures::table_any_type(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
subscription_basic,
SubscriptionDefinition,
SUBSCRIPTION_BASIC,
fixtures::subscription_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
subscription_with_filters,
SubscriptionDefinition,
SUBSCRIPTION_WITH_FILTERS,
fixtures::subscription_with_filters(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
subscription_with_vars,
SubscriptionDefinition,
SUBSCRIPTION_WITH_VARS,
fixtures::subscription_with_vars(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
access_bearer,
AccessDefinition,
ACCESS_BEARER,
fixtures::access_bearer(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
access_with_authenticate,
AccessDefinition,
ACCESS_WITH_AUTHENTICATE,
fixtures::access_with_authenticate(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
access_record,
AccessDefinition,
ACCESS_RECORD,
fixtures::access_record(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
access_jwt_jwks,
AccessDefinition,
ACCESS_JWT_JWKS,
fixtures::access_jwt_jwks(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
access_bearer_refresh,
AccessDefinition,
ACCESS_BEARER_REFRESH,
fixtures::access_bearer_refresh(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
grant_jwt,
AccessGrant,
GRANT_JWT,
fixtures::grant_jwt(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
grant_revoked,
AccessGrant,
GRANT_REVOKED,
fixtures::grant_revoked(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
grant_record,
AccessGrant,
GRANT_RECORD,
fixtures::grant_record(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
grant_bearer,
AccessGrant,
GRANT_BEARER,
fixtures::grant_bearer(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
analyzer_basic,
AnalyzerDefinition,
ANALYZER_BASIC,
fixtures::analyzer_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
analyzer_with_tokenizers,
AnalyzerDefinition,
ANALYZER_WITH_TOKENIZERS,
fixtures::analyzer_with_tokenizers(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
api_basic,
ApiDefinition,
API_BASIC,
fixtures::api_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
api_with_middleware,
ApiDefinition,
API_WITH_MIDDLEWARE,
fixtures::api_with_middleware(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
api_with_auth_limit,
ApiDefinition,
API_WITH_AUTH_LIMIT,
fixtures::api_with_auth_limit(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
bucket_basic,
BucketDefinition,
BUCKET_BASIC,
fixtures::bucket_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
bucket_readonly,
BucketDefinition,
BUCKET_READONLY,
fixtures::bucket_readonly(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
config_graphql,
ConfigDefinition,
CONFIG_GRAPHQL,
fixtures::config_graphql(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
config_default,
ConfigDefinition,
CONFIG_DEFAULT,
fixtures::config_default(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
config_api,
ConfigDefinition,
CONFIG_API,
fixtures::config_api(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
config_graphql_full,
ConfigDefinition,
CONFIG_GRAPHQL_FULL,
fixtures::config_graphql_full(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
event_basic,
EventDefinition,
EVENT_BASIC,
fixtures::event_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
event_async,
EventDefinition,
EVENT_ASYNC,
fixtures::event_async(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
field_basic,
FieldDefinition,
FIELD_BASIC,
fixtures::field_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
field_with_type,
FieldDefinition,
FIELD_WITH_TYPE,
fixtures::field_with_type(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
field_readonly,
FieldDefinition,
FIELD_READONLY,
fixtures::field_readonly(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
field_flexible_with_reference,
FieldDefinition,
FIELD_FLEXIBLE_WITH_REFERENCE,
fixtures::field_flexible_with_reference(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
field_with_default_set,
FieldDefinition,
FIELD_WITH_DEFAULT_SET,
fixtures::field_with_default_set(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
field_record_type,
FieldDefinition,
FIELD_RECORD_TYPE,
fixtures::field_record_type(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
function_basic,
FunctionDefinition,
FUNCTION_BASIC,
fixtures::function_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
function_with_args,
FunctionDefinition,
FUNCTION_WITH_ARGS,
fixtures::function_with_args(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
index_basic,
IndexDefinition,
INDEX_BASIC,
fixtures::index_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
index_unique,
IndexDefinition,
INDEX_UNIQUE,
fixtures::index_unique(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
index_hnsw,
IndexDefinition,
INDEX_HNSW,
fixtures::index_hnsw(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
index_fulltext,
IndexDefinition,
INDEX_FULLTEXT,
fixtures::index_fulltext(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
index_count,
IndexDefinition,
INDEX_COUNT,
fixtures::index_count(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
model_basic,
MlModelDefinition,
MODEL_BASIC,
fixtures::model_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
param_bool,
ParamDefinition,
PARAM_BOOL,
fixtures::param_bool(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
param_string,
ParamDefinition,
PARAM_STRING,
fixtures::param_string(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
sequence_basic,
SequenceDefinition,
SEQUENCE_BASIC,
fixtures::sequence_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
sequence_with_options,
SequenceDefinition,
SEQUENCE_WITH_OPTIONS,
fixtures::sequence_with_options(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
user_basic,
UserDefinition,
USER_BASIC,
fixtures::user_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
user_with_durations,
UserDefinition,
USER_WITH_DURATIONS,
fixtures::user_with_durations(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
user_db_base,
UserDefinition,
USER_DB_BASE,
fixtures::user_db_base(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_none,
Record,
RECORD_NONE,
fixtures::record_none(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_null,
Record,
RECORD_NULL,
fixtures::record_null(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_bool,
Record,
RECORD_BOOL,
fixtures::record_bool(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_number_int,
Record,
RECORD_NUMBER_INT,
fixtures::record_number_int(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_number_float,
Record,
RECORD_NUMBER_FLOAT,
fixtures::record_number_float(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_number_decimal,
Record,
RECORD_NUMBER_DECIMAL,
fixtures::record_number_decimal(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_string,
Record,
RECORD_STRING,
fixtures::record_string(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_bytes,
Record,
RECORD_BYTES,
fixtures::record_bytes(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_duration,
Record,
RECORD_DURATION,
fixtures::record_duration(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_datetime,
Record,
RECORD_DATETIME,
fixtures::record_datetime(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_uuid,
Record,
RECORD_UUID,
fixtures::record_uuid(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_geometry_point,
Record,
RECORD_GEOMETRY_POINT,
fixtures::record_geometry_point(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_geometry_line,
Record,
RECORD_GEOMETRY_LINE,
fixtures::record_geometry_line(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_geometry_polygon,
Record,
RECORD_GEOMETRY_POLYGON,
fixtures::record_geometry_polygon(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_geometry_multi_point,
Record,
RECORD_GEOMETRY_MULTI_POINT,
fixtures::record_geometry_multi_point(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_geometry_multi_line,
Record,
RECORD_GEOMETRY_MULTI_LINE,
fixtures::record_geometry_multi_line(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_geometry_multi_polygon,
Record,
RECORD_GEOMETRY_MULTI_POLYGON,
fixtures::record_geometry_multi_polygon(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_geometry_collection,
Record,
RECORD_GEOMETRY_COLLECTION,
fixtures::record_geometry_collection(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_table,
Record,
RECORD_TABLE,
fixtures::record_table(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_recordid,
Record,
RECORD_RECORDID,
fixtures::record_recordid(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_file,
Record,
RECORD_FILE,
fixtures::record_file(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_range_unbounded,
Record,
RECORD_RANGE_UNBOUNDED,
fixtures::record_range_unbounded(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_range_bounded,
Record,
RECORD_RANGE_BOUNDED,
fixtures::record_range_bounded(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_regex,
Record,
RECORD_REGEX,
fixtures::record_regex(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_array,
Record,
RECORD_ARRAY,
fixtures::record_array(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_object,
Record,
RECORD_OBJECT,
fixtures::record_object(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_set,
Record,
RECORD_SET,
fixtures::record_set(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_with_metadata,
Record,
RECORD_WITH_METADATA,
fixtures::record_with_metadata(),
fixtures::test_record_rid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
record_with_table_metadata,
Record,
RECORD_WITH_TABLE_METADATA,
fixtures::record_with_table_metadata(),
fixtures::test_record_rid(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
version_1,
MajorVersion,
VERSION_1,
fixtures::version_1(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
version_3,
MajorVersion,
VERSION_3,
fixtures::version_3(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
api_action_basic,
ApiActionDefinition,
API_ACTION_BASIC,
fixtures::api_action_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
api_action_multi_method,
ApiActionDefinition,
API_ACTION_MULTI_METHOD,
fixtures::api_action_multi_method(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
appending_none,
Appending,
APPENDING_NONE,
fixtures::appending_none(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
appending_old_values,
Appending,
APPENDING_OLD_VALUES,
fixtures::appending_old_values(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
appending_new_values,
Appending,
APPENDING_NEW_VALUES,
fixtures::appending_new_values(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
appending_both,
Appending,
APPENDING_BOTH,
fixtures::appending_both(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
doc_length_and_count_basic,
DocLengthAndCount,
DOC_LENGTH_AND_COUNT_BASIC,
fixtures::doc_length_and_count_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
primary_appending_basic,
PrimaryAppending,
PRIMARY_APPENDING_BASIC,
fixtures::primary_appending_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
batch_value_basic,
BatchValue,
BATCH_VALUE_BASIC,
fixtures::batch_value_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
sequence_state_basic,
SequenceState,
SEQUENCE_STATE_BASIC,
fixtures::sequence_state_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
task_lease_basic,
TaskLease,
TASK_LEASE_BASIC,
fixtures::task_lease_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
namespace_id_basic,
NamespaceId,
NAMESPACE_ID_BASIC,
fixtures::namespace_id_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
database_id_basic,
DatabaseId,
DATABASE_ID_BASIC,
fixtures::database_id_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_id_basic,
TableId,
TABLE_ID_BASIC,
fixtures::table_id_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
index_id_basic,
IndexId,
INDEX_ID_BASIC,
fixtures::index_id_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
module_definition_surrealism,
ModuleDefinition,
MODULE_SURREALISM,
fixtures::module_surrealism(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
module_definition_silo,
ModuleDefinition,
MODULE_SILO,
fixtures::module_silo(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
module_no_name,
ModuleDefinition,
MODULE_NO_NAME,
fixtures::module_no_name(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
node_live_query_basic,
NodeLiveQuery,
NODE_LIVE_QUERY_BASIC,
fixtures::node_live_query_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_mutations_set,
TableMutations,
TABLE_MUTATIONS_SET,
fixtures::table_mutations_set(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_mutations_del,
TableMutations,
TABLE_MUTATIONS_DEL,
fixtures::table_mutations_del(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_mutations_def,
TableMutations,
TABLE_MUTATIONS_DEF,
fixtures::table_mutations_def(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_mutations_set_with_diff,
TableMutations,
TABLE_MUTATIONS_SET_WITH_DIFF,
fixtures::table_mutations_set_with_diff(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
table_mutations_del_with_original,
TableMutations,
TABLE_MUTATIONS_DEL_WITH_ORIGINAL,
fixtures::table_mutations_del_with_original(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
node_active,
Node,
NODE_ACTIVE,
fixtures::node_active(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
node_archived,
Node,
NODE_ARCHIVED,
fixtures::node_archived(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
recordid_number,
RecordId,
RECORDID_NUMBER,
fixtures::recordid_number(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
recordid_string,
RecordId,
RECORDID_STRING,
fixtures::recordid_string(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
recordid_uuid,
RecordId,
RECORDID_UUID,
fixtures::recordid_uuid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
recordid_key_number,
RecordIdKey,
RECORDID_KEY_NUMBER,
fixtures::recordid_key_number(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
recordid_key_string,
RecordIdKey,
RECORDID_KEY_STRING,
fixtures::recordid_key_string(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
recordid_key_uuid,
RecordIdKey,
RECORDID_KEY_UUID,
fixtures::recordid_key_uuid(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
recordid_key_array,
RecordIdKey,
RECORDID_KEY_ARRAY,
fixtures::recordid_key_array(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
recordid_key_object,
RecordIdKey,
RECORDID_KEY_OBJECT,
fixtures::recordid_key_object(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
recordid_key_range,
RecordIdKey,
RECORDID_KEY_RANGE,
fixtures::recordid_key_range(),
[v3_0_0, v3_1_0, v3_1_1]
);
compat_test!(
term_document_basic,
TermDocument,
TERM_DOCUMENT_BASIC,
fixtures::term_document_basic(),
[v3_0_0_beta_1, v3_0_0_beta_3, v3_0_0, v3_1_0, v3_1_1]
);