From 8b132fb914cdc77493162ce43967a6d71f4bac7b Mon Sep 17 00:00:00 2001 From: Justin Bradfield Date: Wed, 30 Oct 2024 00:44:12 -0500 Subject: [PATCH] add network policy create/alter/drop/comment --- .../content/sql/system-catalog/mz_internal.md | 5 + doc/user/content/sql/types/mz_aclitem.md | 23 +- .../partials/sql-grammar/comment-on.svg | 28 +- doc/user/sql-grammar/sql-grammar.bnf | 2 +- src/adapter/src/catalog.rs | 10 + src/adapter/src/catalog/state.rs | 46 +- src/adapter/src/catalog/transact.rs | 88 +- src/adapter/src/command.rs | 8 +- src/adapter/src/coord/catalog_serving.rs | 2 + src/adapter/src/coord/command_handler.rs | 2 + src/adapter/src/coord/ddl.rs | 7 +- src/adapter/src/coord/sequencer.rs | 12 + src/adapter/src/coord/sequencer/inner.rs | 33 + src/adapter/src/statement_logging.rs | 1 + src/catalog/src/builtin.rs | 30 + src/catalog/src/durable.rs | 1 + src/catalog/src/durable/initialize.rs | 8 +- .../src/durable/objects/state_update.rs | 3 + src/catalog/src/durable/transaction.rs | 44 +- .../tests/snapshots/debug__opened_trace.snap | 16 +- .../snapshots/open__initial_audit_log.snap | 2 +- .../snapshots/open__initial_snapshot.snap | 7 +- src/environmentd/src/http/sql.rs | 1 + src/environmentd/tests/testdata/http/ws | 4 +- src/pgrepr-consts/src/oid.rs | 1 + src/pgwire/src/protocol.rs | 1 + src/repr/src/adt/mz_acl_item.rs | 26 +- src/sql-lexer/src/keywords.txt | 8 + src/sql-parser/src/ast/defs/name.rs | 2 + src/sql-parser/src/ast/defs/statement.rs | 159 +- src/sql-parser/src/ast/metadata.rs | 37 +- src/sql-parser/src/parser.rs | 148 +- src/sql-parser/tests/testdata/ddl | 21 + src/sql/src/catalog.rs | 7 + src/sql/src/names.rs | 50 +- src/sql/src/plan.rs | 61 +- src/sql/src/plan/statement.rs | 6 + src/sql/src/plan/statement/acl.rs | 32 +- src/sql/src/plan/statement/ddl.rs | 247 +- src/sql/src/plan/statement/show.rs | 18 + src/sql/src/plan/with_options.rs | 29 +- src/sql/src/rbac.rs | 18 +- src/sql/src/session/vars.rs | 7 + src/sql/src/session/vars/definitions.rs | 15 +- .../mz_storage_types__stats__tests__impl.snap | 21930 ++++++++-------- test/pgtest-mz/datums.pt | 12 +- test/sqllogictest/audit_log.slt | 4 +- .../autogenerated/mz_internal.slt | 1 + .../information_schema_tables.slt | 4 + .../mz_catalog_server_index_accounting.slt | 4 +- test/sqllogictest/network_policy.slt | 88 + test/sqllogictest/object_ownership.slt | 4 +- test/sqllogictest/oid.slt | 1 + test/sqllogictest/privilege_grants.slt | 20 +- test/sqllogictest/rbac_views.slt | 3 + test/testdrive/catalog.td | 3 +- test/testdrive/session.td | 2 + 57 files changed, 11602 insertions(+), 11750 deletions(-) create mode 100644 test/sqllogictest/network_policy.slt diff --git a/doc/user/content/sql/system-catalog/mz_internal.md b/doc/user/content/sql/system-catalog/mz_internal.md index fbc7394f0de8e..54c2bdac8a29a 100644 --- a/doc/user/content/sql/system-catalog/mz_internal.md +++ b/doc/user/content/sql/system-catalog/mz_internal.md @@ -745,6 +745,10 @@ The `mz_network_policy_rules` table contains a row for each network policy rule. | `address` | [`text`] | The address the rule will take action on. | | `direction` | [`text`] | The direction of traffic the rule applies to. `ingress` is the only supported direction. | +## `mz_show_network_policies` + +The `mz_show_show_network_policies` view contains a row for each network policy in the system. + ## `mz_show_all_privileges` The `mz_show_all_privileges` view contains a row for each privilege granted @@ -1266,6 +1270,7 @@ The `mz_webhook_sources` table contains a row for each webhook source in the sys + diff --git a/doc/user/content/sql/types/mz_aclitem.md b/doc/user/content/sql/types/mz_aclitem.md index 1c3bf4609ebce..49e21f4240aee 100644 --- a/doc/user/content/sql/types/mz_aclitem.md +++ b/doc/user/content/sql/types/mz_aclitem.md @@ -26,17 +26,18 @@ is `=/`. A list of all privileges and their abbreviations are below: -| Privilege | Description | Abbreviation | Applicable Object Types | -|-----------------|------------------------------------------------------------------------------------------------|-------------------|-----------------------------------------------| -| `SELECT` | Allows reading rows from an object. | r(”read”) | Table, View, Materialized View, Source | -| `INSERT` | Allows inserting into an object. | a(”append”) | Table | -| `UPDATE` | Allows updating an object (requires SELECT if a read is necessary). | w(”write”) | Table | -| `DELETE` | Allows deleting from an object (requires SELECT if a read is necessary). | d | Table | -| `CREATE` | Allows creating a new object within another object. | C | Database, Schema, Cluster | -| `USAGE` | Allows using an object or looking up members of an object. | U | Database, Schema, Connection, Secret, Cluster | -| `CREATEROLE` | Allows creating, altering, deleting roles and the ability to grant and revoke role membership. | R("Role") | System | -| `CREATEDB` | Allows creating databases. | B("dataBase") | System | -| `CREATECLUSTER` | Allows creating clusters. | N("compute Node") | System | +| Privilege | Description | Abbreviation | Applicable Object Types | +|-----------------------|------------------------------------------------------------------------------------------------|---------------------|-----------------------------------------------| +| `SELECT` | Allows reading rows from an object. | r(”read”) | Table, View, Materialized View, Source | +| `INSERT` | Allows inserting into an object. | a(”append”) | Table | +| `UPDATE` | Allows updating an object (requires SELECT if a read is necessary). | w(”write”) | Table | +| `DELETE` | Allows deleting from an object (requires SELECT if a read is necessary). | d | Table | +| `CREATE` | Allows creating a new object within another object. | C | Database, Schema, Cluster | +| `USAGE` | Allows using an object or looking up members of an object. | U | Database, Schema, Connection, Secret, Cluster | +| `CREATEROLE` | Allows creating, altering, deleting roles and the ability to grant and revoke role membership. | R("Role") | System | +| `CREATEDB` | Allows creating databases. | B("dataBase") | System | +| `CREATECLUSTER` | Allows creating clusters. | N("compute Node") | System | +| `CREATENETWORKPOLICY` | Allows creating network policies. | P("network Policy") | System | The `CREATEROLE` privilege is very powerful. It allows roles to grant and revoke membership in other roles, even if it doesn't have explicit membership in those roles. As a consequence, any role diff --git a/doc/user/layouts/partials/sql-grammar/comment-on.svg b/doc/user/layouts/partials/sql-grammar/comment-on.svg index dd4612e55a728..8a5b6f51161df 100644 --- a/doc/user/layouts/partials/sql-grammar/comment-on.svg +++ b/doc/user/layouts/partials/sql-grammar/comment-on.svg @@ -1,4 +1,4 @@ - + @@ -137,6 +137,14 @@ class="terminal" rx="10"/> VIEW + + + NETWORK POLICY object_name @@ -148,19 +156,19 @@ class="terminal" rx="10"/> IS - - - string_literal - + + + string_literal + - NULL + NULL - - + d="m17 17 h2 m0 0 h10 m120 0 h10 m20 0 h10 m84 0 h10 m0 0 h82 m-206 0 h20 m186 0 h20 m-226 0 q10 0 10 10 m206 0 q0 -10 10 -10 m-216 10 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m148 0 h10 m0 0 h18 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m82 0 h10 m0 0 h84 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m116 0 h10 m0 0 h50 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m98 0 h10 m0 0 h68 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m94 0 h10 m0 0 h72 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m62 0 h10 m0 0 h104 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m166 0 h10 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m56 0 h10 m0 0 h110 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m82 0 h10 m0 0 h84 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m76 0 h10 m0 0 h90 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m52 0 h10 m0 0 h114 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m78 0 h10 m0 0 h88 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m66 0 h10 m0 0 h100 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m56 0 h10 m0 0 h110 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m58 0 h10 m0 0 h108 m-196 -10 v20 m206 0 v-20 m-206 20 v24 m206 0 v-24 m-206 24 q0 10 10 10 m186 0 q10 0 10 -10 m-196 10 h10 m150 0 h10 m0 0 h16 m20 -704 h10 m104 0 h10 m0 0 h10 m32 0 h10 m2 0 l2 0 m2 0 l2 0 m2 0 l2 0 m-190 770 l2 0 m2 0 l2 0 m2 0 l2 0 m22 0 h10 m100 0 h10 m-140 0 h20 m120 0 h20 m-160 0 q10 0 10 10 m140 0 q0 -10 10 -10 m-150 10 v24 m140 0 v-24 m-140 24 q0 10 10 10 m120 0 q10 0 10 -10 m-130 10 h10 m56 0 h10 m0 0 h44 m23 -44 h-3"/> + + diff --git a/doc/user/sql-grammar/sql-grammar.bnf b/doc/user/sql-grammar/sql-grammar.bnf index 243725edb7c90..51b8bf2a124d8 100644 --- a/doc/user/sql-grammar/sql-grammar.bnf +++ b/doc/user/sql-grammar/sql-grammar.bnf @@ -84,7 +84,7 @@ comment_on ::= 'COMMENT ON' ( 'CLUSTER' | 'CLUSTER REPLICA' | 'COLUMN' | 'CONNECTION' | 'DATABASE' | 'FUNCTION' | 'INDEX' | 'MATERIALIZED VIEW' | 'ROLE' | 'SCHEMA' | 'SECRET' | 'SINK' | 'SOURCE' | - 'TABLE' | 'TYPE' | 'VIEW' + 'TABLE' | 'TYPE' | 'VIEW' | 'NETWORK POLICY' ) object_name 'IS' ( string_literal | 'NULL' ) commit ::= 'COMMIT' diff --git a/src/adapter/src/catalog.rs b/src/adapter/src/catalog.rs index 84e9b7b6c9692..318ae707f6957 100644 --- a/src/adapter/src/catalog.rs +++ b/src/adapter/src/catalog.rs @@ -1672,6 +1672,16 @@ impl SessionCatalog for ConnCatalog<'_> { } } + fn resolve_network_policy( + &self, + policy_name: &str, + ) -> Result<&dyn mz_sql::catalog::CatalogNetworkPolicy, SqlCatalogError> { + match self.state.try_get_network_policy_by_name(policy_name) { + Some(policy) => Ok(policy), + None => Err(SqlCatalogError::UnknownNetworkPolicy(policy_name.into())), + } + } + fn try_get_role(&self, id: &RoleId) -> Option<&dyn CatalogRole> { Some(self.state.roles_by_id.get(id)?) } diff --git a/src/adapter/src/catalog/state.rs b/src/adapter/src/catalog/state.rs index 5438a24028f99..7460ec6968574 100644 --- a/src/adapter/src/catalog/state.rs +++ b/src/adapter/src/catalog/state.rs @@ -375,13 +375,10 @@ impl CatalogState { seen, )); } - id @ ObjectId::Role(_) => { - let unseen = seen.insert(id.clone()); - if unseen { - dependents.push(id.clone()); - } + ObjectId::NetworkPolicy(id) => { + dependents.extend_from_slice(&self.network_policy_dependents(*id, seen)); } - id @ ObjectId::NetworkPolicy(_) => { + id @ ObjectId::Role(_) => { let unseen = seen.insert(id.clone()); if unseen { dependents.push(id.clone()); @@ -399,7 +396,7 @@ impl CatalogState { /// itself. /// /// The order is guaranteed to be in reverse dependency order, i.e. the leafs will appear - /// earlier in the list than the roots. This is particularly userful for the order to drop + /// earlier in the list than the roots. This is particularly useful for the order to drop /// objects. fn cluster_dependents( &self, @@ -430,7 +427,7 @@ impl CatalogState { /// itself. /// /// The order is guaranteed to be in reverse dependency order, i.e. the leafs will appear - /// earlier in the list than the roots. This is particularly userful for the order to drop + /// earlier in the list than the roots. This is particularly useful for the order to drop /// objects. pub(super) fn cluster_replica_dependents( &self, @@ -451,7 +448,7 @@ impl CatalogState { /// itself. /// /// The order is guaranteed to be in reverse dependency order, i.e. the leafs will appear - /// earlier in the list than the roots. This is particularly userful for the order to drop + /// earlier in the list than the roots. This is particularly useful for the order to drop /// objects. fn database_dependents( &self, @@ -481,7 +478,7 @@ impl CatalogState { /// itself. /// /// The order is guaranteed to be in reverse dependency order, i.e. the leafs will appear - /// earlier in the list than the roots. This is particularly userful for the order to drop + /// earlier in the list than the roots. This is particularly useful for the order to drop /// objects. fn schema_dependents( &self, @@ -507,7 +504,7 @@ impl CatalogState { /// itself. /// /// The order is guaranteed to be in reverse dependency order, i.e. the leafs will appear - /// earlier in the list than the roots. This is particularly userful for the order to drop + /// earlier in the list than the roots. This is particularly useful for the order to drop /// objects. pub(super) fn item_dependents( &self, @@ -533,6 +530,24 @@ impl CatalogState { dependents } + /// Returns all the IDs of all objects that depend on `network_policy_id`, including `network_policy_id` + /// itself. + /// + /// The order is guaranteed to be in reverse dependency order, i.e. the leafs will appear + /// earlier in the list than the roots. This is particularly useful for the order to drop + /// objects. + pub(super) fn network_policy_dependents( + &self, + network_policy_id: NetworkPolicyId, + _seen: &mut BTreeSet, + ) -> Vec { + let object_id = ObjectId::NetworkPolicy(network_policy_id); + // Currently network policies have no dependents + // when we add the ability for users or sources/sinks to have policies + // this method will need to be updated. + vec![object_id] + } + /// Indicates whether the indicated item is considered stable or not. /// /// Only stable items can be used as dependencies of other catalog items. @@ -721,6 +736,15 @@ impl CatalogState { .map(|id| &self.roles_by_id[id]) } + pub(super) fn try_get_network_policy_by_name( + &self, + policy_name: &str, + ) -> Option<&NetworkPolicy> { + self.network_policies_by_name + .get(policy_name) + .map(|id| &self.network_policies_by_id[id]) + } + pub(crate) fn collect_role_membership(&self, id: &RoleId) -> BTreeSet { let mut membership = BTreeSet::new(); let mut queue = VecDeque::from(vec![id]); diff --git a/src/adapter/src/catalog/transact.rs b/src/adapter/src/catalog/transact.rs index f4ee41b25db5a..debd7312506b0 100644 --- a/src/adapter/src/catalog/transact.rs +++ b/src/adapter/src/catalog/transact.rs @@ -22,7 +22,7 @@ use mz_audit_log::{ ObjectType, SchedulingDecisionsWithReasonsV1, VersionedEvent, VersionedStorageUsage, }; use mz_catalog::builtin::BuiltinLog; -use mz_catalog::durable::Transaction; +use mz_catalog::durable::{NetworkPolicy, Transaction}; use mz_catalog::memory::error::{AmbiguousRename, Error, ErrorKind}; use mz_catalog::memory::objects::{ CatalogItem, ClusterConfig, DataSourceDesc, SourceReferences, StateDiff, StateUpdate, @@ -81,6 +81,12 @@ pub enum Op { attributes: RoleAttributes, vars: RoleVars, }, + AlterNetworkPolicy { + id: NetworkPolicyId, + rules: Vec, + name: String, + owner_id: RoleId, + }, CreateDatabase { name: String, owner_id: RoleId, @@ -115,7 +121,6 @@ pub enum Op { owner_id: RoleId, }, CreateNetworkPolicy { - id: NetworkPolicyId, rules: Vec, name: String, owner_id: RoleId, @@ -655,6 +660,38 @@ impl Catalog { info!("update role {name} ({id})"); } + Op::AlterNetworkPolicy { + id, + rules, + name, + owner_id: _owner_id, + } => { + let existing_policy = state.get_network_policy(&id).clone(); + let mut policy: NetworkPolicy = existing_policy.into(); + policy.rules = rules; + if is_reserved_name(&name) { + return Err(AdapterError::Catalog(Error::new( + ErrorKind::ReservedNetworkPolicyName(name), + ))); + } + tx.update_network_policy(id, policy.clone())?; + + CatalogState::add_to_audit_log( + &state.system_configuration, + oracle_write_ts, + session, + tx, + audit_events, + EventType::Alter, + ObjectType::NetworkPolicy, + EventDetails::IdNameV1(mz_audit_log::IdNameV1 { + id: id.to_string(), + name: name.clone(), + }), + )?; + + info!("update network policy {name} ({id})"); + } Op::CreateDatabase { name, owner_id } => { let database_owner_privileges = vec![rbac::owner_privilege( mz_sql::catalog::ObjectType::Database, @@ -1123,7 +1160,6 @@ impl Catalog { } } Op::CreateNetworkPolicy { - id, rules, name, owner_id, @@ -1157,14 +1193,29 @@ impl Catalog { .collect(); let temporary_oids: HashSet<_> = state.get_temporary_oids().collect(); - tx.insert_user_network_policy( - id, - name, + let id = tx.insert_user_network_policy( + name.clone(), rules, privileges, owner_id, &temporary_oids, )?; + + CatalogState::add_to_audit_log( + &state.system_configuration, + oracle_write_ts, + session, + tx, + audit_events, + EventType::Create, + ObjectType::NetworkPolicy, + EventDetails::IdNameV1(mz_audit_log::IdNameV1 { + id: id.to_string(), + name: name.clone(), + }), + )?; + + info!("created network policy {name} ({id})"); } Op::Comment { object_id, @@ -1357,6 +1408,31 @@ impl Catalog { info!("drop role {}", role.name()); } + // Drop any network policies. + tx.remove_network_policies(&delta.network_policies)?; + + for network_policy_id in delta.network_policies { + let policy = state + .network_policies_by_id + .get(&network_policy_id) + .expect("catalog out of sync"); + + CatalogState::add_to_audit_log( + &state.system_configuration, + oracle_write_ts, + session, + tx, + audit_events, + EventType::Drop, + ObjectType::NetworkPolicy, + EventDetails::IdNameV1(mz_audit_log::IdNameV1 { + id: policy.id.to_string(), + name: policy.name.clone(), + }), + )?; + info!("drop network policy {}", policy.name.clone()); + } + // Drop any replicas. let replicas = delta.replicas.keys().copied().collect(); tx.remove_cluster_replicas(&replicas)?; diff --git a/src/adapter/src/command.rs b/src/adapter/src/command.rs index 7a9289bb9c574..52dae87a9959c 100644 --- a/src/adapter/src/command.rs +++ b/src/adapter/src/command.rs @@ -321,6 +321,8 @@ pub enum ExecuteResponse { CreatedContinualTask, /// The requested type was created. CreatedType, + /// The requested network policy was created. + CreatedNetworkPolicy, /// The requested prepared statement was removed. Deallocate { all: bool }, /// The requested cursor was declared. @@ -486,6 +488,7 @@ impl TryInto for ExecuteResponseKind { ExecuteResponseKind::CreatedMaterializedView => { Ok(ExecuteResponse::CreatedMaterializedView) } + ExecuteResponseKind::CreatedNetworkPolicy => Ok(ExecuteResponse::CreatedNetworkPolicy), ExecuteResponseKind::CreatedContinualTask => Ok(ExecuteResponse::CreatedContinualTask), ExecuteResponseKind::CreatedType => Ok(ExecuteResponse::CreatedType), ExecuteResponseKind::Deallocate => Err(()), @@ -550,6 +553,7 @@ impl ExecuteResponse { CreatedMaterializedView { .. } => Some("CREATE MATERIALIZED VIEW".into()), CreatedContinualTask { .. } => Some("CREATE CONTINUAL TASK".into()), CreatedType => Some("CREATE TYPE".into()), + CreatedNetworkPolicy => Some("CREATE NETWORKPOLICY".into()), Deallocate { all } => Some(format!("DEALLOCATE{}", if *all { " ALL" } else { "" })), DeclaredCursor => Some("DECLARE CURSOR".into()), Deleted(n) => Some(format!("DELETE {}", n)), @@ -612,7 +616,8 @@ impl ExecuteResponse { | AlterConnection | AlterSource | AlterSink - | AlterTableAddColumn => &[AlteredObject], + | AlterTableAddColumn + | AlterNetworkPolicy => &[AlteredObject], AlterDefaultPrivileges => &[AlteredDefaultPrivileges], AlterSetCluster => &[AlteredObject], AlterRole => &[AlteredRole], @@ -640,6 +645,7 @@ impl ExecuteResponse { CreateIndex => &[CreatedIndex], CreateType => &[CreatedType], PlanKind::Deallocate => &[ExecuteResponseKind::Deallocate], + CreateNetworkPolicy => &[CreatedNetworkPolicy], Declare => &[DeclaredCursor], DiscardTemp => &[DiscardedTemp], DiscardAll => &[DiscardedAll], diff --git a/src/adapter/src/coord/catalog_serving.rs b/src/adapter/src/coord/catalog_serving.rs index eda8d1e24084a..1758c0445cb29 100644 --- a/src/adapter/src/coord/catalog_serving.rs +++ b/src/adapter/src/coord/catalog_serving.rs @@ -72,6 +72,7 @@ pub fn auto_run_on_catalog_server<'a, 's, 'p>( | Plan::CreateDatabase(_) | Plan::CreateSchema(_) | Plan::CreateRole(_) + | Plan::CreateNetworkPolicy(_) | Plan::CreateCluster(_) | Plan::CreateClusterReplica(_) | Plan::CreateContinualTask(_) @@ -106,6 +107,7 @@ pub fn auto_run_on_catalog_server<'a, 's, 'p>( | Plan::ExplainPushdown(_) | Plan::ExplainSinkSchema(_) | Plan::Insert(_) + | Plan::AlterNetworkPolicy(_) | Plan::AlterNoop(_) | Plan::AlterClusterRename(_) | Plan::AlterClusterSwap(_) diff --git a/src/adapter/src/coord/command_handler.rs b/src/adapter/src/coord/command_handler.rs index d85e5981bf415..7bc580b0d5615 100644 --- a/src/adapter/src/coord/command_handler.rs +++ b/src/adapter/src/coord/command_handler.rs @@ -659,6 +659,7 @@ impl Coordinator { | Statement::AlterSystemResetAll(_) | Statement::AlterSystemSet(_) | Statement::AlterTableAddColumn(_) + | Statement::AlterNetworkPolicy(_) | Statement::CreateCluster(_) | Statement::CreateClusterReplica(_) | Statement::CreateConnection(_) @@ -677,6 +678,7 @@ impl Coordinator { | Statement::CreateType(_) | Statement::CreateView(_) | Statement::CreateWebhookSource(_) + | Statement::CreateNetworkPolicy(_) | Statement::Delete(_) | Statement::DropObjects(_) | Statement::DropOwned(_) diff --git a/src/adapter/src/coord/ddl.rs b/src/adapter/src/coord/ddl.rs index b709bcaba580a..95e688da4752b 100644 --- a/src/adapter/src/coord/ddl.rs +++ b/src/adapter/src/coord/ddl.rs @@ -1376,6 +1376,9 @@ impl Coordinator { Op::CreateRole { .. } => { new_roles += 1; } + Op::CreateNetworkPolicy { .. } => { + new_network_policies += 1; + } Op::CreateCluster { .. } => { // TODO(benesch): having deprecated linked clusters, remove // the `max_sources` and `max_sinks` limit, and set a higher @@ -1548,6 +1551,7 @@ impl Coordinator { }, Op::AlterRole { .. } | Op::AlterRetainHistory { .. } + | Op::AlterNetworkPolicy { .. } | Op::UpdatePrivilege { .. } | Op::UpdateDefaultPrivilege { .. } | Op::GrantRole { .. } @@ -1565,8 +1569,7 @@ impl Coordinator { | Op::ResetAllSystemConfiguration { .. } | Op::Comment { .. } | Op::WeirdStorageUsageUpdates { .. } - | Op::TransactionDryRun - | Op::CreateNetworkPolicy { .. } => {} + | Op::TransactionDryRun => {} } } diff --git a/src/adapter/src/coord/sequencer.rs b/src/adapter/src/coord/sequencer.rs index 0ff16cf3c3382..911edaefeaef5 100644 --- a/src/adapter/src/coord/sequencer.rs +++ b/src/adapter/src/coord/sequencer.rs @@ -228,6 +228,12 @@ impl Coordinator { .await; ctx.retire(result); } + Plan::CreateNetworkPolicy(plan) => { + let res = self + .sequence_create_network_policy(ctx.session(), plan) + .await; + ctx.retire(res); + } Plan::Comment(plan) => { let result = self.sequence_comment_on(ctx.session(), plan).await; ctx.retire(result); @@ -470,6 +476,12 @@ impl Coordinator { let result = self.sequence_alter_table(ctx.session(), plan).await; ctx.retire(result); } + Plan::AlterNetworkPolicy(plan) => { + let res = self + .sequence_alter_network_policy(ctx.session(), plan) + .await; + ctx.retire(res); + } Plan::DiscardTemp => { self.drop_temp_items(ctx.session().conn_id()).await; ctx.retire(Ok(ExecuteResponse::DiscardedTemp)); diff --git a/src/adapter/src/coord/sequencer/inner.rs b/src/adapter/src/coord/sequencer/inner.rs index 54d1310adde09..d42fc4631d755 100644 --- a/src/adapter/src/coord/sequencer/inner.rs +++ b/src/adapter/src/coord/sequencer/inner.rs @@ -907,6 +907,39 @@ impl Coordinator { .map(|_| ExecuteResponse::CreatedRole) } + #[instrument] + pub(super) async fn sequence_create_network_policy( + &mut self, + session: &Session, + plan::CreateNetworkPolicyPlan { name, rules }: plan::CreateNetworkPolicyPlan, + ) -> Result { + let op = catalog::Op::CreateNetworkPolicy { + rules, + name, + owner_id: *session.current_role_id(), + }; + self.catalog_transact_conn(Some(session.conn_id()), vec![op]) + .await + .map(|_| ExecuteResponse::CreatedNetworkPolicy) + } + + #[instrument] + pub(super) async fn sequence_alter_network_policy( + &mut self, + session: &Session, + plan::AlterNetworkPolicyPlan { id, name, rules }: plan::AlterNetworkPolicyPlan, + ) -> Result { + let op = catalog::Op::AlterNetworkPolicy { + id, + rules, + name, + owner_id: *session.current_role_id(), + }; + self.catalog_transact_conn(Some(session.conn_id()), vec![op]) + .await + .map(|_| ExecuteResponse::AlteredObject(ObjectType::NetworkPolicy)) + } + #[instrument] pub(super) async fn sequence_create_table( &mut self, diff --git a/src/adapter/src/statement_logging.rs b/src/adapter/src/statement_logging.rs index cac4c3450a043..3ecc68e140293 100644 --- a/src/adapter/src/statement_logging.rs +++ b/src/adapter/src/statement_logging.rs @@ -209,6 +209,7 @@ impl From<&ExecuteResponse> for StatementEndedExecutionReason { | ExecuteResponse::CreatedMaterializedView | ExecuteResponse::CreatedContinualTask | ExecuteResponse::CreatedType + | ExecuteResponse::CreatedNetworkPolicy | ExecuteResponse::Deallocate { .. } | ExecuteResponse::DeclaredCursor | ExecuteResponse::Deleted(_) diff --git a/src/catalog/src/builtin.rs b/src/catalog/src/builtin.rs index 568fb9ab201a3..265b4055f5a03 100644 --- a/src/catalog/src/builtin.rs +++ b/src/catalog/src/builtin.rs @@ -7673,6 +7673,35 @@ WHERE access: vec![PUBLIC_SELECT], }); +pub static MZ_SHOW_NETWORK_POLICIES: LazyLock = LazyLock::new(|| BuiltinView { + name: "mz_show_network_policies", + schema: MZ_INTERNAL_SCHEMA, + oid: oid::VIEW_MZ_SHOW_NETWORK_POLICIES_OID, + column_defs: None, + sql: " +WITH comments AS ( + SELECT id, comment + FROM mz_internal.mz_comments + WHERE object_type = 'network-policy' AND object_sub_id IS NULL +) +SELECT + policy.name, + pg_catalog.string_agg(rule.name,',' ORDER BY rule.name) as rules, + COALESCE(comment, '') as comment +FROM + mz_internal.mz_network_policies as policy +LEFT JOIN + mz_internal.mz_network_policy_rules as rule ON policy.id = rule.policy_id +LEFT JOIN + comments ON policy.id = comments.id +WHERE + policy.id NOT LIKE 's%' +AND + policy.id NOT LIKE 'g%' +GROUP BY policy.name, comments.comment;", + access: vec![PUBLIC_SELECT], +}); + pub static MZ_CLUSTER_REPLICA_HISTORY: LazyLock = LazyLock::new(|| BuiltinView { name: "mz_cluster_replica_history", schema: MZ_INTERNAL_SCHEMA, @@ -9345,6 +9374,7 @@ pub static BUILTINS_STATIC: LazyLock>> = LazyLock::ne Builtin::View(&MZ_COMPUTE_HYDRATION_STATUSES), Builtin::View(&MZ_HYDRATION_STATUSES), Builtin::View(&MZ_SHOW_CLUSTER_REPLICAS), + Builtin::View(&MZ_SHOW_NETWORK_POLICIES), Builtin::Index(&MZ_SHOW_DATABASES_IND), Builtin::Index(&MZ_SHOW_SCHEMAS_IND), Builtin::Index(&MZ_SHOW_CONNECTIONS_IND), diff --git a/src/catalog/src/durable.rs b/src/catalog/src/durable.rs index 2bca27d910e40..3eacba7e97cd3 100644 --- a/src/catalog/src/durable.rs +++ b/src/catalog/src/durable.rs @@ -63,6 +63,7 @@ pub const USER_REPLICA_ID_ALLOC_KEY: &str = "replica"; pub const SYSTEM_REPLICA_ID_ALLOC_KEY: &str = "system_replica"; pub const AUDIT_LOG_ID_ALLOC_KEY: &str = "auditlog"; pub const STORAGE_USAGE_ID_ALLOC_KEY: &str = "storage_usage"; +pub const USER_NETWORK_POLICY_ID_ALLOC_KEY: &str = "user_network_policy"; pub const OID_ALLOC_KEY: &str = "oid"; pub(crate) const CATALOG_CONTENT_VERSION_KEY: &str = "catalog_content_version"; diff --git a/src/catalog/src/durable/initialize.rs b/src/catalog/src/durable/initialize.rs index 1649b25f28db3..155b119e3ae2a 100644 --- a/src/catalog/src/durable/initialize.rs +++ b/src/catalog/src/durable/initialize.rs @@ -42,8 +42,8 @@ use crate::durable::{ DefaultPrivilege, ReplicaConfig, ReplicaLocation, Role, Schema, Transaction, AUDIT_LOG_ID_ALLOC_KEY, CATALOG_CONTENT_VERSION_KEY, DATABASE_ID_ALLOC_KEY, OID_ALLOC_KEY, SCHEMA_ID_ALLOC_KEY, STORAGE_USAGE_ID_ALLOC_KEY, SYSTEM_CLUSTER_ID_ALLOC_KEY, - SYSTEM_REPLICA_ID_ALLOC_KEY, USER_CLUSTER_ID_ALLOC_KEY, USER_REPLICA_ID_ALLOC_KEY, - USER_ROLE_ID_ALLOC_KEY, + SYSTEM_REPLICA_ID_ALLOC_KEY, USER_CLUSTER_ID_ALLOC_KEY, USER_NETWORK_POLICY_ID_ALLOC_KEY, + USER_REPLICA_ID_ALLOC_KEY, USER_ROLE_ID_ALLOC_KEY, }; /// The key within the "config" Collection that stores the version of the catalog. @@ -229,6 +229,10 @@ pub(crate) async fn initialize( SYSTEM_REPLICA_ID_ALLOC_KEY.to_string(), DEFAULT_ALLOCATOR_ID, ), + ( + USER_NETWORK_POLICY_ID_ALLOC_KEY.to_string(), + DEFAULT_ALLOCATOR_ID, + ), (AUDIT_LOG_ID_ALLOC_KEY.to_string(), DEFAULT_ALLOCATOR_ID), (STORAGE_USAGE_ID_ALLOC_KEY.to_string(), DEFAULT_ALLOCATOR_ID), (OID_ALLOC_KEY.to_string(), FIRST_USER_OID.into()), diff --git a/src/catalog/src/durable/objects/state_update.rs b/src/catalog/src/durable/objects/state_update.rs index 4f33ccdfa2558..333767e9ca2f7 100644 --- a/src/catalog/src/durable/objects/state_update.rs +++ b/src/catalog/src/durable/objects/state_update.rs @@ -135,6 +135,7 @@ impl StateUpdate { roles, clusters, cluster_replicas, + network_policies, introspection_sources, id_allocator, configs, @@ -157,6 +158,7 @@ impl StateUpdate { let roles = from_batch(roles, StateUpdateKind::Role); let clusters = from_batch(clusters, StateUpdateKind::Cluster); let cluster_replicas = from_batch(cluster_replicas, StateUpdateKind::ClusterReplica); + let network_policies = from_batch(network_policies, StateUpdateKind::NetworkPolicy); let introspection_sources = from_batch( introspection_sources, StateUpdateKind::IntrospectionSourceIndex, @@ -186,6 +188,7 @@ impl StateUpdate { .chain(roles) .chain(clusters) .chain(cluster_replicas) + .chain(network_policies) .chain(introspection_sources) .chain(id_allocators) .chain(configs) diff --git a/src/catalog/src/durable/transaction.rs b/src/catalog/src/durable/transaction.rs index f9a195f0ad3b5..cf75cb53ed18c 100644 --- a/src/catalog/src/durable/transaction.rs +++ b/src/catalog/src/durable/transaction.rs @@ -60,8 +60,8 @@ use crate::durable::{ CatalogError, DefaultPrivilege, DurableCatalogError, DurableCatalogState, NetworkPolicy, Snapshot, AUDIT_LOG_ID_ALLOC_KEY, CATALOG_CONTENT_VERSION_KEY, DATABASE_ID_ALLOC_KEY, OID_ALLOC_KEY, SCHEMA_ID_ALLOC_KEY, STORAGE_USAGE_ID_ALLOC_KEY, SYSTEM_ITEM_ALLOC_KEY, - SYSTEM_REPLICA_ID_ALLOC_KEY, USER_ITEM_ALLOC_KEY, USER_REPLICA_ID_ALLOC_KEY, - USER_ROLE_ID_ALLOC_KEY, + SYSTEM_REPLICA_ID_ALLOC_KEY, USER_ITEM_ALLOC_KEY, USER_NETWORK_POLICY_ID_ALLOC_KEY, + USER_REPLICA_ID_ALLOC_KEY, USER_ROLE_ID_ALLOC_KEY, }; use crate::memory::objects::{StateDiff, StateUpdate, StateUpdateKind}; @@ -567,7 +567,6 @@ impl<'a> Transaction<'a> { pub fn insert_user_network_policy( &mut self, - id: NetworkPolicyId, name: String, rules: Vec, privileges: Vec, @@ -575,6 +574,8 @@ impl<'a> Transaction<'a> { temporary_oids: &HashSet, ) -> Result { let oid = self.allocate_oid(temporary_oids)?; + let id = self.get_and_increment_id(USER_NETWORK_POLICY_ID_ALLOC_KEY.to_string())?; + let id = NetworkPolicyId::User(id); self.insert_network_policy(id, name, rules, privileges, owner_id, oid) } @@ -1533,7 +1534,38 @@ impl<'a> Transaction<'a> { Err(SqlCatalogError::UnknownNetworkPolicy(id.to_string()).into()) } } + /// Removes all network policies in `network policies` from the transaction. + /// + /// Returns an error if any id in `network policy` is not found. + /// + /// NOTE: On error, there still may be some roles removed from the transaction. It + /// is up to the caller to either abort the transaction or commit. + pub fn remove_network_policies( + &mut self, + network_policies: &BTreeSet, + ) -> Result<(), CatalogError> { + if network_policies.is_empty() { + return Ok(()); + } + + let to_remove = network_policies + .iter() + .map(|policy_id| (NetworkPolicyKey { id: *policy_id }, None)) + .collect(); + let mut prev = self.network_policies.set_many(to_remove, self.op_id)?; + assert!( + prev.iter().all(|(k, _)| k.id.is_user()), + "cannot delete non-user network policy" + ); + + prev.retain(|_k, v| v.is_none()); + if !prev.is_empty() { + let err = prev.keys().map(|k| k.id.to_string()).join(", "); + return Err(SqlCatalogError::UnknownNetworkPolicy(err).into()); + } + Ok(()) + } /// Set persisted default privilege. /// /// DO NOT call this function in a loop, use [`Self::set_default_privileges`] instead. @@ -2167,6 +2199,7 @@ impl<'a> Transaction<'a> { roles: self.roles.pending(), clusters: self.clusters.pending(), cluster_replicas: self.cluster_replicas.pending(), + network_policies: self.network_policies.pending(), introspection_sources: self.introspection_sources.pending(), id_allocator: self.id_allocator.pending(), configs: self.configs.pending(), @@ -2204,6 +2237,7 @@ impl<'a> Transaction<'a> { roles, clusters, cluster_replicas, + network_policies, introspection_sources, id_allocator, configs, @@ -2228,6 +2262,7 @@ impl<'a> Transaction<'a> { differential_dataflow::consolidation::consolidate_updates(roles); differential_dataflow::consolidation::consolidate_updates(clusters); differential_dataflow::consolidation::consolidate_updates(cluster_replicas); + differential_dataflow::consolidation::consolidate_updates(network_policies); differential_dataflow::consolidation::consolidate_updates(introspection_sources); differential_dataflow::consolidation::consolidate_updates(id_allocator); differential_dataflow::consolidation::consolidate_updates(configs); @@ -2407,6 +2442,7 @@ pub struct TransactionBatch { pub(crate) roles: Vec<(proto::RoleKey, proto::RoleValue, Diff)>, pub(crate) clusters: Vec<(proto::ClusterKey, proto::ClusterValue, Diff)>, pub(crate) cluster_replicas: Vec<(proto::ClusterReplicaKey, proto::ClusterReplicaValue, Diff)>, + pub(crate) network_policies: Vec<(proto::NetworkPolicyKey, proto::NetworkPolicyValue, Diff)>, pub(crate) introspection_sources: Vec<( proto::ClusterIntrospectionSourceIndexKey, proto::ClusterIntrospectionSourceIndexValue, @@ -2458,6 +2494,7 @@ impl TransactionBatch { roles, clusters, cluster_replicas, + network_policies, introspection_sources, id_allocator, configs, @@ -2480,6 +2517,7 @@ impl TransactionBatch { && roles.is_empty() && clusters.is_empty() && cluster_replicas.is_empty() + && network_policies.is_empty() && introspection_sources.is_empty() && id_allocator.is_empty() && configs.is_empty() diff --git a/src/catalog/tests/snapshots/debug__opened_trace.snap b/src/catalog/tests/snapshots/debug__opened_trace.snap index 09620014e64eb..626f1a76c38de 100644 --- a/src/catalog/tests/snapshots/debug__opened_trace.snap +++ b/src/catalog/tests/snapshots/debug__opened_trace.snap @@ -387,7 +387,7 @@ Trace { object_id: "SYSTEM", grantee_id: "s1", grantor_id: "s1", - privileges: "RBN", + privileges: "RBNP", }, ), ), @@ -1032,6 +1032,18 @@ Trace { 2, 1, ), + ( + ( + IdAllocKey { + name: "user_network_policy", + }, + IdAllocValue { + next_id: 1, + }, + ), + 2, + 1, + ), ( ( IdAllocKey { @@ -2200,7 +2212,7 @@ Trace { SystemPrivilegesValue { acl_mode: Some( AclMode { - bitflags: 3758096384, + bitflags: 8053063680, }, ), }, diff --git a/src/catalog/tests/snapshots/open__initial_audit_log.snap b/src/catalog/tests/snapshots/open__initial_audit_log.snap index 0107ca3737225..a7ce419f6c8ed 100644 --- a/src/catalog/tests/snapshots/open__initial_audit_log.snap +++ b/src/catalog/tests/snapshots/open__initial_audit_log.snap @@ -193,7 +193,7 @@ expression: audit_log object_id: "SYSTEM", grantee_id: "s1", grantor_id: "s1", - privileges: "RBN", + privileges: "RBNP", }, ), user: None, diff --git a/src/catalog/tests/snapshots/open__initial_snapshot.snap b/src/catalog/tests/snapshots/open__initial_snapshot.snap index 7e7646194353b..f20a54b6bc8d0 100644 --- a/src/catalog/tests/snapshots/open__initial_snapshot.snap +++ b/src/catalog/tests/snapshots/open__initial_snapshot.snap @@ -1356,6 +1356,11 @@ Snapshot { }: IdAllocValue { next_id: 2, }, + IdAllocKey { + name: "user_network_policy", + }: IdAllocValue { + next_id: 1, + }, IdAllocKey { name: "user_role", }: IdAllocValue { @@ -1520,7 +1525,7 @@ Snapshot { }: SystemPrivilegesValue { acl_mode: Some( AclMode { - bitflags: 3758096384, + bitflags: 8053063680, }, ), }, diff --git a/src/environmentd/src/http/sql.rs b/src/environmentd/src/http/sql.rs index 3932810bd9caa..c82a3c84c0866 100644 --- a/src/environmentd/src/http/sql.rs +++ b/src/environmentd/src/http/sql.rs @@ -1224,6 +1224,7 @@ async fn execute_stmt( | ExecuteResponse::CreatedMaterializedView { .. } | ExecuteResponse::CreatedContinualTask { .. } | ExecuteResponse::CreatedType + | ExecuteResponse::CreatedNetworkPolicy | ExecuteResponse::Comment | ExecuteResponse::Deleted(_) | ExecuteResponse::DiscardedTemp diff --git a/src/environmentd/tests/testdata/http/ws b/src/environmentd/tests/testdata/http/ws index fccf41a306af0..bee3e9252cb92 100644 --- a/src/environmentd/tests/testdata/http/ws +++ b/src/environmentd/tests/testdata/http/ws @@ -402,7 +402,7 @@ ws-text ws-text {"query": "SELECT 1 FROM mz_sources LIMIT 1"} ---- -{"type":"Notice","payload":{"message":"{\n \"plans\": {\n \"raw\": {\n \"text\": \"Finish limit=1 output=[#0]\\n Project (#15)\\n Map (1)\\n Get mz_catalog.mz_sources\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 460\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"data\": [\n 45,\n 1\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n },\n \"optimized\": {\n \"global\": {\n \"text\": \"t72:\\n Finish limit=1 output=[#0]\\n ArrangeBy keys=[[#0]]\\n ReadGlobalFromSameDataflow t71\\n\\nt71:\\n Project (#15)\\n Map (1)\\n ReadIndex on=mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"t72\",\n \"plan\": {\n \"ArrangeBy\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"Transient\": 71\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ],\n \"keys\": []\n },\n \"access_strategy\": \"SameDataflow\"\n }\n },\n \"keys\": [\n [\n {\n \"Column\": 0\n }\n ]\n ]\n }\n }\n },\n {\n \"id\": \"t71\",\n \"plan\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 460\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n },\n \"access_strategy\": {\n \"Index\": [\n [\n {\n \"System\": 731\n },\n \"FullScan\"\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"Ok\": {\n \"data\": [\n 45,\n 1\n ]\n }\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n }\n ],\n \"sources\": []\n }\n },\n \"fast_path\": {\n \"text\": \"Explained Query (fast path):\\n Finish limit=1 output=[#0]\\n Project (#15)\\n Map (1)\\n ReadIndex on=mz_catalog.mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"Explained Query (fast path)\",\n \"plan\": {\n \"PeekExisting\": [\n {\n \"System\": 460\n },\n {\n \"System\": 731\n },\n null,\n {\n \"mfp\": {\n \"expressions\": [\n {\n \"Literal\": [\n {\n \"Ok\": {\n \"data\": [\n 45,\n 1\n ]\n }\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ],\n \"predicates\": [],\n \"projection\": [\n 15\n ],\n \"input_arity\": 15\n }\n }\n ]\n }\n }\n ],\n \"sources\": []\n }\n }\n }\n },\n \"insights\": {\n \"imports\": {\n \"s731\": {\n \"name\": {\n \"schema\": \"mz_catalog\",\n \"item\": \"mz_sources_ind\"\n },\n \"type\": \"compute\"\n }\n },\n \"fast_path_clusters\": {},\n \"fast_path_limit\": null,\n \"persist_count\": []\n },\n \"cluster\": {\n \"name\": \"mz_catalog_server\",\n \"id\": {\n \"System\": 2\n }\n },\n \"redacted_sql\": \"SELECT '' FROM [s460 AS mz_catalog.mz_sources] LIMIT ''\"\n}","code":"MZ001","severity":"notice"}} +{"type":"Notice","payload":{"message":"{\n \"plans\": {\n \"raw\": {\n \"text\": \"Finish limit=1 output=[#0]\\n Project (#15)\\n Map (1)\\n Get mz_catalog.mz_sources\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 460\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"data\": [\n 45,\n 1\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n },\n \"optimized\": {\n \"global\": {\n \"text\": \"t72:\\n Finish limit=1 output=[#0]\\n ArrangeBy keys=[[#0]]\\n ReadGlobalFromSameDataflow t71\\n\\nt71:\\n Project (#15)\\n Map (1)\\n ReadIndex on=mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"t72\",\n \"plan\": {\n \"ArrangeBy\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"Transient\": 71\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ],\n \"keys\": []\n },\n \"access_strategy\": \"SameDataflow\"\n }\n },\n \"keys\": [\n [\n {\n \"Column\": 0\n }\n ]\n ]\n }\n }\n },\n {\n \"id\": \"t71\",\n \"plan\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 460\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n },\n \"access_strategy\": {\n \"Index\": [\n [\n {\n \"System\": 732\n },\n \"FullScan\"\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"Ok\": {\n \"data\": [\n 45,\n 1\n ]\n }\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n }\n ],\n \"sources\": []\n }\n },\n \"fast_path\": {\n \"text\": \"Explained Query (fast path):\\n Finish limit=1 output=[#0]\\n Project (#15)\\n Map (1)\\n ReadIndex on=mz_catalog.mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"Explained Query (fast path)\",\n \"plan\": {\n \"PeekExisting\": [\n {\n \"System\": 460\n },\n {\n \"System\": 732\n },\n null,\n {\n \"mfp\": {\n \"expressions\": [\n {\n \"Literal\": [\n {\n \"Ok\": {\n \"data\": [\n 45,\n 1\n ]\n }\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ],\n \"predicates\": [],\n \"projection\": [\n 15\n ],\n \"input_arity\": 15\n }\n }\n ]\n }\n }\n ],\n \"sources\": []\n }\n }\n }\n },\n \"insights\": {\n \"imports\": {\n \"s732\": {\n \"name\": {\n \"schema\": \"mz_catalog\",\n \"item\": \"mz_sources_ind\"\n },\n \"type\": \"compute\"\n }\n },\n \"fast_path_clusters\": {},\n \"fast_path_limit\": null,\n \"persist_count\": []\n },\n \"cluster\": {\n \"name\": \"mz_catalog_server\",\n \"id\": {\n \"System\": 2\n }\n },\n \"redacted_sql\": \"SELECT '' FROM [s460 AS mz_catalog.mz_sources] LIMIT ''\"\n}","code":"MZ001","severity":"notice"}} {"type":"CommandStarting","payload":{"has_rows":true,"is_streaming":false}} {"type":"Rows","payload":{"columns":[{"name":"?column?","type_oid":23,"type_len":4,"type_mod":-1}]}} {"type":"Row","payload":["1"]} @@ -412,7 +412,7 @@ ws-text ws-text {"query": "SELECT 1 / 0 FROM mz_sources LIMIT 1"} ---- -{"type":"Notice","payload":{"message":"{\n \"plans\": {\n \"raw\": {\n \"text\": \"Finish limit=1 output=[#0]\\n Project (#15)\\n Map ((1 / 0))\\n Get mz_catalog.mz_sources\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 460\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"CallBinary\": {\n \"func\": \"DivInt32\",\n \"expr1\": {\n \"Literal\": [\n {\n \"data\": [\n 45,\n 1\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n },\n \"expr2\": {\n \"Literal\": [\n {\n \"data\": [\n 44\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n }\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n },\n \"optimized\": {\n \"global\": {\n \"text\": \"t75:\\n Finish limit=1 output=[#0]\\n ArrangeBy keys=[[#0]]\\n ReadGlobalFromSameDataflow t74\\n\\nt74:\\n Project (#15)\\n Map (error(\\\"division by zero\\\"))\\n ReadIndex on=mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"t75\",\n \"plan\": {\n \"ArrangeBy\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"Transient\": 74\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ],\n \"keys\": []\n },\n \"access_strategy\": \"SameDataflow\"\n }\n },\n \"keys\": [\n [\n {\n \"Column\": 0\n }\n ]\n ]\n }\n }\n },\n {\n \"id\": \"t74\",\n \"plan\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 460\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n },\n \"access_strategy\": {\n \"Index\": [\n [\n {\n \"System\": 731\n },\n \"FullScan\"\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"Err\": \"DivisionByZero\"\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n }\n ],\n \"sources\": []\n }\n },\n \"fast_path\": {\n \"text\": \"Explained Query (fast path):\\n Finish limit=1 output=[#0]\\n Project (#15)\\n Map (error(\\\"division by zero\\\"))\\n ReadIndex on=mz_catalog.mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"Explained Query (fast path)\",\n \"plan\": {\n \"PeekExisting\": [\n {\n \"System\": 460\n },\n {\n \"System\": 731\n },\n null,\n {\n \"mfp\": {\n \"expressions\": [\n {\n \"Literal\": [\n {\n \"Err\": \"DivisionByZero\"\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ],\n \"predicates\": [],\n \"projection\": [\n 15\n ],\n \"input_arity\": 15\n }\n }\n ]\n }\n }\n ],\n \"sources\": []\n }\n }\n }\n },\n \"insights\": {\n \"imports\": {\n \"s731\": {\n \"name\": {\n \"schema\": \"mz_catalog\",\n \"item\": \"mz_sources_ind\"\n },\n \"type\": \"compute\"\n }\n },\n \"fast_path_clusters\": {},\n \"fast_path_limit\": null,\n \"persist_count\": []\n },\n \"cluster\": {\n \"name\": \"mz_catalog_server\",\n \"id\": {\n \"System\": 2\n }\n },\n \"redacted_sql\": \"SELECT '' / '' FROM [s460 AS mz_catalog.mz_sources] LIMIT ''\"\n}","code":"MZ001","severity":"notice"}} +{"type":"Notice","payload":{"message":"{\n \"plans\": {\n \"raw\": {\n \"text\": \"Finish limit=1 output=[#0]\\n Project (#15)\\n Map ((1 / 0))\\n Get mz_catalog.mz_sources\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 460\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"CallBinary\": {\n \"func\": \"DivInt32\",\n \"expr1\": {\n \"Literal\": [\n {\n \"data\": [\n 45,\n 1\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n },\n \"expr2\": {\n \"Literal\": [\n {\n \"data\": [\n 44\n ]\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n }\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n },\n \"optimized\": {\n \"global\": {\n \"text\": \"t75:\\n Finish limit=1 output=[#0]\\n ArrangeBy keys=[[#0]]\\n ReadGlobalFromSameDataflow t74\\n\\nt74:\\n Project (#15)\\n Map (error(\\\"division by zero\\\"))\\n ReadIndex on=mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"t75\",\n \"plan\": {\n \"ArrangeBy\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"Transient\": 74\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ],\n \"keys\": []\n },\n \"access_strategy\": \"SameDataflow\"\n }\n },\n \"keys\": [\n [\n {\n \"Column\": 0\n }\n ]\n ]\n }\n }\n },\n {\n \"id\": \"t74\",\n \"plan\": {\n \"Project\": {\n \"input\": {\n \"Map\": {\n \"input\": {\n \"Get\": {\n \"id\": {\n \"Global\": {\n \"System\": 460\n }\n },\n \"typ\": {\n \"column_types\": [\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"Oid\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": false\n },\n {\n \"scalar_type\": {\n \"Array\": \"MzAclItem\"\n },\n \"nullable\": false\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n },\n {\n \"scalar_type\": \"String\",\n \"nullable\": true\n }\n ],\n \"keys\": [\n [\n 0\n ],\n [\n 1\n ]\n ]\n },\n \"access_strategy\": {\n \"Index\": [\n [\n {\n \"System\": 732\n },\n \"FullScan\"\n ]\n ]\n }\n }\n },\n \"scalars\": [\n {\n \"Literal\": [\n {\n \"Err\": \"DivisionByZero\"\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ]\n }\n },\n \"outputs\": [\n 15\n ]\n }\n }\n }\n ],\n \"sources\": []\n }\n },\n \"fast_path\": {\n \"text\": \"Explained Query (fast path):\\n Finish limit=1 output=[#0]\\n Project (#15)\\n Map (error(\\\"division by zero\\\"))\\n ReadIndex on=mz_catalog.mz_sources mz_sources_ind=[*** full scan ***]\\n\\nTarget cluster: mz_catalog_server\\n\",\n \"json\": {\n \"plans\": [\n {\n \"id\": \"Explained Query (fast path)\",\n \"plan\": {\n \"PeekExisting\": [\n {\n \"System\": 460\n },\n {\n \"System\": 732\n },\n null,\n {\n \"mfp\": {\n \"expressions\": [\n {\n \"Literal\": [\n {\n \"Err\": \"DivisionByZero\"\n },\n {\n \"scalar_type\": \"Int32\",\n \"nullable\": false\n }\n ]\n }\n ],\n \"predicates\": [],\n \"projection\": [\n 15\n ],\n \"input_arity\": 15\n }\n }\n ]\n }\n }\n ],\n \"sources\": []\n }\n }\n }\n },\n \"insights\": {\n \"imports\": {\n \"s732\": {\n \"name\": {\n \"schema\": \"mz_catalog\",\n \"item\": \"mz_sources_ind\"\n },\n \"type\": \"compute\"\n }\n },\n \"fast_path_clusters\": {},\n \"fast_path_limit\": null,\n \"persist_count\": []\n },\n \"cluster\": {\n \"name\": \"mz_catalog_server\",\n \"id\": {\n \"System\": 2\n }\n },\n \"redacted_sql\": \"SELECT '' / '' FROM [s460 AS mz_catalog.mz_sources] LIMIT ''\"\n}","code":"MZ001","severity":"notice"}} {"type":"CommandStarting","payload":{"has_rows":false,"is_streaming":false}} {"type":"Error","payload":{"message":"division by zero","code":"XX000"}} {"type":"ReadyForQuery","payload":"I"} diff --git a/src/pgrepr-consts/src/oid.rs b/src/pgrepr-consts/src/oid.rs index d3218263225d7..872b1b42f7246 100644 --- a/src/pgrepr-consts/src/oid.rs +++ b/src/pgrepr-consts/src/oid.rs @@ -762,3 +762,4 @@ pub const INDEX_MZ_CONTINUAL_TASKS_IND_OID: u32 = 17039; pub const TABLE_MZ_NETWORK_POLICIES_OID: u32 = 17040; pub const TABLE_MZ_NETWORK_POLICY_RULES_OID: u32 = 17041; pub const VIEW_MZ_INDEX_ADVICE_OID: u32 = 17042; +pub const VIEW_MZ_SHOW_NETWORK_POLICIES_OID: u32 = 17043; diff --git a/src/pgwire/src/protocol.rs b/src/pgwire/src/protocol.rs index 53b1cf1c90c21..bf7bc98d59fd6 100644 --- a/src/pgwire/src/protocol.rs +++ b/src/pgwire/src/protocol.rs @@ -1746,6 +1746,7 @@ where | ExecuteResponse::CreatedType | ExecuteResponse::CreatedView { .. } | ExecuteResponse::CreatedViews { .. } + | ExecuteResponse::CreatedNetworkPolicy | ExecuteResponse::Comment | ExecuteResponse::Deallocate { .. } | ExecuteResponse::Deleted(..) diff --git a/src/repr/src/adt/mz_acl_item.rs b/src/repr/src/adt/mz_acl_item.rs index c43115ad308f6..75dc4f364b8ac 100644 --- a/src/repr/src/adt/mz_acl_item.rs +++ b/src/repr/src/adt/mz_acl_item.rs @@ -51,6 +51,8 @@ const CREATE_ROLE_CHAR: char = 'R'; const CREATE_DB_CHAR: char = 'B'; // compute Node const CREATE_CLUSTER_CHAR: char = 'N'; +// compute network Policy +const CREATE_NETWORK_POLICY_CHAR: char = 'P'; const INSERT_STR: &str = "INSERT"; const SELECT_STR: &str = "SELECT"; @@ -61,6 +63,7 @@ const CREATE_STR: &str = "CREATE"; const CREATE_ROLE_STR: &str = "CREATEROLE"; const CREATE_DB_STR: &str = "CREATEDB"; const CREATE_CLUSTER_STR: &str = "CREATECLUSTER"; +const CREATE_NETWORK_POLICY_STR: &str = "CREATENETWORKPOLICY"; /// The OID used to represent the PUBLIC role. See: /// @@ -94,6 +97,7 @@ bitflags! { const CREATE_CLUSTER = 1 << 29; const CREATE_DB = 1 << 30; const CREATE_ROLE = 1 << 31; + const CREATE_NETWORK_POLICY = 1 << 32; // No additional privileges should be defined at a bit larger than 1 << 31. Those bits are // reserved for grant options. @@ -112,6 +116,7 @@ impl AclMode { CREATE_ROLE_STR => Ok(AclMode::CREATE_ROLE), CREATE_DB_STR => Ok(AclMode::CREATE_DB), CREATE_CLUSTER_STR => Ok(AclMode::CREATE_CLUSTER), + CREATE_NETWORK_POLICY_STR => Ok(AclMode::CREATE_NETWORK_POLICY), _ => Err(anyhow!("{}", s.quoted())), } } @@ -158,6 +163,9 @@ impl AclMode { if self.contains(AclMode::CREATE_CLUSTER) { privileges.push(CREATE_CLUSTER_STR); } + if self.contains(AclMode::CREATE_NETWORK_POLICY) { + privileges.push(CREATE_NETWORK_POLICY_STR); + } privileges } } @@ -178,6 +186,7 @@ impl FromStr for AclMode { CREATE_ROLE_CHAR => acl_mode.bitor_assign(AclMode::CREATE_ROLE), CREATE_DB_CHAR => acl_mode.bitor_assign(AclMode::CREATE_DB), CREATE_CLUSTER_CHAR => acl_mode.bitor_assign(AclMode::CREATE_CLUSTER), + CREATE_NETWORK_POLICY_CHAR => acl_mode.bitor_assign(AclMode::CREATE_NETWORK_POLICY), _ => return Err(anyhow!("invalid privilege '{c}' in acl mode '{s}'")), } } @@ -216,6 +225,9 @@ impl fmt::Display for AclMode { if self.contains(AclMode::CREATE_CLUSTER) { write!(f, "{CREATE_CLUSTER_CHAR}")?; } + if self.contains(AclMode::CREATE_NETWORK_POLICY) { + write!(f, "{CREATE_NETWORK_POLICY_CHAR}")?; + } Ok(()) } } @@ -845,6 +857,7 @@ fn test_mz_acl_parsing() { assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_ROLE)); assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_DB)); assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_CLUSTER)); + assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_NETWORK_POLICY)); assert_eq!(s, mz_acl.to_string()); let s = "=UC/u4"; @@ -860,6 +873,7 @@ fn test_mz_acl_parsing() { assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_ROLE)); assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_DB)); assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_CLUSTER)); + assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_NETWORK_POLICY)); assert_eq!(s, mz_acl.to_string()); let s = "s7=/s12"; @@ -875,6 +889,7 @@ fn test_mz_acl_parsing() { assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_ROLE)); assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_DB)); assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_CLUSTER)); + assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_NETWORK_POLICY)); assert_eq!(s, mz_acl.to_string()); let s = "=/u100"; @@ -890,9 +905,10 @@ fn test_mz_acl_parsing() { assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_ROLE)); assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_DB)); assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_CLUSTER)); + assert!(!mz_acl.acl_mode.contains(AclMode::CREATE_NETWORK_POLICY)); assert_eq!(s, mz_acl.to_string()); - let s = "u1=RBN/u2"; + let s = "u1=RBNP/u2"; let mz_acl: MzAclItem = s.parse().unwrap(); assert_eq!(RoleId::User(1), mz_acl.grantee); assert_eq!(RoleId::User(2), mz_acl.grantor); @@ -905,6 +921,7 @@ fn test_mz_acl_parsing() { assert!(mz_acl.acl_mode.contains(AclMode::CREATE_ROLE)); assert!(mz_acl.acl_mode.contains(AclMode::CREATE_DB)); assert!(mz_acl.acl_mode.contains(AclMode::CREATE_CLUSTER)); + assert!(mz_acl.acl_mode.contains(AclMode::CREATE_NETWORK_POLICY)); assert_eq!(s, mz_acl.to_string()); mz_ore::assert_err!("u42/rw=u666".parse::()); @@ -985,6 +1002,7 @@ fn test_acl_parsing() { assert!(!acl.acl_mode.contains(AclMode::CREATE_ROLE)); assert!(!acl.acl_mode.contains(AclMode::CREATE_DB)); assert!(!acl.acl_mode.contains(AclMode::CREATE_CLUSTER)); + assert!(!acl.acl_mode.contains(AclMode::CREATE_NETWORK_POLICY)); assert_eq!(s, acl.to_string()); let s = "=UC/4"; @@ -1000,6 +1018,7 @@ fn test_acl_parsing() { assert!(!acl.acl_mode.contains(AclMode::CREATE_ROLE)); assert!(!acl.acl_mode.contains(AclMode::CREATE_DB)); assert!(!acl.acl_mode.contains(AclMode::CREATE_CLUSTER)); + assert!(!acl.acl_mode.contains(AclMode::CREATE_NETWORK_POLICY)); assert_eq!(s, acl.to_string()); let s = "7=/12"; @@ -1015,6 +1034,7 @@ fn test_acl_parsing() { assert!(!acl.acl_mode.contains(AclMode::CREATE_ROLE)); assert!(!acl.acl_mode.contains(AclMode::CREATE_DB)); assert!(!acl.acl_mode.contains(AclMode::CREATE_CLUSTER)); + assert!(!acl.acl_mode.contains(AclMode::CREATE_NETWORK_POLICY)); assert_eq!(s, acl.to_string()); let s = "=/100"; @@ -1030,9 +1050,10 @@ fn test_acl_parsing() { assert!(!acl.acl_mode.contains(AclMode::CREATE_ROLE)); assert!(!acl.acl_mode.contains(AclMode::CREATE_DB)); assert!(!acl.acl_mode.contains(AclMode::CREATE_CLUSTER)); + assert!(!acl.acl_mode.contains(AclMode::CREATE_NETWORK_POLICY)); assert_eq!(s, acl.to_string()); - let s = "1=RBN/2"; + let s = "1=RBNP/2"; let acl: AclItem = s.parse().unwrap(); assert_eq!(1, acl.grantee.0); assert_eq!(2, acl.grantor.0); @@ -1045,6 +1066,7 @@ fn test_acl_parsing() { assert!(acl.acl_mode.contains(AclMode::CREATE_ROLE)); assert!(acl.acl_mode.contains(AclMode::CREATE_DB)); assert!(acl.acl_mode.contains(AclMode::CREATE_CLUSTER)); + assert!(acl.acl_mode.contains(AclMode::CREATE_NETWORK_POLICY)); assert_eq!(s, acl.to_string()); mz_ore::assert_err!("42/rw=666".parse::()); diff --git a/src/sql-lexer/src/keywords.txt b/src/sql-lexer/src/keywords.txt index 5b41b1c23e386..958083e6e39e9 100644 --- a/src/sql-lexer/src/keywords.txt +++ b/src/sql-lexer/src/keywords.txt @@ -24,8 +24,10 @@ # For details on the code that is generated, see keywords.rs. Access +Action Add Added +Address Addresses Aggregate Aggregation @@ -104,6 +106,7 @@ Counter Create Createcluster Createdb +Createnetworkpolicy Createrole Creation Cross @@ -132,6 +135,7 @@ Delimiter Delta Desc Details +Direction Discard Disk Distinct @@ -276,6 +280,7 @@ Name Names Natural Negative +Network New Next No @@ -317,6 +322,8 @@ Path Physical Plan Plans +Policies +Policy Port Position Postgres @@ -376,6 +383,7 @@ Rotate Rounds Row Rows +Rules Sasl Scale Schedule diff --git a/src/sql-parser/src/ast/defs/name.rs b/src/sql-parser/src/ast/defs/name.rs index 72762754042c4..42259b4162948 100644 --- a/src/sql-parser/src/ast/defs/name.rs +++ b/src/sql-parser/src/ast/defs/name.rs @@ -429,6 +429,7 @@ pub enum UnresolvedObjectName { Schema(UnresolvedSchemaName), Role(Ident), Item(UnresolvedItemName), + NetworkPolicy(Ident), } impl AstDisplay for UnresolvedObjectName { @@ -440,6 +441,7 @@ impl AstDisplay for UnresolvedObjectName { UnresolvedObjectName::Schema(n) => f.write_node(n), UnresolvedObjectName::Role(n) => f.write_node(n), UnresolvedObjectName::Item(n) => f.write_node(n), + UnresolvedObjectName::NetworkPolicy(n) => f.write_node(n), } } } diff --git a/src/sql-parser/src/ast/defs/statement.rs b/src/sql-parser/src/ast/defs/statement.rs index a23437cd51c74..f131185955b1f 100644 --- a/src/sql-parser/src/ast/defs/statement.rs +++ b/src/sql-parser/src/ast/defs/statement.rs @@ -64,6 +64,7 @@ pub enum Statement { CreateCluster(CreateClusterStatement), CreateClusterReplica(CreateClusterReplicaStatement), CreateSecret(CreateSecretStatement), + CreateNetworkPolicy(CreateNetworkPolicyStatement), AlterCluster(AlterClusterStatement), AlterOwner(AlterOwnerStatement), AlterObjectRename(AlterObjectRenameStatement), @@ -78,6 +79,7 @@ pub enum Statement { AlterSystemReset(AlterSystemResetStatement), AlterSystemResetAll(AlterSystemResetAllStatement), AlterConnection(AlterConnectionStatement), + AlterNetworkPolicy(AlterNetworkPolicyStatement), AlterRole(AlterRoleStatement), AlterTableAddColumn(AlterTableAddColumnStatement), Discard(DiscardStatement), @@ -138,7 +140,9 @@ impl AstDisplay for Statement { Statement::CreateType(stmt) => f.write_node(stmt), Statement::CreateCluster(stmt) => f.write_node(stmt), Statement::CreateClusterReplica(stmt) => f.write_node(stmt), + Statement::CreateNetworkPolicy(stmt) => f.write_node(stmt), Statement::AlterCluster(stmt) => f.write_node(stmt), + Statement::AlterNetworkPolicy(stmt) => f.write_node(stmt), Statement::AlterOwner(stmt) => f.write_node(stmt), Statement::AlterObjectRename(stmt) => f.write_node(stmt), Statement::AlterRetainHistory(stmt) => f.write_node(stmt), @@ -215,11 +219,13 @@ pub fn statement_kind_label_value(kind: StatementKind) -> &'static str { StatementKind::CreateCluster => "create_cluster", StatementKind::CreateClusterReplica => "create_cluster_replica", StatementKind::CreateSecret => "create_secret", + StatementKind::CreateNetworkPolicy => "create_network_policy", StatementKind::AlterCluster => "alter_cluster", StatementKind::AlterObjectRename => "alter_object_rename", StatementKind::AlterRetainHistory => "alter_retain_history", StatementKind::AlterObjectSwap => "alter_object_swap", StatementKind::AlterIndex => "alter_index", + StatementKind::AlterNetworkPolicy => "alter_network_policy", StatementKind::AlterRole => "alter_role", StatementKind::AlterSecret => "alter_secret", StatementKind::AlterSetCluster => "alter_set_cluster", @@ -1954,6 +1960,136 @@ impl AstDisplay for SetRoleVar { } impl_display!(SetRoleVar); +/// AN `ALTER NETWORK POLICY` statement. +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct AlterNetworkPolicyStatement { + /// The specified Network Policy. + pub name: Ident, + /// Any options that were attached, in the order they were presented. + pub options: Vec>, +} + +impl AstDisplay for AlterNetworkPolicyStatement { + fn fmt(&self, f: &mut AstFormatter) { + f.write_str("ALTER "); + f.write_str("NETWORK POLICY "); + f.write_node(&self.name); + f.write_str(" SET ("); + f.write_node(&display::comma_separated(&self.options)); + f.write_str(" )"); + } +} +impl_display_t!(AlterNetworkPolicyStatement); + +/// A `CREATE NETWORK POLICY` statement. +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct CreateNetworkPolicyStatement { + /// The specified network policy. + pub name: Ident, + /// Any options that were attached, in the order they were presented. + pub options: Vec>, +} + +impl AstDisplay for CreateNetworkPolicyStatement { + fn fmt(&self, f: &mut AstFormatter) { + f.write_str("CREATE "); + f.write_str("NETWORK POLICY "); + f.write_node(&self.name); + f.write_str(" ("); + f.write_node(&display::comma_separated(&self.options)); + f.write_str(" )"); + } +} +impl_display_t!(CreateNetworkPolicyStatement); + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct NetworkPolicyOption { + pub name: NetworkPolicyOptionName, + pub value: Option>, +} + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum NetworkPolicyOptionName { + Rules, +} + +impl WithOptionName for NetworkPolicyOptionName { + /// # WARNING + /// + /// Whenever implementing this trait consider very carefully whether or not + /// this value could contain sensitive user data. If you're uncertain, err + /// on the conservative side and return `true`. + fn redact_value(&self) -> bool { + match self { + NetworkPolicyOptionName::Rules => false, + } + } +} + +impl AstDisplay for NetworkPolicyOptionName { + fn fmt(&self, f: &mut AstFormatter) { + match self { + NetworkPolicyOptionName::Rules => f.write_str("RULES"), + } + } +} +impl_display_for_with_option!(NetworkPolicyOption); + +#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct NetworkPolicyRuleDefinition { + pub name: Ident, + pub options: Vec>, +} + +impl AstDisplay for NetworkPolicyRuleDefinition { + fn fmt(&self, f: &mut AstFormatter) { + f.write_node(&self.name); + f.write_str(" ("); + f.write_node(&display::comma_separated(&self.options)); + f.write_str(" )"); + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct NetworkPolicyRuleOption { + pub name: NetworkPolicyRuleOptionName, + pub value: Option>, +} + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum NetworkPolicyRuleOptionName { + Direction, + Action, + Address, +} + +impl WithOptionName for NetworkPolicyRuleOptionName { + /// # WARNING + /// + /// Whenever implementing this trait consider very carefully whether or not + /// this value could contain sensitive user data. If you're uncertain, err + /// on the conservative side and return `true`. + fn redact_value(&self) -> bool { + match self { + NetworkPolicyRuleOptionName::Direction + | NetworkPolicyRuleOptionName::Action + | NetworkPolicyRuleOptionName::Address => false, + } + } +} + +impl AstDisplay for NetworkPolicyRuleOptionName { + fn fmt(&self, f: &mut AstFormatter) { + match self { + NetworkPolicyRuleOptionName::Direction => f.write_str("DIRECTION"), + NetworkPolicyRuleOptionName::Action => f.write_str("ACTION"), + NetworkPolicyRuleOptionName::Address => f.write_str("ADDRESS"), + } + } +} + +impl_display_for_with_option!(NetworkPolicyRuleOption); + /// A `CREATE SECRET` statement. #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct CreateSecretStatement { @@ -3269,6 +3405,7 @@ pub enum ShowObjectType { ContinualTask { in_cluster: Option, }, + NetworkPolicy, } /// `SHOW S` /// @@ -3311,6 +3448,7 @@ impl AstDisplay for ShowObjectsStatement { ShowObjectType::DefaultPrivileges { .. } => "DEFAULT PRIVILEGES", ShowObjectType::RoleMembership { .. } => "ROLE MEMBERSHIP", ShowObjectType::ContinualTask { .. } => "CONTINUAL TASKS", + ShowObjectType::NetworkPolicy => "NETWORK POLICIES", }); if let ShowObjectType::Index { on_object, .. } = &self.object_type { @@ -3918,6 +4056,7 @@ pub enum ObjectType { Func, Subsource, ContinualTask, + NetworkPolicy, } impl ObjectType { @@ -3939,7 +4078,8 @@ impl ObjectType { | ObjectType::Schema | ObjectType::Cluster | ObjectType::ClusterReplica - | ObjectType::Role => false, + | ObjectType::Role + | ObjectType::NetworkPolicy => false, } } } @@ -3964,6 +4104,7 @@ impl AstDisplay for ObjectType { ObjectType::Func => "FUNCTION", ObjectType::Subsource => "SUBSOURCE", ObjectType::ContinualTask => "CONTINUAL TASK", + ObjectType::NetworkPolicy => "NETWORK POLICY", }) } } @@ -4028,6 +4169,7 @@ pub enum WithOptionValue { Refresh(RefreshOptionValue), ClusterScheduleOptionValue(ClusterScheduleOptionValue), ClusterAlterStrategy(ClusterAlterOptionValue), + NetworkPolicyRules(Vec>), } impl AstDisplay for WithOptionValue { @@ -4055,7 +4197,8 @@ impl AstDisplay for WithOptionValue { | WithOptionValue::ConnectionAwsPrivatelink(_) | WithOptionValue::ClusterReplicas(_) | WithOptionValue::ClusterScheduleOptionValue(_) - | WithOptionValue::ClusterAlterStrategy(_) => { + | WithOptionValue::ClusterAlterStrategy(_) + | WithOptionValue::NetworkPolicyRules(_) => { // These do not need redaction. } } @@ -4095,6 +4238,11 @@ impl AstDisplay for WithOptionValue { f.write_node(&display::comma_separated(replicas)); f.write_str(")"); } + WithOptionValue::NetworkPolicyRules(rules) => { + f.write_str("("); + f.write_node(&display::comma_separated(rules)); + f.write_str(")"); + } WithOptionValue::ConnectionAwsPrivatelink(aws_privatelink) => { f.write_node(aws_privatelink); } @@ -4875,6 +5023,7 @@ pub enum Privilege { CREATEROLE, CREATEDB, CREATECLUSTER, + CREATENETWORKPOLICY, } impl AstDisplay for Privilege { @@ -4889,6 +5038,7 @@ impl AstDisplay for Privilege { Privilege::CREATEROLE => "CREATEROLE", Privilege::CREATEDB => "CREATEDB", Privilege::CREATECLUSTER => "CREATECLUSTER", + Privilege::CREATENETWORKPOLICY => "CREATENETWORKPOLICY", }); } } @@ -5256,6 +5406,7 @@ pub enum CommentObjectType { Cluster { name: T::ClusterName }, ClusterReplica { name: QualifiedReplica }, ContinualTask { name: T::ItemName }, + NetworkPolicy { name: T::NetworkPolicyName }, } impl AstDisplay for CommentObjectType { @@ -5331,6 +5482,10 @@ impl AstDisplay for CommentObjectType { f.write_str("CONTINUAL TASK "); f.write_node(name); } + NetworkPolicy { name } => { + f.write_str("NETWORK POLICY "); + f.write_node(name); + } } } } diff --git a/src/sql-parser/src/ast/metadata.rs b/src/sql-parser/src/ast/metadata.rs index 6cb6426630c3a..aa23d871f082e 100644 --- a/src/sql-parser/src/ast/metadata.rs +++ b/src/sql-parser/src/ast/metadata.rs @@ -47,7 +47,7 @@ pub trait AstInfo: Clone { /// The type used to specify a column. /// /// n.b. when implementing visitors, you likely want to build the visitor to - /// vist [`crate::ast::ColumnName`] instead of visiting this struct + /// visit [`crate::ast::ColumnName`] instead of visiting this struct /// directly. The visitor on this should usually just return an error. type ColumnReference: AstDisplay + Clone + Hash + Debug + Eq + Ord; /// The type used for schema names. @@ -62,6 +62,8 @@ pub trait AstInfo: Clone { type CteId: Clone + Hash + Debug + Eq + Ord; /// The type used for role references. type RoleName: AstDisplay + Clone + Hash + Debug + Eq + Ord; + /// The type used for network policy references. + type NetworkPolicyName: AstDisplay + Clone + Hash + Debug + Eq + Ord; /// They type used for any object names. Objects are the superset of all objects in Materialize. type ObjectName: AstDisplay + Clone + Hash + Debug + Eq + Ord; } @@ -79,6 +81,7 @@ impl AstInfo for Raw { type DataType = RawDataType; type CteId = (); type RoleName = Ident; + type NetworkPolicyName = RawNetworkPolicyName; type ObjectName = UnresolvedObjectName; } @@ -168,6 +171,38 @@ where } } +#[derive(Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Clone)] +pub enum RawNetworkPolicyName { + Unresolved(Ident), + Resolved(String), +} + +impl AstDisplay for RawNetworkPolicyName { + fn fmt(&self, f: &mut AstFormatter) { + match self { + RawNetworkPolicyName::Unresolved(id) => f.write_node(id), + RawNetworkPolicyName::Resolved(id) => { + f.write_str(format!("[{}]", id)); + } + } + } +} +impl_display!(RawNetworkPolicyName); + +impl FoldNode for RawNetworkPolicyName +where + T: AstInfo, +{ + type Folded = T::NetworkPolicyName; + + fn fold(self, f: &mut F) -> Self::Folded + where + F: Fold, + { + f.fold_network_policy_name(self) + } +} + /// SQL data types #[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] pub enum RawDataType { diff --git a/src/sql-parser/src/parser.rs b/src/sql-parser/src/parser.rs index da61cdeb334b7..a72cb137c6fbd 100644 --- a/src/sql-parser/src/parser.rs +++ b/src/sql-parser/src/parser.rs @@ -1906,6 +1906,9 @@ impl<'a> Parser<'a> { self.peek_pos(), "CREATE USER is not supported, for more information consult the documentation at https://materialize.com/docs/sql/create-role/#details" ).map_parser_err(StatementKind::CreateRole) + } else if self.peek_keywords(&[NETWORK, POLICY]) { + self.parse_create_network_policy() + .map_parser_err(StatementKind::CreateNetworkPolicy) } else { let index = self.index; @@ -3997,11 +4000,7 @@ impl<'a> Parser<'a> { fn parse_raw_ident(&mut self) -> Result { if self.consume_token(&Token::LBracket) { - let id = match self.next_token() { - Some(Token::Ident(id)) => id.into_inner(), - Some(Token::Number(n)) => n, - _ => return parser_err!(self, self.peek_prev_pos(), "expected id"), - }; + let id = self.parse_raw_ident_str()?; self.expect_token(&Token::RBracket)?; Ok(RawClusterName::Resolved(id)) } else { @@ -4009,6 +4008,24 @@ impl<'a> Parser<'a> { } } + fn parse_raw_network_policy_name(&mut self) -> Result { + if self.consume_token(&Token::LBracket) { + let id = self.parse_raw_ident_str()?; + self.expect_token(&Token::RBracket)?; + Ok(RawNetworkPolicyName::Resolved(id)) + } else { + Ok(RawNetworkPolicyName::Unresolved(self.parse_identifier()?)) + } + } + + fn parse_raw_ident_str(&mut self) -> Result { + match self.next_token() { + Some(Token::Ident(id)) => Ok(id.into_inner()), + Some(Token::Number(n)) => Ok(n), + _ => parser_err!(self, self.peek_prev_pos(), "expected id"), + } + } + fn parse_optional_in_cluster(&mut self) -> Result, ParserError> { if self.parse_keywords(&[IN, CLUSTER]) { Ok(Some(self.parse_raw_ident()?)) @@ -4521,6 +4538,19 @@ impl<'a> Parser<'a> { cascade: false, })) } + ObjectType::NetworkPolicy => { + let names = self.parse_comma_separated(|parser| { + Ok(UnresolvedObjectName::NetworkPolicy( + parser.parse_identifier()?, + )) + })?; + Ok(Statement::DropObjects(DropObjectsStatement { + object_type: ObjectType::NetworkPolicy, + if_exists, + names, + cascade: false, + })) + } ObjectType::Cluster => self.parse_drop_clusters(if_exists), ObjectType::ClusterReplica => self.parse_drop_cluster_replicas(if_exists), ObjectType::Table @@ -4611,6 +4641,77 @@ impl<'a> Parser<'a> { Ok(QualifiedReplica { cluster, replica }) } + fn parse_alter_network_policy(&mut self) -> Result, ParserError> { + let name = self.parse_identifier()?; + self.expect_keyword(SET)?; + self.expect_token(&Token::LParen)?; + let options = self.parse_comma_separated(Parser::parse_network_policy_option)?; + self.expect_token(&Token::RParen)?; + Ok(Statement::AlterNetworkPolicy(AlterNetworkPolicyStatement { + name, + options, + })) + } + + fn parse_create_network_policy(&mut self) -> Result, ParserError> { + self.expect_keywords(&[NETWORK, POLICY])?; + let name = self.parse_identifier()?; + self.expect_token(&Token::LParen)?; + let options = self.parse_comma_separated(Parser::parse_network_policy_option)?; + self.expect_token(&Token::RParen)?; + Ok(Statement::CreateNetworkPolicy( + CreateNetworkPolicyStatement { name, options }, + )) + } + + fn parse_network_policy_option(&mut self) -> Result, ParserError> { + let name = match self.expect_one_of_keywords(&[RULES])? { + RULES => NetworkPolicyOptionName::Rules, + v => panic!("found unreachable keyword {}", v), + }; + match name { + NetworkPolicyOptionName::Rules => self.parse_network_policy_option_rules(), + } + } + + fn parse_network_policy_option_rules( + &mut self, + ) -> Result, ParserError> { + let _ = self.consume_token(&Token::Eq); + self.expect_token(&Token::LParen)?; + let rules = if self.consume_token(&Token::RParen) { + vec![] + } else { + let rules = self.parse_comma_separated(|parser| { + let name = parser.parse_identifier()?; + parser.expect_token(&Token::LParen)?; + let options = + parser.parse_comma_separated(Parser::parse_network_policy_rule_option)?; + parser.expect_token(&Token::RParen)?; + Ok(NetworkPolicyRuleDefinition { name, options }) + })?; + self.expect_token(&Token::RParen)?; + rules + }; + Ok(NetworkPolicyOption { + name: NetworkPolicyOptionName::Rules, + value: Some(WithOptionValue::NetworkPolicyRules(rules)), + }) + } + + fn parse_network_policy_rule_option( + &mut self, + ) -> Result, ParserError> { + let name = match self.expect_one_of_keywords(&[ACTION, ADDRESS, DIRECTION])? { + ACTION => NetworkPolicyRuleOptionName::Action, + ADDRESS => NetworkPolicyRuleOptionName::Address, + DIRECTION => NetworkPolicyRuleOptionName::Direction, + v => panic!("found unreachable keyword {}", v), + }; + let value = self.parse_optional_option_value()?; + Ok(NetworkPolicyRuleOption { name, value }) + } + fn parse_create_table(&mut self) -> Result, ParserError> { let temporary = self.parse_keyword(TEMPORARY) | self.parse_keyword(TEMP); self.expect_keyword(TABLE)?; @@ -5247,6 +5348,9 @@ impl<'a> Parser<'a> { })) } ObjectType::Schema => self.parse_alter_schema(object_type), + ObjectType::NetworkPolicy => self + .parse_alter_network_policy() + .map_parser_err(StatementKind::AlterNetworkPolicy), ObjectType::Func | ObjectType::Subsource => parser_err!( self, self.peek_prev_pos(), @@ -6786,6 +6890,9 @@ impl<'a> Parser<'a> { } ObjectType::Database => UnresolvedObjectName::Database(self.parse_database_name()?), ObjectType::Schema => UnresolvedObjectName::Schema(self.parse_schema_name()?), + ObjectType::NetworkPolicy => { + UnresolvedObjectName::NetworkPolicy(self.parse_identifier()?) + } }) } @@ -7554,6 +7661,7 @@ impl<'a> Parser<'a> { ObjectType::Secret => ShowObjectType::Secret, ObjectType::Connection => ShowObjectType::Connection, ObjectType::Cluster => ShowObjectType::Cluster, + ObjectType::NetworkPolicy => ShowObjectType::NetworkPolicy, ObjectType::MaterializedView => { let in_cluster = self.parse_optional_in_cluster()?; ShowObjectType::MaterializedView { in_cluster } @@ -8918,7 +9026,8 @@ impl<'a> Parser<'a> { | ObjectType::Secret | ObjectType::Connection | ObjectType::Database - | ObjectType::Schema => Ok(object_type), + | ObjectType::Schema + | ObjectType::NetworkPolicy => Ok(object_type), } } @@ -8942,6 +9051,7 @@ impl<'a> Parser<'a> { SCHEMA, FUNCTION, CONTINUAL, + NETWORK, ])? { TABLE => ObjectType::Table, VIEW => ObjectType::View, @@ -8976,6 +9086,13 @@ impl<'a> Parser<'a> { } ObjectType::ContinualTask } + NETWORK => { + if let Err(e) = self.expect_keyword(POLICY) { + self.prev_token(); + return Err(e); + } + ObjectType::NetworkPolicy + } _ => unreachable!(), }, ) @@ -9052,6 +9169,7 @@ impl<'a> Parser<'a> { CONNECTIONS, DATABASES, SCHEMAS, + POLICIES, ])? { TABLES => ObjectType::Table, VIEWS => ObjectType::View, @@ -9079,6 +9197,7 @@ impl<'a> Parser<'a> { CONNECTIONS => ObjectType::Connection, DATABASES => ObjectType::Database, SCHEMAS => ObjectType::Schema, + POLICIES => ObjectType::NetworkPolicy, _ => unreachable!(), }, ) @@ -9105,6 +9224,7 @@ impl<'a> Parser<'a> { SCHEMAS, SUBSOURCES, CONTINUAL, + NETWORK, ])? { TABLES => ObjectType::Table, VIEWS => ObjectType::View, @@ -9143,6 +9263,14 @@ impl<'a> Parser<'a> { return None; } } + NETWORK => { + if self.parse_keyword(POLICIES) { + ObjectType::NetworkPolicy + } else { + self.prev_token(); + return None; + } + } _ => unreachable!(), }, ) @@ -9247,6 +9375,7 @@ impl<'a> Parser<'a> { CREATEROLE, CREATEDB, CREATECLUSTER, + CREATENETWORKPOLICY, ])? { INSERT => Privilege::INSERT, SELECT => Privilege::SELECT, @@ -9257,6 +9386,7 @@ impl<'a> Parser<'a> { CREATEROLE => Privilege::CREATEROLE, CREATEDB => Privilege::CREATEDB, CREATECLUSTER => Privilege::CREATECLUSTER, + CREATENETWORKPOLICY => Privilege::CREATENETWORKPOLICY, _ => unreachable!(), }, ) @@ -9323,6 +9453,7 @@ impl<'a> Parser<'a> { SCHEMA, CLUSTER, CONTINUAL, + NETWORK, ])? { TABLE => { let name = self.parse_raw_name()?; @@ -9395,6 +9526,11 @@ impl<'a> Parser<'a> { let name = self.parse_raw_name()?; CommentObjectType::ContinualTask { name } } + NETWORK => { + self.expect_keyword(POLICY)?; + let name = self.parse_raw_network_policy_name()?; + CommentObjectType::NetworkPolicy { name } + } _ => unreachable!(), }; diff --git a/src/sql-parser/tests/testdata/ddl b/src/sql-parser/tests/testdata/ddl index f8d177bb5f265..49a6709635499 100644 --- a/src/sql-parser/tests/testdata/ddl +++ b/src/sql-parser/tests/testdata/ddl @@ -3366,3 +3366,24 @@ ALTER INDEX n SET (RETAIN HISTORY FOR '1m') ALTER INDEX n SET (RETAIN HISTORY = FOR '1m') => AlterIndex(AlterIndexStatement { index_name: UnresolvedItemName([Ident("n")]), if_exists: false, action: SetOptions([IndexOption { name: RetainHistory, value: Some(RetainHistoryFor(String("1m"))) }]) }) + +parse-statement +CREATE NETWORK POLICY p (RULES( a (ACTION='allow', DIRECTION='ingress', ADDRESS='1.2.3.4/32'), b (ACTION='allow', DIRECTION='ingress',ADDRESS ='1.2.3.4/32'))); +---- +CREATE NETWORK POLICY p (RULES = (a (ACTION = 'allow', DIRECTION = 'ingress', ADDRESS = '1.2.3.4/32' ), b (ACTION = 'allow', DIRECTION = 'ingress', ADDRESS = '1.2.3.4/32' )) ) +=> +CreateNetworkPolicy(CreateNetworkPolicyStatement { name: Ident("p"), options: [NetworkPolicyOption { name: Rules, value: Some(NetworkPolicyRules([NetworkPolicyRuleDefinition { name: Ident("a"), options: [NetworkPolicyRuleOption { name: Action, value: Some(Value(String("allow"))) }, NetworkPolicyRuleOption { name: Direction, value: Some(Value(String("ingress"))) }, NetworkPolicyRuleOption { name: Address, value: Some(Value(String("1.2.3.4/32"))) }] }, NetworkPolicyRuleDefinition { name: Ident("b"), options: [NetworkPolicyRuleOption { name: Action, value: Some(Value(String("allow"))) }, NetworkPolicyRuleOption { name: Direction, value: Some(Value(String("ingress"))) }, NetworkPolicyRuleOption { name: Address, value: Some(Value(String("1.2.3.4/32"))) }] }])) }] }) + +parse-statement +ALTER NETWORK POLICY q SET (RULES( a (ACTION='allow', DIRECTION='ingress', ADDRESS='1.2.3.4/32'), b (ACTION='allow', DIRECTION='ingress',ADDRESS ='1.2.3.4/32'))); +---- +ALTER NETWORK POLICY q SET (RULES = (a (ACTION = 'allow', DIRECTION = 'ingress', ADDRESS = '1.2.3.4/32' ), b (ACTION = 'allow', DIRECTION = 'ingress', ADDRESS = '1.2.3.4/32' )) ) +=> +AlterNetworkPolicy(AlterNetworkPolicyStatement { name: Ident("q"), options: [NetworkPolicyOption { name: Rules, value: Some(NetworkPolicyRules([NetworkPolicyRuleDefinition { name: Ident("a"), options: [NetworkPolicyRuleOption { name: Action, value: Some(Value(String("allow"))) }, NetworkPolicyRuleOption { name: Direction, value: Some(Value(String("ingress"))) }, NetworkPolicyRuleOption { name: Address, value: Some(Value(String("1.2.3.4/32"))) }] }, NetworkPolicyRuleDefinition { name: Ident("b"), options: [NetworkPolicyRuleOption { name: Action, value: Some(Value(String("allow"))) }, NetworkPolicyRuleOption { name: Direction, value: Some(Value(String("ingress"))) }, NetworkPolicyRuleOption { name: Address, value: Some(Value(String("1.2.3.4/32"))) }] }])) }] }) + +parse-statement +DROP NETWORK POLICY if exists q +---- +DROP NETWORK POLICY IF EXISTS q +=> +DropObjects(DropObjectsStatement { object_type: NetworkPolicy, if_exists: true, names: [NetworkPolicy(Ident("q"))], cascade: false }) diff --git a/src/sql/src/catalog.rs b/src/sql/src/catalog.rs index 37860bfa6452a..2b19150f6cb16 100644 --- a/src/sql/src/catalog.rs +++ b/src/sql/src/catalog.rs @@ -161,6 +161,12 @@ pub trait SessionCatalog: fmt::Debug + ExprHumanizer + Send + Sync + ConnectionR /// Resolves the named role. fn resolve_role(&self, role_name: &str) -> Result<&dyn CatalogRole, CatalogError>; + /// Resolves the named network policy. + fn resolve_network_policy( + &self, + network_policy_name: &str, + ) -> Result<&dyn CatalogNetworkPolicy, CatalogError>; + /// Gets a role by its ID. fn try_get_role(&self, id: &RoleId) -> Option<&dyn CatalogRole>; @@ -1412,6 +1418,7 @@ impl From for ObjectType { mz_sql_parser::ast::ObjectType::Schema => ObjectType::Schema, mz_sql_parser::ast::ObjectType::Func => ObjectType::Func, mz_sql_parser::ast::ObjectType::ContinualTask => ObjectType::ContinualTask, + mz_sql_parser::ast::ObjectType::NetworkPolicy => ObjectType::NetworkPolicy, } } } diff --git a/src/sql/src/names.rs b/src/sql/src/names.rs index 43faafe9429e9..b648384e9a285 100644 --- a/src/sql/src/names.rs +++ b/src/sql/src/names.rs @@ -24,7 +24,7 @@ use mz_repr::network_policy_id::NetworkPolicyId; use mz_repr::role_id::RoleId; use mz_repr::{CatalogItemId, GlobalId}; use mz_repr::{ColumnName, RelationVersionSelector}; -use mz_sql_parser::ast::{CreateContinualTaskStatement, Expr, Version}; +use mz_sql_parser::ast::{CreateContinualTaskStatement, Expr, RawNetworkPolicyName, Version}; use mz_sql_parser::ident; use proptest_derive::Arbitrary; use serde::{Deserialize, Serialize}; @@ -790,6 +790,18 @@ impl AstDisplay for ResolvedRoleName { } } +#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub struct ResolvedNetworkPolicyName { + pub id: NetworkPolicyId, + pub name: String, +} + +impl AstDisplay for ResolvedNetworkPolicyName { + fn fmt(&self, f: &mut AstFormatter) { + f.write_str(format!("[{} AS {}]", self.id, self.name)); + } +} + #[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] pub enum ResolvedObjectName { Cluster(ResolvedClusterName), @@ -797,6 +809,7 @@ pub enum ResolvedObjectName { Database(ResolvedDatabaseName), Schema(ResolvedSchemaName), Role(ResolvedRoleName), + NetworkPolicy(ResolvedNetworkPolicyName), Item(ResolvedItemName), } @@ -809,6 +822,7 @@ impl AstDisplay for ResolvedObjectName { ResolvedObjectName::Schema(n) => f.write_node(n), ResolvedObjectName::Role(n) => f.write_node(n), ResolvedObjectName::Item(n) => f.write_node(n), + ResolvedObjectName::NetworkPolicy(n) => f.write_node(n), } } } @@ -824,6 +838,7 @@ impl AstInfo for Aug { type CteId = LocalId; type RoleName = ResolvedRoleName; type ObjectName = ResolvedObjectName; + type NetworkPolicyName = ResolvedNetworkPolicyName; } /// The identifier for a schema. @@ -1051,6 +1066,7 @@ impl TryFrom for ObjectId { } ResolvedItemName::Error => Err(anyhow!("error in name resolution")), }, + ResolvedObjectName::NetworkPolicy(name) => Ok(ObjectId::NetworkPolicy(name.id)), } } } @@ -1910,6 +1926,12 @@ impl<'a> Fold for NameResolver<'a> { ClusterAlterStrategy(value) => { ClusterAlterStrategy(self.fold_cluster_alter_option_value(value)) } + NetworkPolicyRules(rules) => NetworkPolicyRules( + rules + .into_iter() + .map(|r| self.fold_network_policy_rule_definition(r)) + .collect(), + ), } } @@ -1931,6 +1953,29 @@ impl<'a> Fold for NameResolver<'a> { } } } + + fn fold_network_policy_name( + &mut self, + name: ::NetworkPolicyName, + ) -> ::NetworkPolicyName { + match self.catalog.resolve_network_policy(&name.to_string()) { + Ok(policy) => ResolvedNetworkPolicyName { + id: policy.id(), + name: policy.name().to_string(), + }, + Err(e) => { + if self.status.is_ok() { + self.status = Err(e.into()); + } + // garbage value that will be ignored since there's an error. + ResolvedNetworkPolicyName { + id: NetworkPolicyId::User(0), + name: "".to_string(), + } + } + } + } + fn fold_object_name( &mut self, name: ::ObjectName, @@ -1968,6 +2013,9 @@ impl<'a> Fold for NameResolver<'a> { UnresolvedObjectName::Item(name) => { ResolvedObjectName::Item(self.fold_item_name(RawItemName::Name(name))) } + UnresolvedObjectName::NetworkPolicy(name) => ResolvedObjectName::NetworkPolicy( + self.fold_network_policy_name(RawNetworkPolicyName::Unresolved(name)), + ), } } diff --git a/src/sql/src/plan.rs b/src/sql/src/plan.rs index a0220d6d44a9e..4c8ee0c0b9eee 100644 --- a/src/sql/src/plan.rs +++ b/src/sql/src/plan.rs @@ -42,6 +42,7 @@ use mz_ore::now::{self, NOW_ZERO}; use mz_pgcopy::CopyFormatParams; use mz_repr::adt::mz_acl_item::{AclMode, MzAclItem}; use mz_repr::explain::{ExplainConfig, ExplainFormat}; +use mz_repr::network_policy_id::NetworkPolicyId; use mz_repr::optimize::OptimizerFeatureOverrides; use mz_repr::refresh_schedule::RefreshSchedule; use mz_repr::role_id::RoleId; @@ -140,6 +141,7 @@ pub enum Plan { CreateView(CreateViewPlan), CreateMaterializedView(CreateMaterializedViewPlan), CreateContinualTask(CreateContinualTaskPlan), + CreateNetworkPolicy(CreateNetworkPolicyPlan), CreateIndex(CreateIndexPlan), CreateType(CreateTypePlan), Comment(CommentPlan), @@ -187,6 +189,7 @@ pub enum Plan { AlterRole(AlterRolePlan), AlterOwner(AlterOwnerPlan), AlterTableAddColumn(AlterTablePlan), + AlterNetworkPolicy(AlterNetworkPolicyPlan), Declare(DeclarePlan), Fetch(FetchPlan), Close(ClosePlan), @@ -228,6 +231,7 @@ impl Plan { PlanKind::AlterNoop, ], StatementKind::AlterRole => &[PlanKind::AlterRole], + StatementKind::AlterNetworkPolicy => &[PlanKind::AlterNetworkPolicy], StatementKind::AlterSecret => &[PlanKind::AlterNoop, PlanKind::AlterSecret], StatementKind::AlterSetCluster => &[PlanKind::AlterNoop, PlanKind::AlterSetCluster], StatementKind::AlterSink => &[PlanKind::AlterNoop, PlanKind::AlterSink], @@ -259,6 +263,7 @@ impl Plan { StatementKind::CreateConnection => &[PlanKind::CreateConnection], StatementKind::CreateDatabase => &[PlanKind::CreateDatabase], StatementKind::CreateIndex => &[PlanKind::CreateIndex], + StatementKind::CreateNetworkPolicy => &[PlanKind::CreateNetworkPolicy], StatementKind::CreateMaterializedView => &[PlanKind::CreateMaterializedView], StatementKind::CreateContinualTask => &[PlanKind::CreateContinualTask], StatementKind::CreateRole => &[PlanKind::CreateRole], @@ -332,6 +337,7 @@ impl Plan { Plan::CreateContinualTask(_) => "create continual task", Plan::CreateIndex(_) => "create index", Plan::CreateType(_) => "create type", + Plan::CreateNetworkPolicy(_) => "create network policy", Plan::Comment(_) => "comment", Plan::DiscardTemp => "discard temp", Plan::DiscardAll => "discard all", @@ -411,6 +417,7 @@ impl Plan { Plan::AlterSystemReset(_) => "alter system", Plan::AlterSystemResetAll(_) => "alter system", Plan::AlterRole(_) => "alter role", + Plan::AlterNetworkPolicy(_) => "alter network policy", Plan::AlterOwner(plan) => match plan.object_type { ObjectType::Table => "alter table owner", ObjectType::View => "alter view owner", @@ -742,6 +749,19 @@ pub struct CreateContinualTaskPlan { pub continual_task: MaterializedView, } +#[derive(Debug, Clone)] +pub struct CreateNetworkPolicyPlan { + pub name: String, + pub rules: Vec, +} + +#[derive(Debug, Clone)] +pub struct AlterNetworkPolicyPlan { + pub id: NetworkPolicyId, + pub name: String, + pub rules: Vec, +} + #[derive(Debug, Clone)] pub struct CreateIndexPlan { pub name: QualifiedItemName, @@ -1580,12 +1600,22 @@ impl std::fmt::Display for NetworkPolicyRuleAction { } } } +impl TryFrom<&str> for NetworkPolicyRuleAction { + type Error = PlanError; + fn try_from(value: &str) -> Result { + match value.to_uppercase().as_str() { + "ALLOW" => Ok(Self::Allow), + _ => Err(PlanError::Unstructured( + "Allow is the only valid option".into(), + )), + } + } +} #[derive(Debug, Clone, Serialize, PartialEq, Eq, Ord, PartialOrd, Hash)] pub enum NetworkPolicyRuleDirection { Ingress, } - impl std::fmt::Display for NetworkPolicyRuleDirection { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { @@ -1593,17 +1623,36 @@ impl std::fmt::Display for NetworkPolicyRuleDirection { } } } +impl TryFrom<&str> for NetworkPolicyRuleDirection { + type Error = PlanError; + fn try_from(value: &str) -> Result { + match value.to_uppercase().as_str() { + "INGRESS" => Ok(Self::Ingress), + _ => Err(PlanError::Unstructured( + "Ingress is the only valid option".into(), + )), + } + } +} #[derive(Debug, Clone, PartialEq, Eq, Ord, PartialOrd, Hash)] pub struct PolicyAddress(pub IpNet); -impl PolicyAddress { - pub fn to_string(&self) -> String { - self.0.to_string() +impl std::fmt::Display for PolicyAddress { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", &self.0.to_string()) } } impl From for PolicyAddress { fn from(value: String) -> Self { - Self(IpNet::from_str(&value).expect("expected")) + Self(IpNet::from_str(&value).expect("expected value to be IpNet")) + } +} +impl TryFrom<&str> for PolicyAddress { + type Error = PlanError; + fn try_from(value: &str) -> Result { + let net = IpNet::from_str(value) + .map_err(|_| PlanError::Unstructured("Value must be valid IPV4 or IPV6 CIDR".into()))?; + Ok(Self(net)) } } @@ -1612,7 +1661,7 @@ impl Serialize for PolicyAddress { where S: serde::Serializer, { - serializer.serialize_str(&self.0.to_string()) + serializer.serialize_str(&format!("{}", &self.0)) } } diff --git a/src/sql/src/plan/statement.rs b/src/sql/src/plan/statement.rs index 08ae5ee209aa9..b4489a566d0a2 100644 --- a/src/sql/src/plan/statement.rs +++ b/src/sql/src/plan/statement.rs @@ -136,6 +136,7 @@ pub fn describe( Statement::AlterSystemReset(stmt) => ddl::describe_alter_system_reset(&scx, stmt)?, Statement::AlterSystemResetAll(stmt) => ddl::describe_alter_system_reset_all(&scx, stmt)?, Statement::AlterTableAddColumn(stmt) => ddl::describe_alter_table_add_column(&scx, stmt)?, + Statement::AlterNetworkPolicy(stmt) => ddl::describe_alter_network_policy(&scx, stmt)?, Statement::Comment(stmt) => ddl::describe_comment(&scx, stmt)?, Statement::CreateCluster(stmt) => ddl::describe_create_cluster(&scx, stmt)?, Statement::CreateClusterReplica(stmt) => ddl::describe_create_cluster_replica(&scx, stmt)?, @@ -159,6 +160,7 @@ pub fn describe( ddl::describe_create_materialized_view(&scx, stmt)? } Statement::CreateContinualTask(stmt) => ddl::describe_create_continual_task(&scx, stmt)?, + Statement::CreateNetworkPolicy(stmt) => ddl::describe_create_network_policy(&scx, stmt)?, Statement::DropObjects(stmt) => ddl::describe_drop_objects(&scx, stmt)?, Statement::DropOwned(stmt) => ddl::describe_drop_owned(&scx, stmt)?, @@ -321,6 +323,7 @@ pub fn plan( Statement::AlterSystemReset(stmt) => ddl::plan_alter_system_reset(scx, stmt), Statement::AlterSystemResetAll(stmt) => ddl::plan_alter_system_reset_all(scx, stmt), Statement::AlterTableAddColumn(stmt) => ddl::plan_alter_table_add_column(scx, stmt), + Statement::AlterNetworkPolicy(stmt) => ddl::plan_alter_network_policy(scx, stmt), Statement::Comment(stmt) => ddl::plan_comment(scx, stmt), Statement::CreateCluster(stmt) => ddl::plan_create_cluster(scx, stmt), Statement::CreateClusterReplica(stmt) => ddl::plan_create_cluster_replica(scx, stmt), @@ -342,6 +345,7 @@ pub fn plan( ddl::plan_create_materialized_view(scx, stmt, params) } Statement::CreateContinualTask(stmt) => ddl::plan_create_continual_task(scx, stmt, params), + Statement::CreateNetworkPolicy(stmt) => ddl::plan_create_network_policy(scx, stmt), Statement::DropObjects(stmt) => ddl::plan_drop_objects(scx, stmt), Statement::DropOwned(stmt) => ddl::plan_drop_owned(scx, stmt), @@ -1025,6 +1029,7 @@ impl From<&Statement> for StatementClassifica Statement::AlterIndex(_) => DDL, Statement::AlterObjectRename(_) => DDL, Statement::AlterObjectSwap(_) => DDL, + Statement::AlterNetworkPolicy(_) => DDL, Statement::AlterRetainHistory(_) => DDL, Statement::AlterRole(_) => DDL, Statement::AlterSecret(_) => DDL, @@ -1054,6 +1059,7 @@ impl From<&Statement> for StatementClassifica Statement::CreateType(_) => DDL, Statement::CreateView(_) => DDL, Statement::CreateMaterializedView(_) => DDL, + Statement::CreateNetworkPolicy(_) => DDL, Statement::DropObjects(_) => DDL, Statement::DropOwned(_) => DDL, diff --git a/src/sql/src/plan/statement/acl.rs b/src/sql/src/plan/statement/acl.rs index 4f0327c40172b..1886cba0c7359 100644 --- a/src/sql/src/plan/statement/acl.rs +++ b/src/sql/src/plan/statement/acl.rs @@ -27,7 +27,7 @@ use crate::names::{ }; use crate::plan::error::PlanError; use crate::plan::statement::ddl::{ - resolve_cluster, resolve_database, resolve_item_or_type, resolve_schema, + resolve_cluster, resolve_database, resolve_item_or_type, resolve_network_policy, resolve_schema, }; use crate::plan::statement::{StatementContext, StatementDesc}; use crate::plan::{ @@ -76,6 +76,9 @@ pub fn plan_alter_owner( (ObjectType::Schema, UnresolvedObjectName::Schema(name)) => { plan_alter_schema_owner(scx, if_exists, name, new_owner.id) } + (ObjectType::NetworkPolicy, UnresolvedObjectName::NetworkPolicy(name)) => { + plan_alter_network_policy_owner(scx, if_exists, name, new_owner.id) + } (ObjectType::Role, UnresolvedObjectName::Role(_)) => unreachable!("rejected by the parser"), ( object_type @ ObjectType::Cluster @@ -91,6 +94,7 @@ pub fn plan_alter_owner( | name @ UnresolvedObjectName::ClusterReplica(_) | name @ UnresolvedObjectName::Database(_) | name @ UnresolvedObjectName::Schema(_) + | name @ UnresolvedObjectName::NetworkPolicy(_) | name @ UnresolvedObjectName::Role(_), ) => { unreachable!("parser set the wrong object type '{object_type:?}' for name {name:?}") @@ -236,6 +240,31 @@ fn plan_alter_item_owner( } } +fn plan_alter_network_policy_owner( + scx: &StatementContext, + if_exists: bool, + name: Ident, + new_owner: RoleId, +) -> Result { + match resolve_network_policy(scx, name.clone(), if_exists)? { + Some(policy_id) => Ok(Plan::AlterOwner(AlterOwnerPlan { + id: ObjectId::NetworkPolicy(policy_id.id), + object_type: ObjectType::Schema, + new_owner, + })), + None => { + scx.catalog.add_notice(PlanNotice::ObjectDoesNotExist { + name: name.to_ast_string(), + object_type: ObjectType::NetworkPolicy, + }); + + Ok(Plan::AlterNoop(AlterNoopPlan { + object_type: ObjectType::NetworkPolicy, + })) + } + } +} + pub fn describe_grant_role( _: &StatementContext, _: GrantRoleStatement, @@ -581,6 +610,7 @@ fn privilege_to_acl_mode(privilege: Privilege) -> AclMode { Privilege::CREATEROLE => AclMode::CREATE_ROLE, Privilege::CREATEDB => AclMode::CREATE_DB, Privilege::CREATECLUSTER => AclMode::CREATE_CLUSTER, + Privilege::CREATENETWORKPOLICY => AclMode::CREATE_NETWORK_POLICY, } } diff --git a/src/sql/src/plan/statement/ddl.rs b/src/sql/src/plan/statement/ddl.rs index 14b30eaa2307c..df7f858b77686 100644 --- a/src/sql/src/plan/statement/ddl.rs +++ b/src/sql/src/plan/statement/ddl.rs @@ -34,6 +34,7 @@ use mz_postgres_util::tunnel::PostgresFlavor; use mz_proto::RustType; use mz_repr::adt::interval::Interval; use mz_repr::adt::mz_acl_item::{MzAclItem, PrivilegeMap}; +use mz_repr::network_policy_id::NetworkPolicyId; use mz_repr::optimize::OptimizerFeatureOverrides; use mz_repr::refresh_schedule::{RefreshEvery, RefreshSchedule}; use mz_repr::role_id::RoleId; @@ -44,20 +45,21 @@ use mz_sql_parser::ast::display::comma_separated; use mz_sql_parser::ast::{ self, AlterClusterAction, AlterClusterStatement, AlterConnectionAction, AlterConnectionOption, AlterConnectionOptionName, AlterConnectionStatement, AlterIndexAction, AlterIndexStatement, - AlterObjectRenameStatement, AlterObjectSwapStatement, AlterRetainHistoryStatement, - AlterRoleOption, AlterRoleStatement, AlterSecretStatement, AlterSetClusterStatement, - AlterSinkAction, AlterSinkStatement, AlterSourceAction, AlterSourceAddSubsourceOption, - AlterSourceAddSubsourceOptionName, AlterSourceStatement, AlterSystemResetAllStatement, - AlterSystemResetStatement, AlterSystemSetStatement, AlterTableAddColumnStatement, AvroSchema, - AvroSchemaOption, AvroSchemaOptionName, ClusterAlterOption, ClusterAlterOptionName, - ClusterAlterOptionValue, ClusterAlterUntilReadyOption, ClusterAlterUntilReadyOptionName, - ClusterFeature, ClusterFeatureName, ClusterOption, ClusterOptionName, - ClusterScheduleOptionValue, ColumnDef, ColumnOption, CommentObjectType, CommentStatement, - ConnectionOption, ConnectionOptionName, ContinualTaskOption, ContinualTaskOptionName, - CreateClusterReplicaStatement, CreateClusterStatement, CreateConnectionOption, - CreateConnectionOptionName, CreateConnectionStatement, CreateConnectionType, - CreateContinualTaskStatement, CreateDatabaseStatement, CreateIndexStatement, - CreateMaterializedViewStatement, CreateRoleStatement, CreateSchemaStatement, + AlterNetworkPolicyStatement, AlterObjectRenameStatement, AlterObjectSwapStatement, + AlterRetainHistoryStatement, AlterRoleOption, AlterRoleStatement, AlterSecretStatement, + AlterSetClusterStatement, AlterSinkAction, AlterSinkStatement, AlterSourceAction, + AlterSourceAddSubsourceOption, AlterSourceAddSubsourceOptionName, AlterSourceStatement, + AlterSystemResetAllStatement, AlterSystemResetStatement, AlterSystemSetStatement, + AlterTableAddColumnStatement, AvroSchema, AvroSchemaOption, AvroSchemaOptionName, + ClusterAlterOption, ClusterAlterOptionName, ClusterAlterOptionValue, + ClusterAlterUntilReadyOption, ClusterAlterUntilReadyOptionName, ClusterFeature, + ClusterFeatureName, ClusterOption, ClusterOptionName, ClusterScheduleOptionValue, ColumnDef, + ColumnOption, CommentObjectType, CommentStatement, ConnectionOption, ConnectionOptionName, + ContinualTaskOption, ContinualTaskOptionName, CreateClusterReplicaStatement, + CreateClusterStatement, CreateConnectionOption, CreateConnectionOptionName, + CreateConnectionStatement, CreateConnectionType, CreateContinualTaskStatement, + CreateDatabaseStatement, CreateIndexStatement, CreateMaterializedViewStatement, + CreateNetworkPolicyStatement, CreateRoleStatement, CreateSchemaStatement, CreateSecretStatement, CreateSinkConnection, CreateSinkOption, CreateSinkOptionName, CreateSinkStatement, CreateSourceConnection, CreateSourceOption, CreateSourceOptionName, CreateSourceStatement, CreateSubsourceOption, CreateSubsourceOptionName, @@ -69,13 +71,15 @@ use mz_sql_parser::ast::{ DropOwnedStatement, Expr, Format, FormatSpecifier, Ident, IfExistsBehavior, IndexOption, IndexOptionName, KafkaSinkConfigOption, KeyConstraint, LoadGeneratorOption, LoadGeneratorOptionName, MaterializedViewOption, MaterializedViewOptionName, MySqlConfigOption, - MySqlConfigOptionName, PgConfigOption, PgConfigOptionName, ProtobufSchema, QualifiedReplica, - RefreshAtOptionValue, RefreshEveryOptionValue, RefreshOptionValue, ReplicaDefinition, - ReplicaOption, ReplicaOptionName, RoleAttribute, SetRoleVar, SourceErrorPolicy, - SourceIncludeMetadata, Statement, TableConstraint, TableFromSourceColumns, - TableFromSourceOption, TableFromSourceOptionName, TableOption, TableOptionName, - UnresolvedDatabaseName, UnresolvedItemName, UnresolvedObjectName, UnresolvedSchemaName, Value, - ViewDefinition, WithOptionValue, + MySqlConfigOptionName, NetworkPolicyOption, NetworkPolicyOptionName, + NetworkPolicyRuleDefinition, NetworkPolicyRuleOption, NetworkPolicyRuleOptionName, + PgConfigOption, PgConfigOptionName, ProtobufSchema, QualifiedReplica, RefreshAtOptionValue, + RefreshEveryOptionValue, RefreshOptionValue, ReplicaDefinition, ReplicaOption, + ReplicaOptionName, RoleAttribute, SetRoleVar, SourceErrorPolicy, SourceIncludeMetadata, + Statement, TableConstraint, TableFromSourceColumns, TableFromSourceOption, + TableFromSourceOptionName, TableOption, TableOptionName, UnresolvedDatabaseName, + UnresolvedItemName, UnresolvedObjectName, UnresolvedSchemaName, Value, ViewDefinition, + WithOptionValue, }; use mz_sql_parser::ident; use mz_sql_parser::parser::StatementParseResult; @@ -122,7 +126,7 @@ use crate::kafka_util::{KafkaSinkConfigOptionExtracted, KafkaSourceConfigOptionE use crate::names::{ Aug, CommentObjectId, DatabaseId, ObjectId, PartialItemName, QualifiedItemName, ResolvedClusterName, ResolvedColumnReference, ResolvedDataType, ResolvedDatabaseSpecifier, - ResolvedItemName, SchemaSpecifier, SystemObjectId, + ResolvedItemName, ResolvedNetworkPolicyName, SchemaSpecifier, SystemObjectId, }; use crate::normalize::{self, ident}; use crate::plan::error::PlanError; @@ -138,19 +142,21 @@ use crate::plan::with_options::{OptionalDuration, OptionalString, TryFromValue}; use crate::plan::{ literal, plan_utils, query, transform_ast, AlterClusterPlan, AlterClusterPlanStrategy, AlterClusterRenamePlan, AlterClusterReplicaRenamePlan, AlterClusterSwapPlan, - AlterConnectionPlan, AlterItemRenamePlan, AlterNoopPlan, AlterOptionParameter, - AlterRetainHistoryPlan, AlterRolePlan, AlterSchemaRenamePlan, AlterSchemaSwapPlan, - AlterSecretPlan, AlterSetClusterPlan, AlterSinkPlan, AlterSystemResetAllPlan, - AlterSystemResetPlan, AlterSystemSetPlan, AlterTablePlan, ClusterSchedule, CommentPlan, - ComputeReplicaConfig, ComputeReplicaIntrospectionConfig, ConnectionDetails, - CreateClusterManagedPlan, CreateClusterPlan, CreateClusterReplicaPlan, + AlterConnectionPlan, AlterItemRenamePlan, AlterNetworkPolicyPlan, AlterNoopPlan, + AlterOptionParameter, AlterRetainHistoryPlan, AlterRolePlan, AlterSchemaRenamePlan, + AlterSchemaSwapPlan, AlterSecretPlan, AlterSetClusterPlan, AlterSinkPlan, + AlterSystemResetAllPlan, AlterSystemResetPlan, AlterSystemSetPlan, AlterTablePlan, + ClusterSchedule, CommentPlan, ComputeReplicaConfig, ComputeReplicaIntrospectionConfig, + ConnectionDetails, CreateClusterManagedPlan, CreateClusterPlan, CreateClusterReplicaPlan, CreateClusterUnmanagedPlan, CreateClusterVariant, CreateConnectionPlan, CreateContinualTaskPlan, CreateDatabasePlan, CreateIndexPlan, CreateMaterializedViewPlan, - CreateRolePlan, CreateSchemaPlan, CreateSecretPlan, CreateSinkPlan, CreateSourcePlan, - CreateTablePlan, CreateTypePlan, CreateViewPlan, DataSourceDesc, DropObjectsPlan, - DropOwnedPlan, Index, Ingestion, MaterializedView, Params, Plan, PlanClusterOption, PlanNotice, - QueryContext, ReplicaConfig, Secret, Sink, Source, Table, TableDataSource, Type, VariableValue, - View, WebhookBodyFormat, WebhookHeaderFilters, WebhookHeaders, WebhookValidation, + CreateNetworkPolicyPlan, CreateRolePlan, CreateSchemaPlan, CreateSecretPlan, CreateSinkPlan, + CreateSourcePlan, CreateTablePlan, CreateTypePlan, CreateViewPlan, DataSourceDesc, + DropObjectsPlan, DropOwnedPlan, Index, Ingestion, MaterializedView, NetworkPolicyRule, + NetworkPolicyRuleAction, NetworkPolicyRuleDirection, Params, Plan, PlanClusterOption, + PlanNotice, PolicyAddress, QueryContext, ReplicaConfig, Secret, Sink, Source, Table, + TableDataSource, Type, VariableValue, View, WebhookBodyFormat, WebhookHeaderFilters, + WebhookHeaders, WebhookValidation, }; use crate::session::vars::{ self, ENABLE_CLUSTER_SCHEDULE_REFRESH, ENABLE_KAFKA_SINK_HEADERS, @@ -2524,6 +2530,20 @@ pub fn describe_create_continual_task( Ok(StatementDesc::new(None)) } +pub fn describe_create_network_policy( + _: &StatementContext, + _: CreateNetworkPolicyStatement, +) -> Result { + Ok(StatementDesc::new(None)) +} + +pub fn describe_alter_network_policy( + _: &StatementContext, + _: AlterNetworkPolicyStatement, +) -> Result { + Ok(StatementDesc::new(None)) +} + pub fn plan_create_materialized_view( scx: &StatementContext, mut stmt: CreateMaterializedViewStatement, @@ -4168,6 +4188,115 @@ pub fn plan_create_role( })) } +pub fn plan_create_network_policy( + ctx: &StatementContext, + CreateNetworkPolicyStatement { name, options }: CreateNetworkPolicyStatement, +) -> Result { + ctx.require_feature_flag(&vars::ENABLE_NETWORK_POLICIES)?; + let policy_options: NetworkPolicyOptionExtracted = options.try_into()?; + + let Some(rule_defs) = policy_options.rules else { + sql_bail!("RULES must be specified when creating network policies."); + }; + + let mut rules = vec![]; + for NetworkPolicyRuleDefinition { name, options } in rule_defs { + let NetworkPolicyRuleOptionExtracted { + seen: _, + direction, + action, + address, + } = options.try_into()?; + let (direction, action, address) = match (direction, action, address) { + (Some(direction), Some(action), Some(address)) => ( + NetworkPolicyRuleDirection::try_from(direction.as_str())?, + NetworkPolicyRuleAction::try_from(action.as_str())?, + PolicyAddress::try_from(address.as_str())?, + ), + (_, _, _) => { + sql_bail!("Direction, Address, and Action must specified when creating a rule") + } + }; + rules.push(NetworkPolicyRule { + name: normalize::ident(name), + direction, + action, + address, + }); + } + + if rules.len() + > ctx + .catalog + .system_vars() + .max_rules_per_network_policy() + .try_into()? + { + sql_bail!("RULES count exceeds max_rules_per_network_policy.") + } + + Ok(Plan::CreateNetworkPolicy(CreateNetworkPolicyPlan { + name: normalize::ident(name), + rules, + })) +} + +pub fn plan_alter_network_policy( + ctx: &StatementContext, + AlterNetworkPolicyStatement { name, options }: AlterNetworkPolicyStatement, +) -> Result { + ctx.require_feature_flag(&vars::ENABLE_NETWORK_POLICIES)?; + + let policy_options: NetworkPolicyOptionExtracted = options.try_into()?; + let policy = ctx.catalog.resolve_network_policy(&name.to_string())?; + + let Some(rule_defs) = policy_options.rules else { + sql_bail!("RULES must be specified when creating network policies."); + }; + + let mut rules = vec![]; + for NetworkPolicyRuleDefinition { name, options } in rule_defs { + let NetworkPolicyRuleOptionExtracted { + seen: _, + direction, + action, + address, + } = options.try_into()?; + + let (direction, action, address) = match (direction, action, address) { + (Some(direction), Some(action), Some(address)) => ( + NetworkPolicyRuleDirection::try_from(direction.as_str())?, + NetworkPolicyRuleAction::try_from(action.as_str())?, + PolicyAddress::try_from(address.as_str())?, + ), + (_, _, _) => { + sql_bail!("Direction, Address, and Action must specified when creating a rule") + } + }; + rules.push(NetworkPolicyRule { + name: normalize::ident(name), + direction, + action, + address, + }); + } + if rules.len() + > ctx + .catalog + .system_vars() + .max_rules_per_network_policy() + .try_into()? + { + sql_bail!("RULES count exceeds max_rules_per_network_policy.") + } + + Ok(Plan::AlterNetworkPolicy(AlterNetworkPolicyPlan { + id: policy.id(), + name: normalize::ident(name), + rules, + })) +} + pub fn describe_create_cluster( _: &StatementContext, _: CreateClusterStatement, @@ -4194,6 +4323,18 @@ generate_extracted_config!( (WorkloadClass, OptionalString) ); +generate_extracted_config!( + NetworkPolicyOption, + (Rules, Vec>) +); + +generate_extracted_config!( + NetworkPolicyRuleOption, + (Direction, String), + (Action, String), + (Address, String) +); + generate_extracted_config!(ClusterAlterOption, (Wait, ClusterAlterOptionValue)); generate_extracted_config!( @@ -5002,6 +5143,9 @@ pub fn plan_drop_objects( plan_drop_item(scx, object_type, if_exists, name.clone(), cascade)? .map(ObjectId::Item) } + UnresolvedObjectName::NetworkPolicy(name) => { + plan_drop_network_policy(scx, if_exists, name)?.map(ObjectId::NetworkPolicy) + } }; match id { Some(id) => referenced_ids.push(id), @@ -5100,6 +5244,25 @@ fn plan_drop_cluster( }) } +fn plan_drop_network_policy( + scx: &StatementContext, + if_exists: bool, + name: &Ident, +) -> Result, PlanError> { + match scx.catalog.resolve_network_policy(name.as_str()) { + Ok(policy) => { + // TODO @jubrad don't let this be dropped if it's the default policy or + // is being used by other objects. + // if scx.catalog.system_vars().default_network_policy().id() == policy.id() { + // return Err(PlanError::Unstructured("Cannot drop default network policy.") + // } + Ok(Some(policy.id())) + } + Err(_) if if_exists => Ok(None), + Err(e) => Err(e.into()), + } +} + /// Returns `true` if the cluster has any storage object. Return `false` if the cluster has no /// objects. fn contains_storage_objects(scx: &StatementContext, cluster: &dyn CatalogCluster) -> bool { @@ -7017,6 +7180,9 @@ pub fn plan_comment( None, ) } + CommentObjectType::NetworkPolicy { name } => { + (CommentObjectId::NetworkPolicy(name.id), None) + } }; // Note: the `mz_comments` table uses an `Int4` for the column position, but in the catalog storage we @@ -7094,6 +7260,21 @@ pub(crate) fn resolve_schema<'a>( } } +pub(crate) fn resolve_network_policy<'a>( + scx: &'a StatementContext, + name: Ident, + if_exists: bool, +) -> Result, PlanError> { + match scx.catalog.resolve_network_policy(&name.to_string()) { + Ok(policy) => Ok(Some(ResolvedNetworkPolicyName { + id: policy.id(), + name: policy.name().to_string(), + })), + Err(_) if if_exists => Ok(None), + Err(e) => Err(e.into()), + } +} + pub(crate) fn resolve_item_or_type<'a>( scx: &'a StatementContext, object_type: ObjectType, diff --git a/src/sql/src/plan/statement/show.rs b/src/sql/src/plan/statement/show.rs index 98834ea8ece4f..0e2791ffa762f 100644 --- a/src/sql/src/plan/statement/show.rs +++ b/src/sql/src/plan/statement/show.rs @@ -280,6 +280,20 @@ pub fn show_roles<'a>( ShowSelect::new(scx, query, filter, None, Some(&["name", "comment"])) } +pub fn show_network_policies<'a>( + scx: &'a StatementContext<'a>, + filter: Option>, +) -> Result, PlanError> { + let query = "SELECT name, rules, comment FROM mz_internal.mz_show_network_policies".to_string(); + ShowSelect::new( + scx, + query, + filter, + None, + Some(&["name", "rules", "comment"]), + ) +} + pub fn show_objects<'a>( scx: &'a StatementContext<'a>, ShowObjectsStatement { @@ -340,6 +354,10 @@ pub fn show_objects<'a>( ShowObjectType::ContinualTask { in_cluster } => { show_continual_tasks(scx, from, in_cluster, filter) } + ShowObjectType::NetworkPolicy => { + assert_none!(from, "parser should reject from"); + show_network_policies(scx, filter) + } } } diff --git a/src/sql/src/plan/with_options.rs b/src/sql/src/plan/with_options.rs index 2840b3e9c879e..bf7a014643f5e 100644 --- a/src/sql/src/plan/with_options.rs +++ b/src/sql/src/plan/with_options.rs @@ -17,7 +17,7 @@ use mz_repr::bytes::ByteSize; use mz_repr::{strconv, GlobalId, RelationVersionSelector}; use mz_sql_parser::ast::{ ClusterAlterOptionValue, ClusterScheduleOptionValue, ConnectionDefaultAwsPrivatelink, Expr, - Ident, KafkaBroker, RefreshOptionValue, ReplicaDefinition, + Ident, KafkaBroker, NetworkPolicyRuleDefinition, RefreshOptionValue, ReplicaDefinition, }; use mz_storage_types::connections::string_or_secret::StringOrSecret; use serde::{Deserialize, Serialize}; @@ -663,7 +663,8 @@ impl, T: AstInfo + std::fmt::Debug> TryFromValue sql_bail!( + | WithOptionValue::ClusterScheduleOptionValue(_) + | WithOptionValue::NetworkPolicyRules(_) => sql_bail!( "incompatible value types: cannot convert {} to {}", match v { // The first few are unreachable because they are handled at the top of the outer match. @@ -683,6 +684,7 @@ impl, T: AstInfo + std::fmt::Debug> TryFromValue "connection kafka brokers", WithOptionValue::Refresh(_) => "refresh option values", WithOptionValue::ClusterScheduleOptionValue(_) => "cluster schedule", + WithOptionValue::NetworkPolicyRules(_) => "network policy rules", }, V::name() ), @@ -904,3 +906,26 @@ impl TryFromValue> for ClusterAlterOptionValue { Some(WithOptionValue::ClusterAlterStrategy(self)) } } + +impl TryFromValue> for Vec> { + fn try_from_value(v: WithOptionValue) -> Result { + match v { + WithOptionValue::NetworkPolicyRules(rules) => Ok(rules), + _ => sql_bail!("cannot use value as cluster replicas"), + } + } + + fn try_into_value(self, _catalog: &dyn SessionCatalog) -> Option> { + Some(WithOptionValue::NetworkPolicyRules(self)) + } + + fn name() -> String { + "network policy rules".to_string() + } +} + +impl ImpliedValue for Vec> { + fn implied_value() -> Result { + sql_bail!("must provide a set of network policy rules") + } +} diff --git a/src/sql/src/rbac.rs b/src/sql/src/rbac.rs index 25fb57e8d03e6..d2ba3bc376948 100644 --- a/src/sql/src/rbac.rs +++ b/src/sql/src/rbac.rs @@ -438,6 +438,15 @@ fn generate_rbac_requirements( item_usage: &CREATE_ITEM_USAGE, ..Default::default() }, + Plan::CreateNetworkPolicy(plan::CreateNetworkPolicyPlan { .. }) => RbacRequirements { + privileges: vec![( + SystemObjectId::System, + AclMode::CREATE_NETWORK_POLICY, + role_id, + )], + item_usage: &CREATE_ITEM_USAGE, + ..Default::default() + }, Plan::CreateCluster(plan::CreateClusterPlan { name: _, variant: _, @@ -1201,6 +1210,11 @@ fn generate_rbac_requirements( item_usage: &CREATE_ITEM_USAGE, ..Default::default() }, + Plan::AlterNetworkPolicy(plan::AlterNetworkPolicyPlan { id, .. }) => RbacRequirements { + ownership: vec![ObjectId::NetworkPolicy(*id)], + item_usage: &CREATE_ITEM_USAGE, + ..Default::default() + }, Plan::ReadThenWrite(plan::ReadThenWritePlan { id, selection, @@ -1702,7 +1716,9 @@ pub const fn all_object_privileges(object_type: SystemObjectType) -> AclMode { const USAGE_CREATE_ACL_MODE: AclMode = AclMode::USAGE.union(AclMode::CREATE); const ALL_SYSTEM_PRIVILEGES: AclMode = AclMode::CREATE_ROLE .union(AclMode::CREATE_DB) - .union(AclMode::CREATE_CLUSTER); + .union(AclMode::CREATE_CLUSTER) + .union(AclMode::CREATE_NETWORK_POLICY); + const EMPTY_ACL_MODE: AclMode = AclMode::empty(); match object_type { SystemObjectType::Object(ObjectType::Table) => TABLE_ACL_MODE, diff --git a/src/sql/src/session/vars.rs b/src/sql/src/session/vars.rs index 83060fac0315c..fd44c4ac3c6ab 100644 --- a/src/sql/src/session/vars.rs +++ b/src/sql/src/session/vars.rs @@ -1190,6 +1190,8 @@ impl SystemVars { &MAX_SECRETS, &MAX_ROLES, &MAX_CONTINUAL_TASKS, + &MAX_NETWORK_POLICIES, + &MAX_RULES_PER_NETWORK_POLICY, &MAX_RESULT_SIZE, &MAX_COPY_FROM_SIZE, &ALLOWED_CLUSTER_REPLICA_SIZES, @@ -1714,6 +1716,11 @@ impl SystemVars { *self.expect_value(&MAX_NETWORK_POLICIES) } + /// Returns the value of the `max_network_policies` configuration parameter. + pub fn max_rules_per_network_policy(&self) -> u32 { + *self.expect_value(&MAX_RULES_PER_NETWORK_POLICY) + } + /// Returns the value of the `max_result_size` configuration parameter. pub fn max_result_size(&self) -> u64 { self.expect_value::(&MAX_RESULT_SIZE).as_bytes() diff --git a/src/sql/src/session/vars/definitions.rs b/src/sql/src/session/vars/definitions.rs index 0171596826e59..de3198253b861 100644 --- a/src/sql/src/session/vars/definitions.rs +++ b/src/sql/src/session/vars/definitions.rs @@ -557,11 +557,18 @@ pub static MAX_NETWORK_POLICIES: VarDefinition = VarDefinition::new( true, ); +pub static MAX_RULES_PER_NETWORK_POLICY: VarDefinition = VarDefinition::new( + "max_rules_per_network_policy", + value!(u32; 25), + "The maximum number of rules per network policies.", + true, +); + // Cloud environmentd is configured with 4 GiB of RAM, so 1 GiB is a good heuristic for a single // query. // // We constrain this parameter to a minimum of 1MB, to avoid accidental usage of values that will -// interfer with queries executed by the system itself. +// interfere with queries executed by the system itself. // // TODO(jkosh44) Eventually we want to be able to return arbitrary sized results. pub static MAX_RESULT_SIZE: VarDefinition = VarDefinition::new( @@ -2177,6 +2184,12 @@ feature_flags!( default: false, enable_for_item_parsing: true, }, + { + name: enable_network_policies, + desc: "ENABLE NETWORK POLICIES", + default: false, + enable_for_item_parsing: true, + }, ); impl From<&super::SystemVars> for OptimizerFeatures { diff --git a/src/storage-types/src/snapshots/mz_storage_types__stats__tests__impl.snap b/src/storage-types/src/snapshots/mz_storage_types__stats__tests__impl.snap index 122ff97a5d221..c5bf3d265b074 100644 --- a/src/storage-types/src/snapshots/mz_storage_types__stats__tests__impl.snap +++ b/src/storage-types/src/snapshots/mz_storage_types__stats__tests__impl.snap @@ -23,18 +23,12 @@ expression: all_stats }, "upper": { "$serde_json::private::Number": "85571058" - }, - "nulls": { - "$serde_json::private::Number": "1" } }, "1": { "lower": "0a000000f7ffffffff00b8030d020900000000000000000000000000000000000000800000000000", "upper": "01000000000000000000000000000000000000000000000000000000000000000000000000000000", - "kind": "packed-numeric", - "nulls": { - "$serde_json::private::Number": "1" - } + "kind": "packed-numeric" }, "2": { "nulls": { @@ -46,64 +40,77 @@ expression: all_stats } }, { - "len": 3, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "7" }, "0": { "lower": { - "$serde_json::private::Number": "3763686" + "$serde_json::private::Number": "15028" }, "upper": { - "$serde_json::private::Number": "81431846" + "$serde_json::private::Number": "59971" } + }, + "1": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" } } } }, { - "len": 4, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "4" - }, - "0": { - "lower": { - "$serde_json::private::Number": "1150006421" - }, - "upper": { - "$serde_json::private::Number": "2241735323" - }, - "nulls": { - "$serde_json::private::Number": "2" - } + "$serde_json::private::Number": "7" }, + "0": "NoneStats", "1": { "lower": { - "$serde_json::private::Number": "203916856" + "$serde_json::private::Number": "-29206" }, "upper": { - "$serde_json::private::Number": "4094210978" + "$serde_json::private::Number": "24275" } + } + } + } + }, + { + "len": 2, + "cols": { + "err": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "2" + } + }, + "ok": { + "len": { + "$serde_json::private::Number": "2" }, - "2": "NoneStats" + "0": "NoneStats" } } }, @@ -122,16 +129,12 @@ expression: all_stats "$serde_json::private::Number": "4" }, "0": { - "lower": "‮|󰔼%$󬰩\r\"Ⱥ/'\u0000􅎄•\u0000/M\r&*񈍒", - "upper": "󲙚󠒬🕴\tx񱅸&)󽣃񧾴󍝄\u0005\"Î\u001b,𜳑&%{\"\t{{.团" - }, - "1": { "nulls": { "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" }, - "2": "NoneStats" + "1": "NoneStats" } } }, @@ -149,44 +152,71 @@ expression: all_stats "len": { "$serde_json::private::Number": "2" }, + "0": "NoneStats" + } + } + }, + { + "len": 6, + "cols": { + "err": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "6" + } + }, + "ok": { + "len": { + "$serde_json::private::Number": "6" + }, "0": { "lower": { - "$serde_json::private::Number": "2187191696" + "$serde_json::private::Number": "10763628" }, "upper": { - "$serde_json::private::Number": "2849720846" + "$serde_json::private::Number": "78020263" } }, - "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "1": "NoneStats", + "2": { + "lower": "0c2e648a641dac56dc04da79911b6ca6", + "upper": "c5152f3711c7987fd461e0ce07089145", + "kind": "uuid" } } } }, { - "len": 3, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" }, "0": { "lower": { - "$serde_json::private::Number": "-8.525963296095225e52" + "$serde_json::private::Number": "0" }, "upper": { - "$serde_json::private::Number": "1.1974870551732925e83" + "$serde_json::private::Number": "0" + }, + "nulls": { + "$serde_json::private::Number": "1" } + }, + "1": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" } } } @@ -205,34 +235,52 @@ expression: all_stats "len": { "$serde_json::private::Number": "3" }, - "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "0": "NoneStats", + "1": { + "lower": "03ba97a8b7a580fe97617ebe2dff5b45", + "upper": "83bb0c02849500dfb682e7e64f12e59f", + "kind": "packed-interval" } } } }, { - "len": 4, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" }, "0": { + "lower": { + "$serde_json::private::Number": "-6.480265617344902e216" + }, + "upper": { + "$serde_json::private::Number": "-6.480265617344902e216" + } + }, + "1": { + "lower": "0000000000000000", + "upper": "0000000000000000", + "kind": "packed-time", "nulls": { "$serde_json::private::Number": "1" + } + }, + "2": { + "lower": { + "$serde_json::private::Number": "2679658787" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "2679658787" + } } } } @@ -252,358 +300,431 @@ expression: all_stats "$serde_json::private::Number": "5" }, "0": { - "lower": "3f0e38946b7e352340acd9aa9e45ae2a885bcc4f2097778ae480184ccb0f3c5c91e496c0109c1668e732fc7c52888cb382a4f2c9382dd2eb1e000457da2429a31a0ec0b490a8422bbd4a9319bad167bbedbb4c88182f2720d505bf6e10151b9a5baa45b1", - "upper": "e2b26eb4775d8ed8a713ad6189f0710a855bb3d02c6bb2f2107c294e93fc307df3cd0c557bed1785f579acb9d9aac3587c78c343d925ca0d86ef2b97528943e537fd302bb9a39243fa1d81197ab0765cf00bb958519178bc42496b3a7bc4060b008e807f" + "lower": false, + "upper": true + }, + "1": { + "lower": "\u000b<󤞭\rnl:�𻂮'\b𻃸󩥸", + "upper": "¥:\\򭩼Ѩ\u000b\\15�ⰵ\tȺ񁶿{?󧟞񀬞\u0004N\u0007" + }, + "2": { + "lower": "11000000f5ffffffcd002000c703e00018030e000000000000000000000000000000800000000000", + "upper": "1100000016000000cc02a50202013e03180319000000000000000000000000000000000000000000", + "kind": "packed-numeric", + "nulls": { + "$serde_json::private::Number": "1" + } } } } }, { - "len": 2, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "5" }, - "0": "NoneStats" + "0": { + "lower": { + "$serde_json::private::Number": "1542004651" + }, + "upper": { + "$serde_json::private::Number": "2075453489" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "1": { + "lower": { + "$serde_json::private::Number": "89" + }, + "upper": { + "$serde_json::private::Number": "241" + }, + "nulls": { + "$serde_json::private::Number": "3" + } + } } } }, { - "len": 7, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" }, "0": { "lower": { - "$serde_json::private::Number": "-1412418298" + "$serde_json::private::Number": "-13044" }, "upper": { - "$serde_json::private::Number": "1605223135" + "$serde_json::private::Number": "30227" } + }, + "1": { + "nulls": { + "$serde_json::private::Number": "2" + }, + "not nulls": "NoneStats" } } } }, { - "len": 5, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" }, "0": { - "lower": "0󳞾seo?$H\"%ǀ¥\u0000 ", - "upper": "𕵏򦬇='q򈍴🕴\u0000򿻋Z%󡢉\n`򠽫\n`i›\"{񛀏=H򟤱‮*񱨝J`<�?󿾏`*򚷩񜫃¥𞰁 " + "lower": "02bc492ea41b463c61ed19ada4f2951a", + "upper": "b0e8db073486139e003357792b07ebbf", + "kind": "uuid" + }, + "1": { + "lower": "da0ea66000353e1e7ce286289383778a", + "upper": "f7571c3d22bbe4e6988af2d5190161b8", + "kind": "uuid" + }, + "2": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" } } } }, { - "len": 3, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" }, - "0": "NoneStats", - "1": "NoneStats" + "0": { + "lower": { + "$serde_json::private::Number": "1253355652" + }, + "upper": { + "$serde_json::private::Number": "3936345719" + }, + "nulls": { + "$serde_json::private::Number": "2" + } + }, + "1": { + "lower": { + "$serde_json::private::Number": "1383676928" + }, + "upper": { + "$serde_json::private::Number": "3051851296" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + } } } }, { - "len": 5, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" }, - "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - } + "0": "NoneStats" } } }, { - "len": 7, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "2" }, "0": { - "nulls": { - "$serde_json::private::Number": "2" - }, - "not nulls": "NoneStats" + "lower": "10f1b7bd8a698ba602f72c5d056d1c04e72504c7ff7aa0882723d11fd9fd42982ab951bb38b7af9654d5851cf44780acf497d94d0ed8fa74c416754269a53d7cf2096d4615e80b22167c9557ceeebd9502aa395f5d38b11d87d322e3bfdac1bc956dd2e5", + "upper": "fb78ab0f53748a8bc1670fa75b252627dd47f7ed149b359fca7635487f97892653c087d478a1c55ffb577720a3a3d6cbf6e332c7517a8f4fa80c0ba5025010115619e6e1d87e78cef29a220a9ff0ac919c67762a9caeea4c606c7e6f3575eb48835b0135" }, - "1": "NoneStats" + "1": { + "lower": "000023ed1de44090", + "upper": "0000f6f616f44438", + "kind": "packed-time" + } } } }, { - "len": 7, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "6" }, - "0": "NoneStats", - "1": { - "lower": { - "$serde_json::private::Number": "2013" + "0": { + "nulls": { + "$serde_json::private::Number": "2" }, - "upper": { - "$serde_json::private::Number": "52138" - } + "not nulls": "NoneStats" }, - "2": { + "1": { "lower": { - "$serde_json::private::Number": "-8433082582139094654" + "$serde_json::private::Number": "1391463276" }, "upper": { - "$serde_json::private::Number": "7104471852400005179" + "$serde_json::private::Number": "3395083635" } } } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, - "0": "NoneStats", - "1": { - "lower": { - "$serde_json::private::Number": "153" - }, - "upper": { - "$serde_json::private::Number": "153" - } + "0": { + "lower": "40c12e0ffd29cea8906c063fbbadf48a", + "upper": "ed137417be50d5775d902c0b70411360", + "kind": "uuid" }, - "2": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - } + "1": "NoneStats", + "2": "NoneStats" } } }, { - "len": 2, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" }, "0": { "lower": { - "$serde_json::private::Number": "3043517316236399533" + "$serde_json::private::Number": "278329882" }, "upper": { - "$serde_json::private::Number": "3731610481597045906" + "$serde_json::private::Number": "3065790458" } }, "1": { "lower": { - "$serde_json::private::Number": "151387149" + "$serde_json::private::Number": "-1480948587" }, "upper": { - "$serde_json::private::Number": "3304661678" + "$serde_json::private::Number": "1363419549" } } } } }, { - "len": 3, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "597807792" }, - "not nulls": "NoneStats" - }, - "1": { - "lower": "0000084524b64508", - "upper": "000076472e1c65c8", - "kind": "packed-time" + "upper": { + "$serde_json::private::Number": "2333817556" + } } } } }, { - "len": 1, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" }, "0": { - "lower": "6074c74ff28b3153298efc2e16c39e8a", - "upper": "6074c74ff28b3153298efc2e16c39e8a", - "kind": "uuid" - }, - "1": { - "lower": { - "$serde_json::private::Number": "18102604138553773179" - }, - "upper": { - "$serde_json::private::Number": "18102604138553773179" - } + "lower": "10000000f6ffffff0c01ba022d025902060205000000000000000000000000000000800000000000", + "upper": "050000000000000014032b0000000000000000000000000000000000000000000000000000000000", + "kind": "packed-numeric" } } } }, { - "len": 2, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" }, "0": { - "lower": "x悱\\𓱩󳋎&:[涥\n¥'*:.3\n:¥{󾣥/;&~'🕴󿤛𧥒{{/e:F\"%G󕄂🕴\"n🕴:񲒒\rȺ򙴑*&\u000b!GmD򤅷", - "upper": "í*`\t򤁻🕴\u0000vu:?\nȺ\r🕴(" + "lower": "8000fe72000000a90000f24807d7a508", + "upper": "8003f1910000002b0000b4032c9e0710", + "kind": "packed-date-time" + }, + "1": { + "lower": { + "$serde_json::private::Number": "1194054507" + }, + "upper": { + "$serde_json::private::Number": "3115382876" + }, + "nulls": { + "$serde_json::private::Number": "2" + } + }, + "2": { + "lower": { + "$serde_json::private::Number": "34178" + }, + "upper": { + "$serde_json::private::Number": "62073" + } } } } }, { - "len": 2, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, - "0": "NoneStats" + "0": "NoneStats", + "1": { + "lower": { + "$serde_json::private::Number": "840685728" + }, + "upper": { + "$serde_json::private::Number": "840685728" + } + } } } }, { - "len": 7, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "1" }, "0": { - "lower": { - "$serde_json::private::Number": "-31570" - }, - "upper": { - "$serde_json::private::Number": "31667" + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "1" } } } @@ -623,32 +744,50 @@ expression: all_stats "len": { "$serde_json::private::Number": "2" }, - "0": "NoneStats" + "0": "NoneStats", + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + }, + "2": { + "lower": { + "$serde_json::private::Number": "4633314081222212915" + }, + "upper": { + "$serde_json::private::Number": "6409331419635207367" + } + } } } }, { - "len": 3, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" }, - "0": "NoneStats", - "1": { - "lower": "b289220555bffc4cd7ce0d88e8c9b602", - "upper": "db6b0fc6271bcbcb247e163b7fa56c3d", + "0": { + "lower": "46e9df911c808baf81b139301a1b893b", + "upper": "f945ef1abd92943397ee32863c7ec028", "kind": "uuid", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } + }, + "1": { + "lower": "56092b6aa3991efc7b121076d79b1c09", + "upper": "f5050a3dcafc0eeecd2843d6fce506f6", + "kind": "uuid" } } } @@ -668,376 +807,340 @@ expression: all_stats "$serde_json::private::Number": "4" }, "0": { - "lower": "1Ø{\u001b`=Ⱥ,𜏋#}\u001b𧞏􍦗h:𡦁𡀒򪷐s𜛉?.bѨ`|󟺜?lȺII\"{ ", - "upper": "񒍆.y'%P󝚝‮\u000b\rȺRË񟱥𵞾:\u0000񐃫\".񉪩�\\'򕀫􅞍M𲁻󒋸*􅺪‮$ !" + "lower": "4c281f025cfca16934f37c25ea4f5bdb", + "upper": "cd0d50f50ac3be26e8c54e617b828e48", + "kind": "packed-interval" } } } }, { - "len": 5, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "5" - }, - "0": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "1" }, + "0": "NoneStats", "1": { "lower": { - "$serde_json::private::Number": "3355051" + "$serde_json::private::Number": "81" }, "upper": { - "$serde_json::private::Number": "74573279" + "$serde_json::private::Number": "81" } + }, + "2": { + "lower": "800353bd00000011000117d12be292c8", + "upper": "800353bd00000011000117d12be292c8", + "kind": "packed-date-time" } } } }, { - "len": 1, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" }, "0": { "lower": { - "$serde_json::private::Number": "65193475" + "$serde_json::private::Number": "-3.953443748762773e115" }, "upper": { - "$serde_json::private::Number": "65193475" + "$serde_json::private::Number": "1.8694434268817752e289" } - }, - "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - }, - "2": { - "lower": "000089040972ea30", - "upper": "000089040972ea30", - "kind": "packed-time" } } } }, { - "len": 4, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "4" - }, - "0": "NoneStats", - "1": { - "lower": { - "$serde_json::private::Number": "2246032592220312230" - }, - "upper": { - "$serde_json::private::Number": "2846063914770108623" - }, - "nulls": { - "$serde_json::private::Number": "2" - } + "$serde_json::private::Number": "2" }, - "2": { + "0": { "lower": { - "$serde_json::private::Number": "314803133426017424" + "$serde_json::private::Number": "1745876254397756008" }, "upper": { - "$serde_json::private::Number": "18403273626286727638" + "$serde_json::private::Number": "11745372834313329855" } } } } }, { - "len": 5, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" }, - "0": "NoneStats", - "1": "NoneStats", - "2": "NoneStats" + "0": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 5, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" }, - "0": "NoneStats", - "1": { - "lower": "1b6f1963134fe221897b09fbf51534ca", - "upper": "e284e389b4e73ec6f26f2208a6ef1500", - "kind": "uuid" + "0": { + "lower": { + "$serde_json::private::Number": "-1620" + }, + "upper": { + "$serde_json::private::Number": "11375" + }, + "nulls": { + "$serde_json::private::Number": "1" + } }, - "2": "NoneStats" + "1": { + "lower": "38e979c2a3df21427c1ab5d34dc5724d62ec8fc6747f6117c47fe6ec3ba832dce7662fc808df5b0b30c217fdced390a2fc1a968f91d79a31b1959a81cc0a4f62a4ff0b61638fe69240b61dc10860d318509d35fe8494a9f874d3f08a46dac77e5c5e2159", + "upper": "fd2707f286c7b7dbbc835e23eddfeab58379dcbfecd39e16819a6f0430c34014f835b9bd76af9c63d08eb417ac090cb49173ffa1bf7115838a6708dc63e5c079d502b8febac019cc1bc21ffc5b892ed2524cff38acaf1cc0ded6a03afe19f5d84825cb0b" + } } } }, { - "len": 2, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, "0": { "lower": { - "$serde_json::private::Number": "1611616693488633398" + "$serde_json::private::Number": "10870715375904205302" }, "upper": { - "$serde_json::private::Number": "18399895025648337987" + "$serde_json::private::Number": "10870715375904205302" } }, - "1": "NoneStats" + "1": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "2": "NoneStats" } } }, { - "len": 5, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" }, "0": { + "lower": "¥𷤤󔵨\\&.Q._*뾊?�-sO" + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" }, "1": { - "lower": "\r\u0000񉲿´Ⱥ\\'‰{󱫪i\n🕴/𝉥‮&%=󛜏\u000b_򉩹.󜦪\nt\u000b<%𞚀񜰺􂧿𶈶?t\ti\u000bX{/:0𜓃\u000b𷥰򛶐`", - "upper": "Ⱥqp򸽡:󶛋󈏁🕴%󃳆ⴅ`�\\�\u0000.f򡦭{=Ü󝡩", - "upper": "Z¥񐧽ጘ'\n<@$\\=\u001b쩧\u000b.W&򏌱,񮻞Ѩ󹢣񮈒🕴.𴱕:/𘴋‡:YѨ‮􊇮H`wѨ\u0000\u001b󖖃>{=Ü󝡩＀" - }, - "1": { "lower": { - "$serde_json::private::Number": "2086041897" + "$serde_json::private::Number": "-24392" }, "upper": { - "$serde_json::private::Number": "2086041897" + "$serde_json::private::Number": "14139" } } } } }, { - "len": 6, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "lower": "11000000f4ffffff4d037901b1018f00f60218000000000000000000000000000000800000000000", + "upper": "11000000f5ffffff3a01390247006e0115032b000000000000000000000000000000000000000000", + "kind": "packed-numeric" }, "1": { + "lower": "񅩶ˆ", + "upper": "񅩶ˆ", + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "2": { "lower": { - "$serde_json::private::Number": "371299580" + "$serde_json::private::Number": "-6293847767067970050" }, "upper": { - "$serde_json::private::Number": "3359342724" + "$serde_json::private::Number": "-4980837242571930608" } } } } }, { - "len": 1, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" }, "0": { "lower": { - "$serde_json::private::Number": "4813585835047269228" + "$serde_json::private::Number": "35337167" }, "upper": { - "$serde_json::private::Number": "4813585835047269228" + "$serde_json::private::Number": "3362303966" } }, "1": { "lower": { - "$serde_json::private::Number": "4101429033" + "$serde_json::private::Number": "60118760" }, "upper": { - "$serde_json::private::Number": "4101429033" + "$serde_json::private::Number": "3554057788" + }, + "nulls": { + "$serde_json::private::Number": "1" } }, "2": { "nulls": { "$serde_json::private::Number": "0" }, - "not nulls": "NoneStats" + "not nulls": "json_mixed" } } } }, { - "len": 3, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" }, "0": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - }, - "1": { "lower": { - "$serde_json::private::Number": "2001767750" + "$serde_json::private::Number": "84" }, "upper": { - "$serde_json::private::Number": "3256622669" + "$serde_json::private::Number": "84" } } } } }, { - "len": 3, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "2" + }, + "0": { + "lower": { + "$serde_json::private::Number": "14892015" + }, + "upper": { + "$serde_json::private::Number": "88926346" + } }, - "0": "NoneStats", "1": { - "lower": "\u000b󽫕*@:/*`\rH򐇅=Qâ򆀯𝢆\u001b󩄾»Q\u001b\\d\n5,򊪊RSx\\ú🕴?򐙖Ѩ𷚜\"\u000b􃔰]V񥒣EË\u0006=�", + "upper": "‮" } } } }, { - "len": 3, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" }, - "0": "NoneStats", - "1": { + "0": { "lower": { - "$serde_json::private::Number": "-1315813273" + "$serde_json::private::Number": "26026" }, "upper": { - "$serde_json::private::Number": "-12185291" + "$serde_json::private::Number": "40344" } }, - "2": { + "1": { "lower": { - "$serde_json::private::Number": "1218266211" + "$serde_json::private::Number": "-2145814024" }, "upper": { - "$serde_json::private::Number": "3641482068" + "$serde_json::private::Number": "753731072" } - } + }, + "2": "NoneStats" } } }, { - "len": 5, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" }, - "0": { - "lower": "", - "upper": "􄅁:*Q]&$", - "nulls": { - "$serde_json::private::Number": "2" - } + "0": "NoneStats", + "1": { + "lower": "8002d19f0000016b000147c70fb44380", + "upper": "800369cf0000006900013fbc1554ad98", + "kind": "packed-date-time" } } } }, { - "len": 7, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" }, "0": { - "lower": "00003cfb0d4ed470", - "upper": "00013461150bb200", - "kind": "packed-time" - }, - "1": { - "lower": "", - "upper": "�Í󣖡]" + "lower": "\u000b⾭¥\"񤧠Ѩn(񨢼:\u001bѨ򠡟.7$󇓐/<\b\u0003򗺏\t򈪠", + "upper": "🕴<`ä=" } } } }, { - "len": 1, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" }, "0": { - "lower": false, - "upper": false + "lower": { + "$serde_json::private::Number": "-1399110579" + }, + "upper": { + "$serde_json::private::Number": "1299292910" + }, + "nulls": { + "$serde_json::private::Number": "1" + } }, "1": "NoneStats" } } }, { - "len": 5, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "5" - }, - "0": { - "lower": "25000000010000007900f9023b024c01260011003e01eb00b50050029d0225020500800000000000", - "upper": "2700000000000000af02b603fe026e00b802ac036903b60385026f013400f2026d00000000000000", - "kind": "packed-numeric" + "$serde_json::private::Number": "4" }, + "0": "NoneStats", "1": { - "lower": "5686a329b7bf9de196080fdcd2037a65dd21a870dedf911c93fe153f3dd0b0a29e6f381b3c901ac202bf8ae832245c7906dd2e06272f54384912ffbcc9ce2dd036c5254f12a5b58462038198973406f5d808609e32f1a6b417b744dafae2faccaf0de1b5", - "upper": "c54fc6c2f71826b783008eab33ddf67377a18d3ac2a155959b6e1ba385b433e8969b3f82f7a2e15dd090dbabedd29502b003ec4f0ead2f709e26e0289834efa5f35bd4b97f124f22e621d6a914fb95e2e3c2470b7b307e53f968c5967c86e966a05b735c" - }, - "2": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + "lower": "/\u001b\u001b\u000bE:%D\r\n\t򃢘?\\=O䔕¥🕴$𷆸\\`:0\u000b\u0000v󅳍{(¥‮t\\򋬷򪨱D&&*🕴$\"\t.\rHȺ𠰛q", + "upper": "🕴\\񺁽 $" } } } }, { - "len": 7, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "7" - }, - "0": { - "lower": "\u000b=", - "upper": "򜴀=$'‮򠉜&\u0000󐕜񿳹Ѩ" + "$serde_json::private::Number": "2" }, + "0": "NoneStats", "1": { - "lower": { - "$serde_json::private::Number": "330223140" - }, - "upper": { - "$serde_json::private::Number": "4057867197" - } - }, - "2": { - "lower": { - "$serde_json::private::Number": "14100576" - }, - "upper": { - "$serde_json::private::Number": "80201782" - } + "lower": "\u001b&Ѩ􆕮`Ⱥ2𫛆=\tM.=", + "upper": "Ѩ𤳟?0‮󛧪Ѩs%\t'񶔘Ⱥ󕌟𹲆\u001bõ�?\u0000%3򜤦䳑‮\u0006" } } } }, { - "len": 3, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "3" - }, - "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "5" }, - "1": { - "lower": { - "$serde_json::private::Number": "249269006" - }, - "upper": { - "$serde_json::private::Number": "2759818920" - } - } + "0": "NoneStats" } } }, { - "len": 4, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" }, "0": { - "lower": { - "$serde_json::private::Number": "11661526291988888646" - }, - "upper": { - "$serde_json::private::Number": "17132052649423040078" - } - }, - "1": { - "lower": "7fffef5d00000080000085702f28ebf8", - "upper": "8002b961000001020001114114e2ae00", - "kind": "packed-date-time" - }, - "2": { - "lower": { - "$serde_json::private::Number": "0.0" + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "3.5080477e-28" - } + "not nulls": "json_mixed" } } } }, { - "len": 1, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" }, "0": { + "lower": "%'{$,🕴Y&\u001b&\u000b@`󼫡", + "upper": "󥨸N%􆑠\"¥.[\"Z{\\\u000bhh‮􂘉\u000bi", "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "2" + } + }, + "1": { + "nulls": { + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" + }, + "2": { + "lower": { + "$serde_json::private::Number": "29" + }, + "upper": { + "$serde_json::private::Number": "142" + } } } } @@ -3504,62 +3554,79 @@ expression: all_stats "$serde_json::private::Number": "1" }, "0": { - "lower": false, - "upper": false, - "nulls": { - "$serde_json::private::Number": "1" + "lower": { + "$serde_json::private::Number": "1056112910" + }, + "upper": { + "$serde_json::private::Number": "1056112910" } } } } }, { - "len": 5, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" }, "0": { - "lower": "\t󜶶F2^\t롷򨧮񧡒򥐟‮?%?8i\u000bѨo\u0007ȺK.", - "upper": "󶍟蜼^%M‮🕴`¦/=1" + "lower": { + "$serde_json::private::Number": "1018944376162902898" + }, + "upper": { + "$serde_json::private::Number": "1018944376162902898" + } + }, + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + }, + "2": { + "lower": "?ȺXN¯%\t\\Ѩ¥󆍬􂯡\t{𷯎񵤤%\u0000x:🕴?񐁾\"ѨBC", + "upper": "?ȺXN¯%\t\\Ѩ¥󆍬􂯡\t{𷯎񵤤%\u0000x:🕴?񐁾\"ѨBC" } } } }, { - "len": 4, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" }, - "0": "NoneStats", - "1": { + "0": { "lower": { - "$serde_json::private::Number": "-1403625960" + "$serde_json::private::Number": "654881268" }, "upper": { - "$serde_json::private::Number": "1750067534" + "$serde_json::private::Number": "1488904557" + }, + "nulls": { + "$serde_json::private::Number": "1" } }, - "2": { + "1": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" } @@ -3567,51 +3634,54 @@ expression: all_stats } }, { - "len": 7, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "1" }, - "0": "json_mixed" + "0": "NoneStats" } } }, { - "len": 6, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" }, "0": { - "lower": "09de79241a8140559c23eb46ff8942e3", - "upper": "e1dd6329da9ae3f5264391a16eded831", - "kind": "uuid", - "nulls": { - "$serde_json::private::Number": "3" - } - }, - "1": { "lower": { - "$serde_json::private::Number": "6943119" + "$serde_json::private::Number": "-1710896" }, "upper": { - "$serde_json::private::Number": "74825968" + "$serde_json::private::Number": "85559112" + }, + "nulls": { + "$serde_json::private::Number": "2" + } + }, + "1": "NoneStats", + "2": { + "lower": false, + "upper": true, + "nulls": { + "$serde_json::private::Number": "1" } } } @@ -3636,344 +3706,335 @@ expression: all_stats "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" - } + }, + "1": { + "lower": { + "$serde_json::private::Number": "-0.0" + }, + "upper": { + "$serde_json::private::Number": "9.270998205622488e301" + } + }, + "2": "json_mixed" } } }, { - "len": 7, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" }, "0": { - "lower": "000002e430a84898", - "upper": "00013f2b24237ed0", - "kind": "packed-time" + "lower": "8002750c000000e5000006203a75a320", + "upper": "8003c8ce0000013e0000cabd33363ac0", + "kind": "packed-date-time" }, "1": { - "lower": "*ꆦj${𿯢3\\$rá'%q𯽔‮Ò𜋋𝼮\b񪊋", - "upper": "\u0006dѨ4󻖄\u0007󁈢Ⱥ<$_:Ä򜢐�\u001b<<Ç\r񭖫򷪗", + "lower": { + "$serde_json::private::Number": "554197839" + }, + "upper": { + "$serde_json::private::Number": "3890043963" + }, "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, "2": { - "lower": "800002950000016400009e121b3e8490", - "upper": "8003e2cb000000670000d16917c4a010", - "kind": "packed-date-time", "nulls": { - "$serde_json::private::Number": "2" - } + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } }, { - "len": 4, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "6" }, "0": { + "lower": "01000000000000000000000000000000000000000000000000000000000000000000c00000000000", + "upper": "10000000f6ffffff4b030a00fb02ba01bf0207000000000000000000000000000000000000000000", + "kind": "packed-numeric" + }, + "1": { "lower": { - "$serde_json::private::Number": "1847233" + "$serde_json::private::Number": "16870145" }, "upper": { - "$serde_json::private::Number": "80199775" - }, - "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "64018304" } } } } }, { - "len": 6, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" }, "0": { "lower": { - "$serde_json::private::Number": "58" + "$serde_json::private::Number": "0.0" }, "upper": { - "$serde_json::private::Number": "218" + "$serde_json::private::Number": "0.14020573" } }, "1": { - "lower": { - "$serde_json::private::Number": "5275140" - }, - "upper": { - "$serde_json::private::Number": "68904646" - }, - "nulls": { - "$serde_json::private::Number": "2" - } - }, - "2": { - "lower": "\u0004z')􇩳\u0000E\u0000&T\u0000(¿*\r𕔡�󃓴Ⱥo\"ø𐇒", - "upper": "󄆖I\\i&*%.UA*Ѩ1󛔖" + "lower": "\u0000–u񞬨�\u0005\u000b{Ѩ/.", + "upper": "򘖗" } } } }, { - "len": 6, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "6" - }, - "0": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "1" }, + "0": "NoneStats", "1": { - "lower": { - "$serde_json::private::Number": "-29001" - }, - "upper": { - "$serde_json::private::Number": "31667" - } - } + "lower": "06000000000000006e024e0300000000000000000000000000000000000000000000800000000000", + "upper": "06000000000000006e024e0300000000000000000000000000000000000000000000800000000000", + "kind": "packed-numeric" + }, + "2": "NoneStats" } } }, { - "len": 1, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" }, "0": { "lower": { - "$serde_json::private::Number": "1.2482121e20" + "$serde_json::private::Number": "14100918870750506209" }, "upper": { - "$serde_json::private::Number": "1.2482121e20" + "$serde_json::private::Number": "17784896592127540530" + }, + "nulls": { + "$serde_json::private::Number": "1" } }, "1": { - "lower": ".󌣍􂫸%*\\\u000bѨB'�\u0000rG/{󵐉/\r%󅭋%ZȺ==𕼁Œ󽴪\u0003򤒕\t", - "upper": ".󌣍􂫸%*\\\u000bѨB'�\u0000rG/{󵐉/\r%󅭋%ZȺ==𕼁Œ󽴪\u0003򤒕\t" + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" }, "2": { "lower": { - "$serde_json::private::Number": "-1153" + "$serde_json::private::Number": "2978403580771005790" }, "upper": { - "$serde_json::private::Number": "-1153" + "$serde_json::private::Number": "14753542447410997950" } } } } }, { - "len": 5, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "6" }, "0": { - "lower": { - "$serde_json::private::Number": "-1596022559" - }, - "upper": { - "$serde_json::private::Number": "290979207" - } + "lower": "260dda1af352e3807113f94f7deaf1a9", + "upper": "d78ab841b49d19b2ae361e8d943671b8", + "kind": "uuid" }, - "1": "NoneStats", - "2": "NoneStats" + "1": { + "lower": "G񵻷*~=򴞖", + "upper": "􁮻󽈷ú'r\u001b: %񈝝\r\u001b򞈍\u0005\r<*Ⱥ󒕶\b*t" + } } } }, { - "len": 4, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" }, "0": { - "lower": "\"񗗿󺥜񔴞$\u0003𥾶Ѩ𿂠򴅏򇹝Q\\=ê\u0003¦R9𽐅🕴|?/AB\u0003$", - "upper": "󏭌򩡬\r$\u001b󡊖@Z?*󜭖<`\u001b?5\u0003y5Ⱥ<", - "upper": "񟕇\u001b*G򿋫%?cl󺺖Ѩ\u0000Q%*�/�'`\\d\b" } } } }, { - "len": 6, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" }, "0": { "lower": { - "$serde_json::private::Number": "-4.2971744e22" + "$serde_json::private::Number": "29" }, "upper": { - "$serde_json::private::Number": "1.3496779e33" + "$serde_json::private::Number": "252" }, "nulls": { "$serde_json::private::Number": "1" } - } - } - } - }, - { - "len": 2, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "2" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "2" }, - "0": "NoneStats", "1": { - "lower": { - "$serde_json::private::Number": "8331880648005145205" - }, - "upper": { - "$serde_json::private::Number": "16303173955007040858" - } - } - } - } - }, - { - "len": 1, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "1" - }, - "0": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" }, - "1": { - "lower": { - "$serde_json::private::Number": "3002239026554306855" - }, - "upper": { - "$serde_json::private::Number": "3002239026554306855" - } - } + "2": "NoneStats" } } }, @@ -5764,62 +5756,22 @@ expression: all_stats }, "0": { "lower": { - "$serde_json::private::Number": "-8532854741257834161" + "$serde_json::private::Number": "470406" }, "upper": { - "$serde_json::private::Number": "5121637496556164730" + "$serde_json::private::Number": "88752756" } }, "1": { - "lower": { - "$serde_json::private::Number": "-1.6012880691360274e166" - }, - "upper": { - "$serde_json::private::Number": "-5.558375889670458e-243" - }, - "nulls": { - "$serde_json::private::Number": "3" - } + "lower": "7fffee1e0000009a00012f9203b62260", + "upper": "80038a3c000000ab0000363a2aa213e8", + "kind": "packed-date-time" }, "2": { "nulls": { "$serde_json::private::Number": "1" }, - "not nulls": "json_mixed" - } - } - } - }, - { - "len": 2, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "2" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "2" - }, - "0": { - "lower": "22aaa984b85593af0259ec046c395b3c41f9f2e20dd3ee75196843f1ea3802f430536205153994ccb722e645a23d4b74a06797a00e6a7147bd288e33f9b4585edcfbb2495c0c0c6de5e9d51ab83bc8f52a3d38fcc67e9892bed5d6a3d444b6c00b200fd7", - "upper": "6e3e0a1391df418542fd19b47e9d064a202dda931d93ba6f240735dd81911b1436cbc904c74ae6476ca57206d49f2611eb3ea369eae21d001d1cdf8684ce82f8c25464e756fd4786991a1e426da447c9a1948abb779f6cfecb4e305e87ceec4224eb1b20" - }, - "1": { - "lower": { - "$serde_json::private::Number": "3979218745160321138" - }, - "upper": { - "$serde_json::private::Number": "4620195713699699972" - } - }, - "2": { - "lower": "80018a730000009e0000f0cf135900c0", - "upper": "80023bd8000000ed00000e0c28bea618", - "kind": "packed-date-time" + "not nulls": "NoneStats" } } } @@ -5839,116 +5791,97 @@ expression: all_stats "$serde_json::private::Number": "4" }, "0": { - "lower": "1d8dd545bb959c5fd9ea1869cb934cde", - "upper": "496b539d961718c6a37053c3730c2426", - "kind": "packed-interval" - }, - "1": { - "lower": { - "$serde_json::private::Number": "149" + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "255" - } + "not nulls": "NoneStats" }, + "1": "NoneStats", "2": { - "lower": "", - "upper": "񻣼𘧂深-\r𬍲\u0002\u0001{𵑱?%𽐠񇤇&瞷񲀅?�.󜀙򮢐‮<\t", "nulls": { "$serde_json::private::Number": "1" - } + }, + "not nulls": "NoneStats" } } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "0": { "nulls": { "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" - }, - "1": { - "lower": "03000000feffffff4301000000000000000000000000000000000000000000000000000000000000", - "upper": "03000000feffffff4301000000000000000000000000000000000000000000000000000000000000", - "kind": "packed-numeric" } } } }, { - "len": 2, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, "0": { "lower": { - "$serde_json::private::Number": "5756667059855142301" + "$serde_json::private::Number": "-5009590010480303024" }, "upper": { - "$serde_json::private::Number": "16555175289461743499" + "$serde_json::private::Number": "-5009590010480303024" } }, "1": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - }, - "2": { "lower": { - "$serde_json::private::Number": "5131698937285174580" + "$serde_json::private::Number": "2564670821" }, "upper": { - "$serde_json::private::Number": "7093918845065244824" + "$serde_json::private::Number": "2564670821" } - } + }, + "2": "NoneStats" } } }, { - "len": 2, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "5" }, "0": { - "lower": { - "$serde_json::private::Number": "676650489" + "nulls": { + "$serde_json::private::Number": "0" }, - "upper": { - "$serde_json::private::Number": "2121137409" - } + "not nulls": "NoneStats" }, "1": { "nulls": { @@ -5958,32 +5891,43 @@ expression: all_stats }, "2": { "lower": { - "$serde_json::private::Number": "168854761" + "$serde_json::private::Number": "1800255756" }, "upper": { - "$serde_json::private::Number": "746456858" + "$serde_json::private::Number": "4114156555" + }, + "nulls": { + "$serde_json::private::Number": "1" } } } } }, { - "len": 3, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "7" }, "0": { + "lower": { + "$serde_json::private::Number": "1930041671652353672" + }, + "upper": { + "$serde_json::private::Number": "18016619407728024990" + } + }, + "1": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "2" }, "not nulls": "NoneStats" } @@ -5991,48 +5935,40 @@ expression: all_stats } }, { - "len": 2, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "2" - }, - "0": { - "lower": "?; /@$:铕\u0003%", - "upper": "񮆟#񕇤𿬆$r\"\":/C񱭾󪵜󿌢¥0$\r" + "$serde_json::private::Number": "4" }, - "1": "NoneStats" + "0": "NoneStats" } } }, { - "len": 4, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" }, "0": { - "lower": { - "$serde_json::private::Number": "62144029530067148" - }, - "upper": { - "$serde_json::private::Number": "14968443240155492176" - }, + "lower": true, + "upper": true, "nulls": { "$serde_json::private::Number": "1" } @@ -6041,126 +5977,448 @@ expression: all_stats } }, { - "len": 7, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "1" }, - "0": "NoneStats" - } - } - }, - { - "len": 2, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "2" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "2" + "0": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" }, - "0": "json_mixed" + "1": "NoneStats", + "2": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 6, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" }, "0": "NoneStats" } } }, { - "len": 7, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "3" }, "0": { - "lower": "\u0000ѨȺ򦦉Ë{񩭢䛝&-과񄸗ýȺ\\\n*ö򘥌򂄦¶¥􇇕Ö±÷*󇿘𘼯\\�\\񱄣Ⱥ:򁛡񺾣::\r񛬮�\r", - "upper": "򟡕&¥\u000bl*T{󤭫󏋐\u000b\n񀋄\"🕴򯥂𜨼š񟊉񗶼\u000b]􋐲Ѩ񟴽𠵺\n􃾱Ⱥ…C񘆅*=Y\\^%󑛗𮶝", - "nulls": { - "$serde_json::private::Number": "2" + "lower": { + "$serde_json::private::Number": "2391383343" + }, + "upper": { + "$serde_json::private::Number": "4270886173" + } + }, + "1": { + "\u0000\t.*󸪶󵀓𡌑‮\u0002.%&.f{󿀲\u000b": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": "$‮𔙼񉏓j\t󀳻`", + "upper": "<;󤜤\\\"Ѩ`Y$.>j\t󀳻`" + } + }, + "H\\\u0005b‮󾤡\u0003$񔠸&󟾓򓳭p\t򆕾뵕w𱚸𬁚󟺮Le񋧜s": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": "c201160a14343383270247912450000000000000000000000c", + "upper": "c201160a14343383270247912450000000000000000000000c" + } + }, + "Oc^F?^¥򄩚򪩷&%:%񕲧\\\t?/瀢": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": "json_nulls" + }, + "Y\u000b\tVh򑉻򞖊�¥\r\u0000Ⱥ:h\u001b\\<:{%h󳠐&򖁠=򨹇H񈱉": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": "$q\u0001l밴/G==*󄻑\u0005", + "upper": "$q\u0001l밴/G==*󄻑\u0005" + } + }, + "]\u0000Ⱥ/𘑆`󇯫k&\u001b\t򫑕񵰜\u0003\r{": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": "json_nulls" + }, + "¥\u0000񸥥{򢵻񄒆<\tt\u001bý򔷪T<{\u0002!򖪉Kñi.\"‮I*\tѨL8Y": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": false, + "upper": false + } + }, + "ò_K\u0006\"{/\"=u\u0000`‮Ѩu.‮": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": "json_nulls" + }, + "򋨪M񮣴::8񣛪\"Qo'&’0`e🕴\\+\u001b?c󞏛‮": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": "c201160a14576722654286322340000000000000000000000c", + "upper": "c201160a14576722654286322340000000000000000000000c" + } + }, + "򰉃򔛅\t(񗢊î$Ìw+M\t\b\u001b*􍷛\\󠖒7򋂁\u0000j\t": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": true, + "upper": true + } + }, + "󿷛`\u001b�$󅜬\u001b󩷁\u0000?eÏ𺓦󒻛(?񽜲‮\t\t": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": false, + "upper": false + } + } + } + }, + "\\\u000b*ȺѨ\b\u001b�'䠦򙐠./&o<{'": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": false, + "upper": false + } + }, + "𜂷.{\u0000Z�𣧧a­\u000bU$.{<¶)񊐥": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": "`Ⱥ󸮰\u0007\t1$'JX", + "upper": "`Ⱥ󸮰\u0007\t1$'JX" + } + }, + "¥\u0007&h󢒍\"\u0001󌟣&򸃭󉎏񬩼\u0007\t񱲳G\\񿚡e\u0000\"?": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": "򉀺/򈂲", + "upper": "򉀺/򈂲" + } + }, + "=񊊣‮{*?&\u000b\u001b@g\u0002� %?\u0000*%:&uѨE\u001b\\": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": "P𪊻񎎴Q?􀧅Xê \t*$󑷩`Ⱥ\bl*򚨾\b🕴'", + "upper": "P𪊻񎎴Q?􀧅Xê \t*$󑷩`Ⱥ\bl*򚨾\b🕴'" + } + }, + "`.\u000b3*.\n򊭪2򣞞.\u0000󘠥򩓻*=\n}󉋤{M—򙼰򣂛\n𡣣򫍖]󕖋񏆫𛢜@:?\u001b:m\u0000\t.¥yp/p\u000bD\n:/" } } } }, { - "len": 5, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" }, "0": { - "lower": "00a10e6770bd6eac596e8fc284322d4b", - "upper": "ec72c7c38b90396eababc665402bcdd1", - "kind": "packed-interval", - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "1": { - "lower": { - "$serde_json::private::Number": "-1.365847828247868e47" - }, - "upper": { - "$serde_json::private::Number": "1.0518975855994352e300" - } + "lower": "000060982f7fa330", + "upper": "0000e37a17b4b9c0", + "kind": "packed-time" } } } }, { - "len": 6, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "7" }, "0": { - "lower": false, - "upper": true + "nulls": { + "$serde_json::private::Number": "3" + }, + "not nulls": "NoneStats" + }, + "1": "NoneStats", + "2": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" } } } }, { - "len": 4, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" }, - "0": { - "lower": "\u001b\\&\u0000\u0000&:򱟯t\u000b3\\.ѨѨ*{\rÌ*Ѩm󆢔`\\`", - "upper": "Ѩ$򾏏񺲪|{*🕴\\$򮙈󆋶<񼌓=Ⱥu" + "0": "NoneStats", + "1": "NoneStats", + "2": { + "lower": ".񪲃c{:Ѩ]񻤃򢑅<Ⱥ%%\b򈊢?󀒜", + "upper": "�‮\bK:G񉹎\u0001񰡲򩈭G=}v:Ѩ?\r\\Ѩ񀂻\u000b%?=\"" } } } }, { - "len": 3, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "284310433646368018" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "14822500879460251695" + } }, - "1": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - } + "1": "NoneStats", + "2": "NoneStats" } } }, { - "len": 3, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - }, - "1": { - "lower": "\u0002\u0000&‮&,{&🕴D:\u0007򓐊\u000b\u001bȺ=/æ3\u000b\u0000", - "upper": "㮐?o/🕴a&:*񗮵𕕝񢭇?񻃆򓺧?`*Ѩ¥’`򊔿%\\¥:*.`L" + "lower": "?.\t‮n?q\",T<:\u000b:㰕<񊔯?*<{\\﬑ѨpJ%W񬨏\u001b`&\r\u001b󲁭񁯜=𾅍*’�񔸹0?/\u0000c/{\u0000:\u000b=<.𨦃񇽒", + "upper": "?.\t‮n?q\",T<:\u000b:㰕<񊔯?*<{\\﬑ѨpJ%W񬨏\u001b`&\r\u001b󲁭񁯜=𾅍*’�񔸹0?/\u0000c/{\u0000:\u000b=<.𨦃񇽓" } } } }, { - "len": 1, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" }, "0": { - "lower": "0868a276d333bfd1b421291656d99a58", - "upper": "0868a276d333bfd1b421291656d99a58", - "kind": "uuid" - } - } - } - }, - { - "len": 3, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "3" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "3" + "lower": { + "$serde_json::private::Number": "409534183" + }, + "upper": { + "$serde_json::private::Number": "3891467636" + } }, - "0": { - "nulls": { - "$serde_json::private::Number": "0" + "1": { + "lower": { + "$serde_json::private::Number": "56834207" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "87867389" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "2": { + "lower": "", + "upper": "�&🕴򞺡¥l=\u0004񦋕𙻽w" } } } }, { - "len": 3, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" }, "0": { - "lower": "08000000f8ffffff210331023c000000000000000000000000000000000000000000000000000000", - "upper": "0600000000000000a1039b0300000000000000000000000000000000000000000000000000000000", - "kind": "packed-numeric", "nulls": { "$serde_json::private::Number": "1" - } - }, - "1": { - "lower": { - "$serde_json::private::Number": "1159813559" - }, - "upper": { - "$serde_json::private::Number": "3249319853" }, - "nulls": { - "$serde_json::private::Number": "1" - } + "not nulls": "NoneStats" }, - "2": "NoneStats" + "1": "NoneStats" } } }, { - "len": 3, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "3" - }, - "0": { - "lower": { - "$serde_json::private::Number": "-1434465032" - }, - "upper": { - "$serde_json::private::Number": "341616207" - } + "$serde_json::private::Number": "6" }, - "1": { - "lower": { - "$serde_json::private::Number": "57174" - }, - "upper": { - "$serde_json::private::Number": "60339" - }, - "nulls": { - "$serde_json::private::Number": "1" - } - } + "0": "NoneStats" } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "0": { "nulls": { @@ -7228,253 +7419,253 @@ expression: all_stats "$serde_json::private::Number": "3" }, "0": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + }, + "1": { "lower": { - "$serde_json::private::Number": "1177345" + "$serde_json::private::Number": "22678522" }, "upper": { - "$serde_json::private::Number": "62602630" + "$serde_json::private::Number": "91380598" } }, - "1": { - "lower": "02e3eee7b153b897e85c256d5ab07546", - "upper": "d2225c57b19861677b8f404c8eb90396", - "kind": "packed-interval" + "2": { + "lower": { + "$serde_json::private::Number": "2402058172" + }, + "upper": { + "$serde_json::private::Number": "3900624000" + } } } } }, { - "len": 4, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "6" }, "0": { - "lower": { - "$serde_json::private::Number": "212526387" - }, - "upper": { - "$serde_json::private::Number": "4145965841" - }, + "lower": "10000000f6fffffff302d1026a00af03d80308000000000000000000000000000000800000000000", + "upper": "0600000000000000ba01a70300000000000000000000000000000000000000000000000000000000", + "kind": "packed-numeric" + }, + "1": { "nulls": { "$serde_json::private::Number": "1" - } + }, + "not nulls": "NoneStats" } } } }, { - "len": 1, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" }, "0": { - "lower": false, - "upper": false + "lower": "57fa6abc63a37b34d83b4099b9d6710b47314a6976119d146184f2c18278903c2621924d89c68afb02de3ecb40dd8b4d2749d398161660cd1ec05a366c7c033d63d3f7199a3ded369bccd57d157efe02e5cb85c8568a3495a6a26a29bce76cf0e21b75d0", + "upper": "f14cee80f512d737df0c734b1bd5fad06a1265b82eba698f98b0751f4e70950a668a7ebb05054cc2fb4926437a8071eb35d7c7427546a9167e6736f2c207222f5e3f13a28941cfdd35d46af1644a1afc22226f036424b928168ae55caab464bdb597d8d8" + }, + "1": { + "lower": "*\r2􉆚'`\rW🕴K񨌈🕴", + "upper": "|t.~Tz`/?8%򹰠󢩛C\t{‮\\񝆿#$a:񁥜Ѩ񥴄" } } } }, { - "len": 4, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "3" }, "0": { - "lower": "00000cd921785818", - "upper": "00012aaf339cc0d8", - "kind": "packed-time" + "lower": { + "$serde_json::private::Number": "138517995" + }, + "upper": { + "$serde_json::private::Number": "2336519180" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "1": { + "lower": { + "$serde_json::private::Number": "-3.529343077903533e282" + }, + "upper": { + "$serde_json::private::Number": "1.18183868926479e192" + } } } } }, { - "len": 6, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" }, "0": { - "lower": { - "$serde_json::private::Number": "1880934680" - }, - "upper": { - "$serde_json::private::Number": "4207075408" - } - }, - "1": { - "lower": { - "$serde_json::private::Number": "26" - }, - "upper": { - "$serde_json::private::Number": "183" - }, "nulls": { - "$serde_json::private::Number": "1" - } + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" }, + "1": "NoneStats", "2": "NoneStats" } } }, { - "len": 4, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "4" - }, - "0": { - "lower": { - "$serde_json::private::Number": "6126812430782578475" - }, - "upper": { - "$serde_json::private::Number": "17327403535907905061" - } + "$serde_json::private::Number": "1" }, + "0": "NoneStats", "1": { "lower": { - "$serde_json::private::Number": "902578646" + "$serde_json::private::Number": "10231184767880570578" }, "upper": { - "$serde_json::private::Number": "3425428187" - }, - "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "10231184767880570578" } }, "2": { - "lower": "1a96881cd98cb439bc5b42dfbcf6410ac9e2c3c00348eb2d2e72ba6adb5d337f44216c2bb99994209f0eb4cac1137f5fff0ca4cf94617a167d3156fc72ab749f4cfd8b38587ac5af9df1051bfe86ef68503742ba70017b2940f7037796c5954165879b56", - "upper": "e293cbb2c66fa2b987b458e9d1be83b59dcc3f413309cf257610ab0aa9dc575862b5091d199b69f53261cbddd70f80cb5af03ab9dfeaacad06977264ba8cf371e120fdb742b512b6326b4e2df2ff13b8a1541737bd6e9d31ff34a7127fabedca34d60129", - "nulls": { - "$serde_json::private::Number": "1" - } + "lower": "0a0bb25465703bc0c599c0aa52417bee", + "upper": "0a0bb25465703bc0c599c0aa52417bee", + "kind": "packed-interval" } } } }, { - "len": 4, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "3" }, "0": { - "lower": { - "$serde_json::private::Number": "-4672817386978818289" - }, - "upper": { - "$serde_json::private::Number": "3577369605529328051" - }, - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "1": { - "lower": "8000492b000000fe00004bb20e723a18", - "upper": "8001f0aa000000db0001433804d58c80", - "kind": "packed-date-time" + "lower": "000053d20dade078", + "upper": "000064040dfa3f40", + "kind": "packed-time" } } } }, { - "len": 6, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "1" }, "0": "NoneStats", - "1": "NoneStats" + "1": { + "lower": "8002f1f2000000c1000009b219784768", + "upper": "8002f1f2000000c1000009b219784768", + "kind": "packed-date-time" + } } } }, { - "len": 3, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" }, "0": { - "lower": "/?F.🕴\"%7+y%/", - "upper": "n\u000b*%\u0000T\u0003\r*&‮񡾜\\\t.񫍙n4򊬰�¥" - }, - "1": { "lower": { - "$serde_json::private::Number": "2444387" + "$serde_json::private::Number": "6983592122968871354" }, "upper": { - "$serde_json::private::Number": "28292598" + "$serde_json::private::Number": "16709018259288467319" + }, + "nulls": { + "$serde_json::private::Number": "2" } }, + "1": { + "lower": "00004cb8271850e8", + "upper": "0001249929869d80", + "kind": "packed-time" + }, "2": { "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" } @@ -7497,17 +7688,22 @@ expression: all_stats }, "0": { "lower": { - "$serde_json::private::Number": "2159259549" + "$serde_json::private::Number": "17" }, "upper": { - "$serde_json::private::Number": "2895315002" + "$serde_json::private::Number": "56" } }, "1": { - "lower": "󨃠'` j§ž󪛞¸=.¥?/\b񘘂ä\t‮*ý\u001b-\r\\Ⱥ<%\u0005.=", - "upper": "󨃠'` j§ž󪛞¸=.¥?/\b񘘂ä\t‮*ý\u001b-\r\\Ⱥ<%\u0005.=", - "nulls": { - "$serde_json::private::Number": "1" + "lower": "*\u000bnX", + "upper": "{򿔖=𵉮񢊖򬒺e{�/򪲭j*?񶛫\u000b2?𣐮%?񥜱`񑠯/r", - "upper": "‮>=𵉮񢊖򬒺e{�/򪲭j*?񶛫\u000b2?𣐮%?񥜱`񑠯/r", - "nulls": { - "$serde_json::private::Number": "1" - } } } } @@ -7956,40 +8134,58 @@ expression: all_stats "len": { "$serde_json::private::Number": "5" }, - "0": "NoneStats", - "1": "NoneStats" + "0": { + "lower": { + "$serde_json::private::Number": "1366135064" + }, + "upper": { + "$serde_json::private::Number": "3710946334" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + } } } }, { - "len": 4, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "6" }, "0": { "lower": { - "$serde_json::private::Number": "42" + "$serde_json::private::Number": "270992895" }, "upper": { - "$serde_json::private::Number": "209" + "$serde_json::private::Number": "3861538081" + }, + "nulls": { + "$serde_json::private::Number": "1" } }, "1": { - "lower": "06000000faffffff0a01380200000000000000000000000000000000000000000000000000000000", - "upper": "10000000170000005500e30267036003900009000000000000000000000000000000000000000000", - "kind": "packed-numeric", + "lower": "4bf616924332c9e147b696e28beefced", + "upper": "dd3440d8e65321713570131cbb23ee2e", + "kind": "packed-interval", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } + }, + "2": { + "nulls": { + "$serde_json::private::Number": "4" + }, + "not nulls": "NoneStats" } } } @@ -8009,72 +8205,100 @@ expression: all_stats "$serde_json::private::Number": "3" }, "0": { - "lower": { - "$serde_json::private::Number": "4429806410107051116" - }, - "upper": { - "$serde_json::private::Number": "9448381620883381689" - } - } + "lower": "2O'", + "upper": "¥ⵇ¨\b𸊮l{" + }, + "1": "NoneStats" } } }, { - "len": 5, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "6" }, "0": { + "lower": "<=Y\n珷Ѩ󎍺\\iX􀩡򞩫¥𿸲Ⱥ񬬡'=𳎗{𐵥\u000b񱑗%🕴�\u0000‮򶔇È󒆊*Z󆜳:񖚉'򠊆𽟤.\n,", + "upper": "󺆴󾨭.^`񴩳:=`񏜩<򘿌$🕴\t‮\\VI`Ó񂗖􅧽\u0000RV􄐋<.\\R^A\rU񙢈:#x$��X▯<򑯮񙲞*C;" + }, + "1": { + "lower": "8001a190000000270000e78420424d00", + "upper": "8002ba8f0000004d000054c5157f8e28", + "kind": "packed-date-time" + }, + "2": { "nulls": { "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" + } + } + } + }, + { + "len": 6, + "cols": { + "err": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "6" + } + }, + "ok": { + "len": { + "$serde_json::private::Number": "6" }, - "1": { + "0": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" }, - "2": { + "1": { "nulls": { "$serde_json::private::Number": "1" }, - "not nulls": "json_mixed" + "not nulls": "NoneStats" } } } }, { - "len": 6, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" }, "0": { "lower": { - "$serde_json::private::Number": "22" + "$serde_json::private::Number": "154702818" }, "upper": { - "$serde_json::private::Number": "241" + "$serde_json::private::Number": "2835420938" } + }, + "1": { + "lower": "06000000000000006d00e80000000000000000000000000000000000000000000000800000000000", + "upper": "10000000f6ffffff3d008e000302a402d80108000000000000000000000000000000000000000000", + "kind": "packed-numeric" } } } @@ -8094,49 +8318,45 @@ expression: all_stats "$serde_json::private::Number": "1" }, "0": { - "lower": "10000000f6ffffff000137003a020d002f0308000000000000000000000000000000800000000000", - "upper": "10000000f6ffffff000137003a020d002f0308000000000000000000000000000000800000000000", - "kind": "packed-numeric" + "lower": "80000000800000008000000000000000", + "upper": "80000000800000008000000000000000", + "kind": "packed-interval", + "nulls": { + "$serde_json::private::Number": "1" + } }, - "1": { - "lower": "8001a1ef00000061000141131ffcc820", - "upper": "8001a1ef00000061000141131ffcc820", - "kind": "packed-date-time" - } + "1": "NoneStats" } } }, { - "len": 3, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" }, "0": { "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" }, "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "lower": true, + "upper": true }, "2": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "lower": "800049e70000016c0000e9d80d7c0aa8", + "upper": "800049e70000016c0000e9d80d7c0aa8", + "kind": "packed-date-time" } } } @@ -8155,29 +8375,63 @@ expression: all_stats "len": { "$serde_json::private::Number": "1" }, - "0": "NoneStats" + "0": { + "lower": { + "$serde_json::private::Number": "-486419942" + }, + "upper": { + "$serde_json::private::Number": "-486419942" + } + }, + "1": { + "lower": { + "$serde_json::private::Number": "-1.1858308937601765e-308" + }, + "upper": { + "$serde_json::private::Number": "-1.1858308937601765e-308" + } + } } } }, { - "len": 1, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" }, "0": { "nulls": { "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" + }, + "1": { + "lower": { + "$serde_json::private::Number": "6098570923198556658" + }, + "upper": { + "$serde_json::private::Number": "6098570923198556658" + }, + "nulls": { + "$serde_json::private::Number": "2" + } + }, + "2": { + "lower": { + "$serde_json::private::Number": "4663255012139488325" + }, + "upper": { + "$serde_json::private::Number": "12145220603504709524" + } } } } @@ -8197,22 +8451,8 @@ expression: all_stats "$serde_json::private::Number": "4" }, "0": { - "lower": { - "$serde_json::private::Number": "85622010" - }, - "upper": { - "$serde_json::private::Number": "2649831299" - } - }, - "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - }, - "2": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" } @@ -8220,35 +8460,20 @@ expression: all_stats } }, { - "len": 2, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, "0": { - "lower": { - "$serde_json::private::Number": "9224752737660660867" - }, - "upper": { - "$serde_json::private::Number": "9224752737660660867" - }, - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "1": { - "lower": "&񮌒&\\񠊒‮\u000bA𖴘󪜤<\u000b*𿮈9", - "upper": "}=-%i'P]wQ" - }, - "2": { "nulls": { "$serde_json::private::Number": "0" }, @@ -8258,37 +8483,20 @@ expression: all_stats } }, { - "len": 6, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "6" - }, - "0": { - "lower": { - "$serde_json::private::Number": "11560513" - }, - "upper": { - "$serde_json::private::Number": "91602420" - }, - "nulls": { - "$serde_json::private::Number": "2" - } + "$serde_json::private::Number": "7" }, - "1": { - "lower": "'ㅥ󝛁�<¥\u001b*\"Ⱥ$.񇲄\rr񥥁Ѩ&🕴򋲵¥򙸡𲕻1~?=Ⱥ\\!;ÆѨ", - "upper": "򈄣\u000b{&C?󅎮񰓋񣨫󸀒¥J\\\b?‮\b\r<򛒠u\u0005􉮆" + "$serde_json::private::Number": "6" }, - "2": { + "0": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "3" }, "not nulls": "NoneStats" + }, + "1": { + "lower": { + "$serde_json::private::Number": "-8468184659361089677" + }, + "upper": { + "$serde_json::private::Number": "8231674342019106880" + } } } } }, { - "len": 2, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "5" }, "0": { - "lower": { - "$serde_json::private::Number": "-1.1004993e-8" - }, - "upper": { - "$serde_json::private::Number": "6.206853e-39" - } - }, - "1": "NoneStats", - "2": { - "lower": { - "$serde_json::private::Number": "-1.2358454166971236e280" - }, - "upper": { - "$serde_json::private::Number": "-5.115892483652594e-153" - } + "lower": "27000000000000006a0300002902b6003e004c026d014a0394007e02ac0063017e00800000000000", + "upper": "01000000000000000000000000000000000000000000000000000000000000000000200000000000", + "kind": "packed-numeric" } } } }, { - "len": 6, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" }, "0": "NoneStats" } } }, { - "len": 4, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "4" - }, - "0": "NoneStats", - "1": { - "lower": ":W\r/Ef‮¥‹ &", - "upper": "?\"*/{\u000bT\u000bnѨ‮" + "$serde_json::private::Number": "2" }, - "2": { - "lower": { - "$serde_json::private::Number": "83" - }, - "upper": { - "$serde_json::private::Number": "235" - }, + "0": { "nulls": { - "$serde_json::private::Number": "1" - } + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } @@ -9561,48 +9682,48 @@ expression: all_stats "$serde_json::private::Number": "3" }, "0": { - "lower": "\\񩉒󳟿´\u001b*5“񒽲:󔇾-P", - "upper": "󳩛'󝼯D󸺇򠓖p|:\u001b򢏒ÿq" - }, - "1": { "lower": { - "$serde_json::private::Number": "10979" + "$serde_json::private::Number": "291404947" }, "upper": { - "$serde_json::private::Number": "30666" + "$serde_json::private::Number": "3671714417" } }, + "1": "NoneStats", "2": { "lower": { - "$serde_json::private::Number": "236355209864579586" + "$serde_json::private::Number": "1233984276" }, "upper": { - "$serde_json::private::Number": "12923265368412463350" + "$serde_json::private::Number": "1238092091" + }, + "nulls": { + "$serde_json::private::Number": "1" } } } } }, { - "len": 5, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" }, "0": { "lower": { - "$serde_json::private::Number": "2411833848283752905" + "$serde_json::private::Number": "-24682" }, "upper": { - "$serde_json::private::Number": "16576387996167096650" + "$serde_json::private::Number": "27773" } } } @@ -9623,46 +9744,11 @@ expression: all_stats "$serde_json::private::Number": "3" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - } - } - } - }, - { - "len": 5, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "5" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "5" - }, - "0": "NoneStats", - "1": { - "lower": { - "$serde_json::private::Number": "20407" - }, - "upper": { - "$serde_json::private::Number": "52939" - } - }, - "2": { "lower": { - "$serde_json::private::Number": "416674389" + "$serde_json::private::Number": "-1507082607" }, "upper": { - "$serde_json::private::Number": "3172100378" - }, - "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2045193584" } } } @@ -9682,121 +9768,164 @@ expression: all_stats "len": { "$serde_json::private::Number": "7" }, - "0": { - "lower": "80004145000000c70000e6ee17e829b8", - "upper": "8003ffe70000007000010d030ace9230", - "kind": "packed-date-time" - } + "0": "NoneStats", + "1": "NoneStats" } } }, { - "len": 5, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" }, - "0": "NoneStats" + "0": { + "lower": { + "$serde_json::private::Number": "-4565385381622585045" + }, + "upper": { + "$serde_json::private::Number": "-4565385381622585045" + } + }, + "1": { + "lower": "8001137e000000d7000144711384c3e0", + "upper": "8001137e000000d7000144711384c3e0", + "kind": "packed-date-time" + } } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "0": { - "lower": "0000196b198b3328", - "upper": "0000196b198b3328", - "kind": "packed-time" + "lower": { + "$serde_json::private::Number": "-709985503" + }, + "upper": { + "$serde_json::private::Number": "213529792" + } }, "1": { - "lower": true, - "upper": true + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + }, + "2": { + "lower": { + "$serde_json::private::Number": "943615" + }, + "upper": { + "$serde_json::private::Number": "71089064" + } } } } }, { - "len": 2, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" }, - "0": "NoneStats" + "0": { + "lower": "80000ac0000000720000f6d32f9aa928", + "upper": "8003ec70000001310000ee7d2782a3a8", + "kind": "packed-date-time" + }, + "1": { + "lower": false, + "upper": true + }, + "2": "NoneStats" } } }, { - "len": 2, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" }, "0": { - "lower": "a022296f3e579c4d72dbaff1fa8103ad", - "upper": "a022296f3e579c4d72dbaff1fa8103ad", - "kind": "packed-interval", "nulls": { "$serde_json::private::Number": "1" - } + }, + "not nulls": "NoneStats" } } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "0": { "lower": { - "$serde_json::private::Number": "974411648" + "$serde_json::private::Number": "12214465411807928282" + }, + "upper": { + "$serde_json::private::Number": "17392568204391622274" + } + }, + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + }, + "2": { + "lower": { + "$serde_json::private::Number": "-431" }, "upper": { - "$serde_json::private::Number": "974411648" + "$serde_json::private::Number": "28533" } } } @@ -9818,33 +9947,55 @@ expression: all_stats }, "0": { "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "4" }, "not nulls": "NoneStats" + }, + "1": { + "nulls": { + "$serde_json::private::Number": "2" + }, + "not nulls": "json_mixed" } } } }, { - "len": 6, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" }, "0": { + "lower": "1ed2604d5d8e8fbdb7c4b4cf2573a82a", + "upper": "d4f2257c39185d25168304947acb3af3", + "kind": "uuid" + }, + "1": { + "lower": { + "$serde_json::private::Number": "-4712541578010691915" + }, + "upper": { + "$serde_json::private::Number": "5764441318232864608" + }, + "nulls": { + "$serde_json::private::Number": "2" + } + }, + "2": { "lower": { - "$serde_json::private::Number": "-16181" + "$serde_json::private::Number": "3896842216123437947" }, "upper": { - "$serde_json::private::Number": "26636" + "$serde_json::private::Number": "17054966390919109000" } } } @@ -9866,52 +10017,45 @@ expression: all_stats }, "0": { "lower": { - "$serde_json::private::Number": "-29108" + "$serde_json::private::Number": "5191010511069034746" }, "upper": { - "$serde_json::private::Number": "16292" + "$serde_json::private::Number": "17224748278188762176" }, "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "1": { - "lower": "$\tF\u0006񉊺�?¦\t󺴊\\\u0000􏭬s\r𩐻~\tW񉧟E‮>:W𱲪", - "upper": "𛰧󒻏🕴򷶣\u0002Š\\ZHȺ=<\t\u000b\u000bѨ$\\򓸮<\u0005)‮" - }, - "2": { - "lower": "000004aa3b623988", - "upper": "00012a4a0d9d4290", - "kind": "packed-time", - "nulls": { - "$serde_json::private::Number": "2" + "lower": { + "$serde_json::private::Number": "-30398" + }, + "upper": { + "$serde_json::private::Number": "18419" } } } } }, { - "len": 1, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" }, - "0": "NoneStats", - "1": { - "lower": { - "$serde_json::private::Number": "413196603" + "0": { + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "413196603" - } + "not nulls": "NoneStats" } } } @@ -9931,11 +10075,19 @@ expression: all_stats "$serde_json::private::Number": "3" }, "0": { - "lower": "1c7e59a4ad944cff86d5cb094703fa7b", - "upper": "b9db55197ce2f413ee493fa065a908c0", - "kind": "uuid" - } - } + "lower": { + "$serde_json::private::Number": "-7290909494083743810" + }, + "upper": { + "$serde_json::private::Number": "4008300908023948534" + } + }, + "1": { + "lower": "8819ab5947cece617b9df268a272ebde", + "upper": "d6232dc868aa16985a6506176a95a305", + "kind": "uuid" + } + } } }, { @@ -9953,6 +10105,14 @@ expression: all_stats "$serde_json::private::Number": "5" }, "0": { + "lower": "1100000016000000dc01d301c7002502c50211000000000000000000000000000000800000000000", + "upper": "10000000f5ffffff010100034b0035018c0201000000000000000000000000000000800000000000", + "kind": "packed-numeric", + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "1": { "nulls": { "$serde_json::private::Number": "1" }, @@ -9962,151 +10122,141 @@ expression: all_stats } }, { - "len": 2, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" }, "0": { "nulls": { "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" - }, - "1": { - "lower": "b2acfecc419ff9ec36b44587d8ae8742", - "upper": "e3622cd4e0bf258031f9e32ca7e1e2da", - "kind": "uuid" - }, - "2": { - "lower": { - "$serde_json::private::Number": "2757581722" - }, - "upper": { - "$serde_json::private::Number": "3675365687" - } } } } }, { - "len": 4, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" }, "0": { - "lower": "4022481b4a193b0d94222811a907fcc0734eae02d06ec01da9c6a4bb7e64962f70c214143e4e941f0f3f0c3687dd34a8f2d6d325279531ea62d9b8107fe52ed6f85bd932359b2b6505a0e7cb44b9d7f2b9dad03f7409ce6697b35f9f9c66ac46c25be4c4", - "upper": "ad4e098e39305f5c413f9c6d6b07e77940458786b1b78ef7b6fbdc8047600ab1c1f646cadb9425d49f04b1f18ff8127034973f13a62e1e7cd2645c87f7d1bce125b9611d80bf3b2980bba2212abef65990aa20fd18894d80d2ebe5cf104e3d3379afc8d0" - } + "lower": { + "$serde_json::private::Number": "-7314768568698389567" + }, + "upper": { + "$serde_json::private::Number": "-7314768568698389567" + } + }, + "1": { + "lower": "26000000000000003f028200c900f60250024b02cf006002e802b7027c0153020e00800000000000", + "upper": "26000000000000003f028200c900f60250024b02cf006002e802b7027c0153020e00800000000000", + "kind": "packed-numeric" + }, + "2": "NoneStats" } } }, { - "len": 5, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" }, - "0": "NoneStats", - "1": { + "0": { + "lower": { + "$serde_json::private::Number": "-25689" + }, + "upper": { + "$serde_json::private::Number": "27979" + } + }, + "1": "NoneStats", + "2": { "lower": { - "$serde_json::private::Number": "-7648262976479616160" + "$serde_json::private::Number": "1274998740422095992" }, "upper": { - "$serde_json::private::Number": "3099933332433677612" + "$serde_json::private::Number": "17920135716015404020" } } } } }, { - "len": 5, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" }, "0": { - "lower": "880db1c67db40d5ca88ea4ceeaf4f345", - "upper": "f39d1e01003f2d8cbd9a0f124ebaed05", - "kind": "packed-interval", - "nulls": { - "$serde_json::private::Number": "2" - } + "lower": "\u0000\n\r‮\"¥$񑿙\u001b򚻥!E򽝡6񼆏𥤗%򖥀K~<¥W/佯=񔨺‮|U%\u001b􍡗}{􆕖{:􁛼󵁫?f‮񏧔?$𘖾", + "upper": "/%򎆜𣈒8󆉎%ß𱰪'/<Ⱥ/{\\<\rȺ🕴=)🕴/W\n$W/e\tSMѨ5񸓴e¥Ѩ\\^\"<¥“{󁔪&'a%𝬔ȺѨh&\u000e" }, "1": { "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" }, - "2": "NoneStats" + "2": { + "nulls": { + "$serde_json::private::Number": "2" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 2, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "2" - }, - "0": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "3" }, - "1": { - "lower": { - "$serde_json::private::Number": "-1094557949" - }, - "upper": { - "$serde_json::private::Number": "-1094557949" - }, - "nulls": { - "$serde_json::private::Number": "1" - } - } + "0": "NoneStats" } } }, @@ -10125,23 +10275,19 @@ expression: all_stats "$serde_json::private::Number": "4" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - }, - "1": { - "lower": "000029a620713ca0", - "upper": "000131d605e59cf0", - "kind": "packed-time" - }, - "2": { "lower": { - "$serde_json::private::Number": "-3.8452608218300044e283" + "$serde_json::private::Number": "18" }, "upper": { - "$serde_json::private::Number": "3.4004306454243184e-253" + "$serde_json::private::Number": "187" + }, + "nulls": { + "$serde_json::private::Number": "1" } + }, + "1": { + "lower": "5fb9f8cb8502a80a4c78112ddf04b26b3af3ae676c12a8165789ec0347c2867c6d7f355a20e6440e21f66eeb85329699ce4d87638d549150a35af80f10ea25251a4ad1e9c3d801278801915d82a748da59c8045cee99e83c5626677785688db4714abc19", + "upper": "cb864aeba91d7ef3c1bccb37a57cf206c884239e4bbf177cd5786112e86d6a45d04b597d4bd5078f0caf610f047b0224b12356f75aedc4a1836e804cf6af8457cd6755fee6b0e52e915ff536fc9d614d75d6cf7b9330a4e824f614605292f6c4f53b5423" } } } @@ -10160,245 +10306,275 @@ expression: all_stats "len": { "$serde_json::private::Number": "3" }, - "0": { - "lower": "8000407f0000001d0000b81227cbf148", - "upper": "8002d8ed000000130001113920b83880", - "kind": "packed-date-time" + "0": "NoneStats", + "1": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "3" + } + }, + "2": { + "lower": { + "$serde_json::private::Number": "-3773" + }, + "upper": { + "$serde_json::private::Number": "19521" + } } } } }, { - "len": 6, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "7" }, "0": { + "lower": "80007eca000001440000b4d1168d9af8", + "upper": "800346980000015c000003402f230828", + "kind": "packed-date-time", "nulls": { "$serde_json::private::Number": "2" - }, - "not nulls": "NoneStats" + } } } } }, { - "len": 6, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "lower": "$lCȺ=àÎ*򴆔Ⱥ\\񜛐$-K\u000b\"[?�$`‮\"u=Ⱥ\\2$󣼐𩄭&.7*\t\u0000w􌐺Ѩ'È\u0000<$=󓯼򌈨¥\r񟻝$󈣞&:񌧬>", + "upper": "𔍘\u001b !" + }, + "1": { + "lower": "8000307b0000010c00001d393260e960", + "upper": "8003f3da0000010a0000291f360a8c88", + "kind": "packed-date-time" } } } }, { - "len": 1, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" }, "0": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - }, - "1": { "lower": { - "$serde_json::private::Number": "15814" + "$serde_json::private::Number": "365023660" }, "upper": { - "$serde_json::private::Number": "15814" + "$serde_json::private::Number": "4081212774" + }, + "nulls": { + "$serde_json::private::Number": "3" } + }, + "1": { + "nulls": { + "$serde_json::private::Number": "2" + }, + "not nulls": "json_mixed" } } } }, { - "len": 7, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "6" }, "0": "NoneStats", "1": { - "lower": "1bf01af1711bbb2fac590e3dc906bd21", - "upper": "d9a8bbe639a7e067fd04f9f5714be297", - "kind": "uuid", - "nulls": { - "$serde_json::private::Number": "2" + "lower": { + "$serde_json::private::Number": "-16091" + }, + "upper": { + "$serde_json::private::Number": "21947" } } } } }, { - "len": 2, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, - "0": "NoneStats" + "0": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + }, + "1": "NoneStats" } } }, { - "len": 6, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "1" }, "0": { "lower": { - "$serde_json::private::Number": "2624101804834047164" + "$serde_json::private::Number": "125" }, "upper": { - "$serde_json::private::Number": "17512825201993065568" + "$serde_json::private::Number": "125" } } } } }, { - "len": 3, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "7" }, "0": { - "nulls": { - "$serde_json::private::Number": "2" - }, - "not nulls": "NoneStats" - }, - "1": { "lower": { - "$serde_json::private::Number": "-324244399" + "$serde_json::private::Number": "532382558" }, "upper": { - "$serde_json::private::Number": "2111158873" + "$serde_json::private::Number": "4116784714" + }, + "nulls": { + "$serde_json::private::Number": "1" } + }, + "1": { + "lower": "092474738ee3c23d1d3ba860d00f262d", + "upper": "9e36d67603c141e5861a8881d03df266", + "kind": "uuid" } } } }, { - "len": 5, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" }, "0": { "lower": { - "$serde_json::private::Number": "706183684" + "$serde_json::private::Number": "1159785739" }, "upper": { - "$serde_json::private::Number": "3713837314" + "$serde_json::private::Number": "3661111999" } }, "1": { - "lower": "\u0007񑎪\r.aG?&􌽠򔔀򦲈򯦡O`󅒚\"$񙑆?:􃤸{a\r&\t", - "upper": "{\u0007Ⱥ򚙫񌐹󷟗'𶕳\\\u0004𘒌*&\u000b/򣄳*ñC🕴[¥򩡢\u001b\\\u000b™񋘋󣭩" + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } }, { - "len": 7, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" }, - "0": { - "lower": "2a4df42296197f8fb706391860423e48", - "upper": "fee4e270cf76ef5b46d5a854511cd4e5", - "kind": "packed-interval", - "nulls": { - "$serde_json::private::Number": "1" + "0": "NoneStats", + "1": { + "lower": { + "$serde_json::private::Number": "-7.33805169573524e255" + }, + "upper": { + "$serde_json::private::Number": "1.0176684230746369e-165" } }, - "1": { + "2": { "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "not nulls": "NoneStats" } @@ -10406,208 +10582,176 @@ expression: all_stats } }, { - "len": 6, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "6" - }, - "0": { - "lower": "\u0002<𥽐=¥n/󃀇2`:񽣒?Y\u000b󦚶<򶷐Ⱥ[񶒷", - "upper": "Z󋢋\\ø𴸩o\rK񄯬<=\"🕴t¥Ⱥ.`🕴8\u0000U", - "nulls": { - "$serde_json::private::Number": "2" - } + "$serde_json::private::Number": "3" }, - "1": { + "0": "NoneStats", + "1": "NoneStats", + "2": { + "lower": { + "$serde_json::private::Number": "59427216" + }, + "upper": { + "$serde_json::private::Number": "204201984" + }, "nulls": { "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - }, - "2": "json_mixed" + } + } } } }, { - "len": 5, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "2" }, "0": { + "lower": "800112610000001a0001316c1db5cdf0", + "upper": "8002617a000000a9000041912d74a860", + "kind": "packed-date-time" + }, + "1": { "lower": { - "$serde_json::private::Number": "-1003640135" + "$serde_json::private::Number": "158168815" }, "upper": { - "$serde_json::private::Number": "1491180152" + "$serde_json::private::Number": "3817740236" } - }, - "1": { - "lower": "80001b6d0000007700007bac171a5650", - "upper": "800292df000000430000e9a23695b588", - "kind": "packed-date-time" } } } }, { - "len": 4, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "3" }, "0": { - "lower": { - "$serde_json::private::Number": "1.392705e-24" + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "1.3036654e33" - } + "not nulls": "NoneStats" } } } }, { - "len": 4, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" }, - "0": { + "0": "NoneStats", + "1": { "lower": { - "$serde_json::private::Number": "-762436" + "$serde_json::private::Number": "0.0" }, "upper": { - "$serde_json::private::Number": "18683280" - }, - "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "903683200000.0" } }, - "1": "NoneStats", - "2": { - "lower": { - "$serde_json::private::Number": "-6893" - }, - "upper": { - "$serde_json::private::Number": "30288" - } - } + "2": "NoneStats" } } }, { - "len": 5, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" }, - "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - } + "0": "NoneStats" } } }, { - "len": 5, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "5" - }, - "0": "NoneStats", - "1": { - "lower": { - "$serde_json::private::Number": "58" - }, - "upper": { - "$serde_json::private::Number": "176" - } + "$serde_json::private::Number": "3" }, - "2": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - } + "0": "NoneStats" } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, - "0": "NoneStats", - "1": { + "0": { + "lower": "80000ff2000000ee00013bbb16e9a578", + "upper": "800050bf000000780000478c0f1c5cc8", + "kind": "packed-date-time" + }, + "1": "NoneStats", + "2": { "nulls": { "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" - }, - "2": { - "lower": "04000000fdffffff3800080000000000000000000000000000000000000000000000000000000000", - "upper": "04000000fdffffff3800080000000000000000000000000000000000000000000000000000000000", - "kind": "packed-numeric" } } } @@ -10626,337 +10770,327 @@ expression: all_stats "len": { "$serde_json::private::Number": "6" }, - "0": "NoneStats", - "1": { + "0": { + "lower": { + "$serde_json::private::Number": "891665432" + }, + "upper": { + "$serde_json::private::Number": "3575514559" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "1": "NoneStats", + "2": { "lower": { - "$serde_json::private::Number": "-30298" + "$serde_json::private::Number": "3318119391055207178" }, "upper": { - "$serde_json::private::Number": "22723" + "$serde_json::private::Number": "15909023443702901428" + }, + "nulls": { + "$serde_json::private::Number": "1" } } } } }, { - "len": 5, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" }, "0": { "lower": { - "$serde_json::private::Number": "795256683" + "$serde_json::private::Number": "1642411123" }, "upper": { - "$serde_json::private::Number": "3065057441" + "$serde_json::private::Number": "3511998803" } - } + }, + "1": "NoneStats" } } }, { - "len": 1, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" }, "0": { + "lower": "\u000b򔙂Z‮🕴$Ïḉ𳗈†๮¥\u0003?𮹶矤>\"R𻘲\t", + "upper": "񠒆/\t\"ѨÁ\t¥=", + "nulls": { + "$serde_json::private::Number": "2" + } + }, + "1": { "nulls": { "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" }, - "1": { - "lower": { - "$serde_json::private::Number": "2062423816" + "2": { + "nulls": { + "$serde_json::private::Number": "2" }, - "upper": { - "$serde_json::private::Number": "2062423816" - } + "not nulls": "NoneStats" } } } }, { - "len": 3, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "3" - }, - "0": "NoneStats", - "1": { - "lower": { - "$serde_json::private::Number": "-30702" - }, - "upper": { - "$serde_json::private::Number": "32103" - } + "$serde_json::private::Number": "7" }, - "2": { + "0": { + "lower": "8000e5c20000010c00004735367a6170", + "upper": "800335ab000001630000b69231d12898", + "kind": "packed-date-time", "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "3" + } } } } }, { - "len": 5, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" + }, + "0": { + "lower": { + "$serde_json::private::Number": "-3764598473585712459" + }, + "upper": { + "$serde_json::private::Number": "8345919994937608429" + } }, - "0": "NoneStats", "1": { "nulls": { "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" - }, - "2": "NoneStats" + } } } }, { - "len": 2, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" }, "0": { - "lower": "W\u001b:$z*\u001bJ{'B/Ѩ�\u0000򭈽\b`", - "upper": "󒱌\u0000$z𶥞􌝲I:箭M�{Ⱥ􅲚" + "lower": "000016a50e049b98", + "upper": "000129bb00f43f58", + "kind": "packed-time" }, "1": { - "lower": { - "$serde_json::private::Number": "-4358928693347494004" + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "7511043363252606536" - } + "not nulls": "NoneStats" }, "2": { "lower": { - "$serde_json::private::Number": "72015040332690278" + "$serde_json::private::Number": "266422500923513781" }, "upper": { - "$serde_json::private::Number": "8087855730351181216" + "$serde_json::private::Number": "16991749965736740183" } } } } }, { - "len": 5, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" }, "0": { "lower": { - "$serde_json::private::Number": "138671377" + "$serde_json::private::Number": "69877743" }, "upper": { - "$serde_json::private::Number": "2965196910" + "$serde_json::private::Number": "4254563746" + }, + "nulls": { + "$serde_json::private::Number": "1" } }, - "1": "NoneStats" + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 3, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "2" }, "0": { - "lower": "63420af83279529b4ce53f375da3f4a122d2b4cf9e8b674eb3f672645f97a338a8fc5800bb04fa5faea4b84a13a40498cbc45a23ba6aeabe137b424625fe7708bba14c5533ae3bf0e88ce7efdcc7c0a1fad450f7cf2cfa0f1fadb8782d00370509aa27ec", - "upper": "a8c5ce4fc2162dd94c6b7cccb83c9d77152f1e0ad038f5c6ed0d569140b9957c893471ba94d05d90ef4376e92e918267d1f62681d0e6d82da498e8cef9bb834d1e7772bcb30ec22ec87f10a4a26bf518336909c6033518f8892e57433b7600cee45e0942", - "nulls": { - "$serde_json::private::Number": "1" - } + "lower": "00001509117521a8", + "upper": "0000dc44033a3ba0", + "kind": "packed-time" }, - "1": { - "lower": "80008da00000013a0000019e3a489bc8", - "upper": "800219b60000013400006d851ceb3e78", - "kind": "packed-date-time" - } + "1": "NoneStats", + "2": "NoneStats" } } }, { - "len": 4, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "6" }, - "0": { - "lower": "11000000160000004902d7009701fd01c4012c000000000000000000000000000000800000000000", - "upper": "11000000f4ffffffcc02e2030902d803bb020b000000000000000000000000000000800000000000", - "kind": "packed-numeric", - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "1": { - "lower": { - "$serde_json::private::Number": "13355" - }, - "upper": { - "$serde_json::private::Number": "53720" - } - } - } - } - }, - { - "len": 6, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "6" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "6" - }, - "0": { - "lower": "5c43a4c2b94b6995e10e60bba7bb6117d5d482fec671a9f5789d1bed45aa2f4b2beeb5f18034d4128535e2f4a5ecae472bacb3380061d2ba3e9f1589a4493b44e9ef1a4c3468c1043cc945fea4aba81ba0957743a4ae4e2680a39581701390d2cd85e29e", - "upper": "fc97ad3e7dac4da63207e1bffc304c4ee2889f3cc856d2ecd7b811b9282444eae9dc5e73c9f61f4365505f4ed3c5797811a3b27cb2a2a70bf2635a538b1225936464665e9e6a83eea873a34e1e03347b06e923f6309885115ab69a5318a3dc02388051d6" - }, - "1": "NoneStats" + "0": "NoneStats" } } }, { - "len": 3, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "7" }, "0": { "lower": { - "$serde_json::private::Number": "-1505639290" + "$serde_json::private::Number": "2642262464186288494" }, "upper": { - "$serde_json::private::Number": "818369163" + "$serde_json::private::Number": "17827312054345834509" }, "nulls": { "$serde_json::private::Number": "1" } }, "1": { - "lower": "[𞧱Iž{˜\tcѨ&D'\u000bXȺ㺖򋁼(/򯷱(:򰝅\r[=*", - "upper": "𗻬󔭔\t󉩯8&:򮥀D󆡈" - }, - "2": { + "lower": { + "$serde_json::private::Number": "306990356705914386" + }, + "upper": { + "$serde_json::private::Number": "17708167195847940050" + }, "nulls": { "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + } } } } }, { - "len": 4, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" }, "0": { "lower": { - "$serde_json::private::Number": "10361876323925862415" + "$serde_json::private::Number": "68" }, "upper": { - "$serde_json::private::Number": "13979013090894326153" + "$serde_json::private::Number": "68" } + }, + "1": { + "lower": "8001140c0000003f0001428530e8dfc0", + "upper": "8001140c0000003f0001428530e8dfc0", + "kind": "packed-date-time" } } } @@ -10976,10 +11110,20 @@ expression: all_stats "$serde_json::private::Number": "4" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "75" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "101" + } + }, + "1": "NoneStats", + "2": { + "lower": "", + "upper": "󷃯5`xí\\\u0000񖯍\rÕ;¤�\\%'\u0000.🕴Y'", + "nulls": { + "$serde_json::private::Number": "1" + } } } } @@ -10999,63 +11143,85 @@ expression: all_stats "$serde_json::private::Number": "7" }, "0": { + "lower": "\u0005𴋝򯟯\u001b򬮝􆎴\tH󘽈񏸟n🕴\u0000x\u0001\u0005‮󻘥'$gH򸑋򂰪½X\u0000򣢉3}", + "upper": "򪋐\u0001]'š]󖨀‮?󅙝9\u0000:<¥.~}y‮,񫧮\u000b🕴O\"󂭤񐽽򼡁󜱪.", + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "1": { "lower": { - "$serde_json::private::Number": "191457650" + "$serde_json::private::Number": "-6224503585926879636" }, "upper": { - "$serde_json::private::Number": "2785186371" + "$serde_json::private::Number": "7464617032148609754" + }, + "nulls": { + "$serde_json::private::Number": "1" } + }, + "2": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" } } } }, { - "len": 2, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" }, "0": { - "lower": { - "$serde_json::private::Number": "13" - }, - "upper": { - "$serde_json::private::Number": "13" - }, - "nulls": { - "$serde_json::private::Number": "1" - } + "lower": "80001a2c00000073000078b21706da08", + "upper": "800037e60000007300003a551a298a50", + "kind": "packed-date-time" } } } }, { - "len": 5, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "6" }, "0": { "nulls": { "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" + }, + "1": { + "lower": "\u0004>񓭲;{\"\u0002󳅬󴲛偫+񆭨\u0006񬍣Ⱥ'~<𛝴=#\\>X񻡱󸠺ѨO<�𚤚􀃳*񧑳&𘲘=ªѨ\u000b\u000b*:񰖬<񿸯Ѩ?\n🕴򲞏N¥?󡋌*{񨅈.?@" }, - "2": { - "lower": "\"󬺨<:\u000bE¥", - "upper": "5.‮𖦈Ⱥ", - "nulls": { - "$serde_json::private::Number": "2" - } - } + "1": "NoneStats" } } }, { - "len": 2, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, "0": { "lower": { - "$serde_json::private::Number": "483700762" + "$serde_json::private::Number": "3401859456" }, "upper": { - "$serde_json::private::Number": "2630967844" + "$serde_json::private::Number": "3401859456" } } } } }, { - "len": 2, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" }, "0": { - "lower": "10000000f6ffffff9d001e0365026702120008000000000000000000000000000000800000000000", - "upper": "10000000f6ffffff9d001e0365026702120008000000000000000000000000000000800000000000", - "kind": "packed-numeric", + "lower": { + "$serde_json::private::Number": "3985291663234800788" + }, + "upper": { + "$serde_json::private::Number": "13598671904778164006" + } + }, + "1": { "nulls": { "$serde_json::private::Number": "1" - } + }, + "not nulls": "NoneStats" } } } }, { - "len": 2, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "6" }, "0": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" }, - "1": { - "lower": { - "$serde_json::private::Number": "43460" - }, - "upper": { - "$serde_json::private::Number": "43460" - }, - "nulls": { - "$serde_json::private::Number": "1" - } - } + "1": "NoneStats" } } }, @@ -11521,394 +11696,373 @@ expression: all_stats "len": { "$serde_json::private::Number": "5" }, - "0": "NoneStats", - "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - }, - "2": { - "lower": "00001c601e7122f8", - "upper": "00011ef0306a0330", - "kind": "packed-time" - } + "0": "NoneStats" } } }, { - "len": 3, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" }, "0": { - "lower": { - "$serde_json::private::Number": "-6.84561308156819e265" - }, - "upper": { - "$serde_json::private::Number": "1.1873665190435356e123" - } + "lower": "16d8c3446658c947dd29ce9f64ce24ea", + "upper": "edee6530cd1bfc4a56c7c470e803e98b", + "kind": "uuid" } } } }, { - "len": 2, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "17545859" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "73418805" + } }, "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - } + "lower": "\u001bh𪡷𦦳ñC🕴[¥𦣺:\u001b\\F`//𭈈4 ", + "upper": "󟎐=.Ѩ\n>�:B\\$󷺓\u001b\t\u001b?\u0000|J< " + }, + "2": "NoneStats" } } }, { - "len": 3, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" }, - "0": "NoneStats" + "0": { + "lower": { + "$serde_json::private::Number": "3458530320" + }, + "upper": { + "$serde_json::private::Number": "3458530320" + } + }, + "1": "NoneStats", + "2": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 1, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "702815865" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "3770468704" + } }, "1": { + "lower": "\u0000Ýk‮", + "upper": "¥T𬪺?`", "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - }, - "2": { - "lower": "29531a2747ec6b590b9fea3dfe99db32", - "upper": "29531a2747ec6b590b9fea3dfe99db32", - "kind": "uuid" + "$serde_json::private::Number": "1" + } } } } }, { - "len": 2, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" }, "0": { "lower": { - "$serde_json::private::Number": "141" + "$serde_json::private::Number": "1236305240" }, "upper": { - "$serde_json::private::Number": "148" + "$serde_json::private::Number": "4244481517" + }, + "nulls": { + "$serde_json::private::Number": "1" } }, "1": { - "lower": { - "$serde_json::private::Number": "5195" - }, - "upper": { - "$serde_json::private::Number": "38858" - } - } + "lower": "10000000f6ffffffe5023002b6031203d40105000000000000000000000000000000000000000000", + "upper": "0600000000000000fd00c30200000000000000000000000000000000000000000000000000000000", + "kind": "packed-numeric" + }, + "2": "NoneStats" } } }, { - "len": 4, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "4" - }, - "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "3" }, - "1": "NoneStats", - "2": { - "lower": { - "$serde_json::private::Number": "-410792590" - }, - "upper": { - "$serde_json::private::Number": "1878189284" - } - } + "0": "json_mixed", + "1": "NoneStats" } } }, { - "len": 6, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "1" }, "0": { "lower": { - "$serde_json::private::Number": "-958385700000.0" + "$serde_json::private::Number": "6801594893048897818" }, "upper": { - "$serde_json::private::Number": "5.5188644e26" - }, - "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "6801594893048897818" } }, "1": { - "lower": "00001e8a03657220", - "upper": "0001370814327c88", - "kind": "packed-time" + "lower": { + "$serde_json::private::Number": "29833" + }, + "upper": { + "$serde_json::private::Number": "29833" + } }, "2": { - "lower": ":\u0004񐱅/\u000b񶂹:򚭏\t<\u0006‮%𣋼", - "upper": "􄾣t‮%𤾥𯘾G�乖\u000bff\b\\󿯗\u000b󿹧򠤐5Ѩ'‮񜲃󫨖𘡲" + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } }, { - "len": 3, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" }, "0": { "nulls": { "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" + }, + "1": { + "lower": "10000000160000003b036403ac025103d70005000000000000000000000000000000800000000000", + "upper": "10000000170000002e0046005900b9012d0307000000000000000000000000000000000000000000", + "kind": "packed-numeric" } } } }, { - "len": 2, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "2" - }, - "0": { - "lower": "q򞞊Ѩ󮠹|𙄋T\u001b9򳟱}󌈫&%<\u0006", - "upper": "򁔪\u0000񡺡b=🕴Ⱥ󙝙򆷞~‮󿲷\r􀣵_?\u001b:/`M\\" + "$serde_json::private::Number": "7" }, + "0": "NoneStats", "1": { - "lower": { - "$serde_json::private::Number": "-24720" + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "19009" - } + "not nulls": "NoneStats" } } } }, { - "len": 6, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" }, - "0": "NoneStats", - "1": { - "lower": { - "$serde_json::private::Number": "6062432774471577719" - }, - "upper": { - "$serde_json::private::Number": "15236655368828311685" - }, + "0": { "nulls": { - "$serde_json::private::Number": "2" - } - }, - "2": { - "lower": { - "$serde_json::private::Number": "34045057" - }, - "upper": { - "$serde_json::private::Number": "87590378" + "$serde_json::private::Number": "0" }, + "not nulls": "NoneStats" + }, + "1": { "nulls": { - "$serde_json::private::Number": "1" - } + "$serde_json::private::Number": "2" + }, + "not nulls": "NoneStats" } } } }, { - "len": 5, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" }, "0": { "lower": false, "upper": true }, "1": { - "lower": "060000000000000085025d0100000000000000000000000000000000000000000000000000000000", - "upper": "100000001700000048000d0152016d004c0309000000000000000000000000000000000000000000", - "kind": "packed-numeric", - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "2": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + "lower": "%_*`🕴Y.\t򨮸󩈒󵞈<񃗝8/񢖇\u001b.\"{%\n~+񓳩󐝥.=򞁺𷽘.\\<Ⱥ\n\u0000󏭃`YsU󫑙o\"򡚤Ⱥ�񇳡󧆅hw", + "upper": "󚾢񖈸񠇶\"‮\t荨񜁉='Uë.\n'—'􀡵‮<\u000b~w/<$.4%:D\u000b򡈮񑏅i\n{%‮i\u001b:\u0000p{Z3\\ÖJl*𨪿󟆋L􄷵T󫇹󫈫", - "upper": "𮡸2IȺ\u0000Å%\t�>ë.\n'—'􀡵‮<\u000b~w/<$.4%:D\u000b򡈮񑏅i\n{%‮i\u001b:\u0000p{Z3\\ÖJl*𨪿󟆋L􄷵T󫇹󫈬" + "lower": "20294b59d645553ca9c2ebf2c894cc31", + "upper": "ef1aaa0d9bebba0c68337169ddbc29af", + "kind": "packed-interval" }, "1": { - "lower": "80010587000000c600014b6603c97b80", - "upper": "80010587000000c600014b6603c97b80", - "kind": "packed-date-time" - }, - "2": "NoneStats" + "lower": "1f64ed9de147fa88e5972e44f4fec037", + "upper": "b1eb1c8bda384410dadae80f7064ee70", + "kind": "packed-interval", + "nulls": { + "$serde_json::private::Number": "1" + } + } } } }, { - "len": 5, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" }, "0": { - "lower": "0000536f1f1a9db0", - "upper": "0001392e26007c30", - "kind": "packed-time" - }, - "1": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "13754157" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "84336039" + } } } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "0": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" - }, - "1": { - "lower": { - "$serde_json::private::Number": "508772244" - }, - "upper": { - "$serde_json::private::Number": "508772244" - } } } } }, { - "len": 1, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" }, - "0": "NoneStats", - "1": { - "lower": { - "$serde_json::private::Number": "21670" - }, - "upper": { - "$serde_json::private::Number": "21670" - } - } + "0": "NoneStats" } } }, @@ -13111,14 +13056,7 @@ expression: all_stats "len": { "$serde_json::private::Number": "7" }, - "0": { - "lower": { - "$serde_json::private::Number": "1068560793" - }, - "upper": { - "$serde_json::private::Number": "3856185794" - } - } + "0": "NoneStats" } } }, @@ -13141,34 +13079,48 @@ expression: all_stats "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" + }, + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } }, { - "len": 6, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" }, "0": { + "lower": "0000a32610d35b98", + "upper": "0000f1cd3a705b90", + "kind": "packed-time" + }, + "1": { + "lower": { + "$serde_json::private::Number": "11383" + }, + "upper": { + "$serde_json::private::Number": "25101" + } + }, + "2": { "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" - }, - "1": { - "lower": "8000630e000000a900005c770ef617e8", - "upper": "8002dcef0000009f0000749913148580", - "kind": "packed-date-time" } } } @@ -13188,19 +13140,9 @@ expression: all_stats "$serde_json::private::Number": "5" }, "0": { - "lower": "\u000b򬦆,.\"T󕶯s%񪅯򰘬: g{`':򟭫K\u0000?\u0000i󖫣\\񴆅&񘸊Ⱥ꽜񌠘'<񗝚\u000b�򳦼{Ⱥ򛿑<'/􈌦o􆶚", - "upper": "=J\nȺ󼮳򔏞\\~�{â\\𖙸={>򹉨*Ⱥ4U贫'H:*$𗽈xAy\"򍗭<`ÃA !" - }, - "1": { - "lower": false, - "upper": true, - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "2": { - "lower": "\u000b򁶀", - "upper": "‮𱈃&Ⱥ򎎕 􀈠" + "lower": "7ffffd590000003100012a58180dfd50", + "upper": "8002e5e40000006a0000a6cb05e37a10", + "kind": "packed-date-time" } } } @@ -13220,278 +13162,245 @@ expression: all_stats "$serde_json::private::Number": "3" }, "0": { - "lower": { - "$serde_json::private::Number": "1598074887222340764" - }, - "upper": { - "$serde_json::private::Number": "15702913854836164451" - } - }, - "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "lower": "'Ѩ򤰓Ä%񩪤񥬸$񐸂򼻊򎒦%f\"\rJ򤀶%&", + "upper": "􅅭" } } } }, { - "len": 5, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" }, "0": { - "lower": { - "$serde_json::private::Number": "-8970095666833147208" + "lower": "104055f25c09b2cdd3073464d175d92b", + "upper": "9dbeb4c88c3e9ad7d88d5b2d77fcc964", + "kind": "packed-interval" + }, + "1": { + "nulls": { + "$serde_json::private::Number": "0" }, - "upper": { - "$serde_json::private::Number": "7602594684016571173" - } + "not nulls": "NoneStats" }, - "1": "NoneStats" + "2": "NoneStats" } } }, { - "len": 2, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, "0": { - "lower": "80011ebc00000037000126b50fc83110", - "upper": "8001375d000000020000839305debb38", - "kind": "packed-date-time" + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" }, "1": { "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" }, "2": { - "lower": "2600000000000000850349024801ae00130051017902f100f7013401e8004b035b00800000000000", - "upper": "11000000f5ffffff97027103e8004c01fc021c000000000000000000000000000000000000000000", - "kind": "packed-numeric" + "lower": "e%'WȺ", + "upper": "e%'WȺ" } } } }, { - "len": 4, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "6" }, "0": { - "lower": { - "$serde_json::private::Number": "5355" - }, - "upper": { - "$serde_json::private::Number": "65183" - } - }, - "1": { - "lower": "8000ea3b0000006a00010eaa35ab5970", - "upper": "8003cc5500000144000061d22c8b61a0", - "kind": "packed-date-time" - }, - "2": "NoneStats" + "lower": "043e58b82b955eee9e5c8f9fc5815776", + "upper": "ee61471e00f833eb2f738e1376648a58", + "kind": "uuid" + } } } }, { - "len": 7, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "7" - }, - "0": { - "lower": { - "$serde_json::private::Number": "881179639246420098" - }, - "upper": { - "$serde_json::private::Number": "14284552514742421421" - } - }, - "1": { - "lower": "27000000000000000d0251018800b9005a03ab024d016500da01b901e201f6019a00800000000000", - "upper": "0f000000180000008b03f4006e01a100140300000000000000000000000000000000000000000000", - "kind": "packed-numeric", - "nulls": { - "$serde_json::private::Number": "1" - } + "$serde_json::private::Number": "5" }, - "2": { - "lower": ":$Ѩ%򭂏E󥦩c󸥸\u0006񽁳'Ѩ{>󱨤J{T", - "upper": "񍖒/񸆪\u0003\\\r", - "nulls": { - "$serde_json::private::Number": "1" - } - } + "0": "NoneStats" } } }, { - "len": 6, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "3" }, "0": { - "lower": "800002d80000012f000020981b351a68", - "upper": "8003c923000000f00000dd302ffa5d28", - "kind": "packed-date-time" + "lower": "@ìY\u000b3񤧡󬁺", + "upper": "a�2򡿔=" }, - "1": "NoneStats", - "2": { - "lower": { - "$serde_json::private::Number": "15" + "1": { + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "156" - } + "not nulls": "NoneStats" } } } }, { - "len": 2, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "2" - }, - "0": { - "lower": "79046c1905657358f1e929530814b426f0335b3204c5f4e99469f34f5e8aa380f8907834c7affd0a95c7e7e6feaa57873aed526c2b0519903cfc96e3545e0b36c60aadbd3fdc10256d2030f20c9e000ce226599b52c14dfe69a6a0c37387b3dcfb6b9d3f", - "upper": "96c80a59c4e0ae7ad98a289fb000ba37f3442c5fbc5c652752447628acda1d0ddc2410144491c98a80f3627399bcf25c2fe844339c15620fb412834b204b850ecc9ca3a2ddcff4b754e9203e4dce62ada4e0375a450a8d5ab1a7a30c07537ff3947e9a73" + "$serde_json::private::Number": "6" }, + "0": "NoneStats", "1": { "lower": { - "$serde_json::private::Number": "475540458" + "$serde_json::private::Number": "7" }, "upper": { - "$serde_json::private::Number": "1581261956" + "$serde_json::private::Number": "150" } }, - "2": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - } + "2": "NoneStats" } } }, { - "len": 6, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" }, - "0": "NoneStats", - "1": "NoneStats", - "2": "NoneStats" + "0": "NoneStats" } } }, { - "len": 1, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "749745135" }, - "not nulls": "NoneStats" - } + "upper": { + "$serde_json::private::Number": "3902690470" + } + }, + "1": { + "lower": "2be64e3a2627a69ed192bda3002391d6d40742f1c4c13adab415dd0e7c95fe6f395a2e7a86258a72a235b12318aa8f1e265f9c3c4f62b33526bda92874511de970eb338fc85e8fdb25055ad628e8a3a343bf5966f25e93a71fdceb783185376fc7c5d091", + "upper": "fdce694d08032f94643e77c33b2b0dbbee06324192ff8815215d8456b9a7a673b81fa877f6dfe8f4ae40167af4e64cdae9fd03782ead6f97bce0fe19f8c0904a6dd724209a67a0815d0f2944bcb9798b8d168669deac73e209349f65f8f7e9e9f123a477" + }, + "2": "NoneStats" } } }, { - "len": 4, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" }, "0": { - "lower": "\u0003\u0000򞵙_\u0003y񓢸Ⱥ\r🕴go򃲢\t;\u0004‹/\t", - "upper": "񹣟\r{+.BHA\"񐖀h왪󊊨7񶕖" + "lower": { + "$serde_json::private::Number": "199089211013386704" + }, + "upper": { + "$serde_json::private::Number": "18353241833719127088" + } + }, + "1": { + "lower": { + "$serde_json::private::Number": "306580912" + }, + "upper": { + "$serde_json::private::Number": "3513522814" + } } } } @@ -13511,43 +13420,50 @@ expression: all_stats "$serde_json::private::Number": "6" }, "0": { - "lower": { - "$serde_json::private::Number": "19196" + "nulls": { + "$serde_json::private::Number": "2" }, - "upper": { - "$serde_json::private::Number": "57491" - } + "not nulls": "NoneStats" }, "1": { - "lower": "\u0006J‮򵂦s񧡃\u001b/\t򸰆\u000b򮙾Yj󿯇:bx󶬕.=󄞙\\Ѩ/p'󁜩򹎤\"Ⱥ\u001b" + "1": "NoneStats", + "2": { + "lower": false, + "upper": true } } } }, { - "len": 6, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" }, - "0": { + "0": "NoneStats", + "1": { "nulls": { "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" + }, + "2": { + "lower": "40f3832ba82c989335fcaeb42c0410ea", + "upper": "ee23ab2d0ee1de564931d3808806e680", + "kind": "uuid" } } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "0": { - "lower": "800007b2000000010000000000000000", - "upper": "800007b2000000010000000000000000", - "kind": "packed-date-time", - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "1": { "lower": { - "$serde_json::private::Number": "18385530939313963793" + "$serde_json::private::Number": "60256145" }, "upper": { - "$serde_json::private::Number": "18385530939313963793" + "$serde_json::private::Number": "79063193" } - }, - "2": "NoneStats" + } } } }, { - "len": 1, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "4" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "15210" }, - "not nulls": "NoneStats" - }, - "1": { - "lower": "80011c7900000058000114ea292157b8", - "upper": "80011c7900000058000114ea292157b8", - "kind": "packed-date-time" - }, - "2": "NoneStats" + "upper": { + "$serde_json::private::Number": "59375" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + } } } }, @@ -14164,373 +14066,314 @@ expression: all_stats }, "0": { "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" - }, - "1": { - "lower": "&\t?Ѩ\\Ù=𒳯j{™\u0005𲺄`�\bȺ򳆔¥{돨/\u0005¥¥", - "upper": "󂧨󽪘5==:¥?\u001b\u0000/&\t󵬞ꡍ&tK*" } } } }, { - "len": 1, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" }, "0": { "lower": { - "$serde_json::private::Number": "3368566644" - }, - "upper": { - "$serde_json::private::Number": "3368566644" - } - }, - "1": { - "lower": { - "$serde_json::private::Number": "-5.106694309235108e-194" + "$serde_json::private::Number": "508760990" }, "upper": { - "$serde_json::private::Number": "-5.106694309235108e-194" - } - }, - "2": { - "\b\"Ѩ$\u000b/🕴򼻯𹈙&'%": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" + "$serde_json::private::Number": "3935624998" }, - "\rh@\"Ѩ0\t\u001b-.=\u0003𰾣󤓂uU󓤋􇮯O" + "lower": "27000000000000000201d600f20202038b039f007900b9024800c501760279038500800000000000", + "upper": "2700000000000000fb01e50012035600a3023e00ff00130312023a01a201e102a100000000000000", + "kind": "packed-numeric" }, "1": "NoneStats" } @@ -16093,28 +15803,67 @@ expression: all_stats "len": { "$serde_json::private::Number": "5" }, - "0": { - "nulls": { - "$serde_json::private::Number": "3" - }, - "not nulls": "NoneStats" + "0": "NoneStats", + "1": "NoneStats" + } + } + }, + { + "len": 3, + "cols": { + "err": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "3" + } + }, + "ok": { + "len": { + "$serde_json::private::Number": "3" + }, + "0": { + "lower": "\u0005\u0000<%:\\`%", + "upper": "*n({\tt<󙠏%񵴄񃍬\rë$}ѨC" }, "1": { - "lower": "01000000000000000000000000000000000000000000000000000000000000000000c00000000000", - "upper": "10000000f6ffffff9b0134036e00d403190302000000000000000000000000000000000000000000", - "kind": "packed-numeric", - "nulls": { - "$serde_json::private::Number": "3" - } + "lower": "\b\\0𘀽🕴🕴\r򯋭Jb𔂆򚚕|¥.'", + "upper": "&\u000b𼏩?󘺵/\u0004" }, "2": { - "lower": "000018e131ee7498", - "upper": "00010292377186f8", - "kind": "packed-time" + "lower": "81e4a1dab45a8b6332575d572a28f67c", + "upper": "9675bd0874e353554bedd6affbdc4764", + "kind": "packed-interval", + "nulls": { + "$serde_json::private::Number": "1" + } } } } }, + { + "len": 5, + "cols": { + "err": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "5" + } + }, + "ok": { + "len": { + "$serde_json::private::Number": "5" + }, + "0": { + "lower": "326aede33b196a73c6faa212d93d5348", + "upper": "e72f2403f35ab0f94294e1a97f368677", + "kind": "packed-interval" + }, + "1": "NoneStats" + } + } + }, { "len": 4, "cols": { @@ -16129,31 +15878,34 @@ expression: all_stats "len": { "$serde_json::private::Number": "4" }, - "0": "NoneStats", - "1": { + "0": { "lower": { - "$serde_json::private::Number": "742433913" + "$serde_json::private::Number": "620768225" }, "upper": { - "$serde_json::private::Number": "3201382080" + "$serde_json::private::Number": "1947084091" + }, + "nulls": { + "$serde_json::private::Number": "2" } - } + }, + "1": "NoneStats" } } }, { - "len": 6, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" }, "0": { "nulls": { @@ -16162,8 +15914,17 @@ expression: all_stats "not nulls": "NoneStats" }, "1": { - "lower": "1d751f7807969d66f4c5f5b24a9b8a44889e1ee914f38c0e25e1b1bb6bf675c5e4a29b770efcb18c22dfb31fa2f0b428f630308dcbd1061c056d3f573f6d08006f9a1d62d4b70e4083f6c32fbfe8566b8c10c78db17c74f9c85d24bfa399f5d8b2ccf459", - "upper": "9eb49b21f7ba1db4739c4712fea2842c2663a9c7b9fa7b150d5bfeff8aa181cedb305ea4a9bb6a59552de393669c500911299c81980e50f555bbc074d1427a087a2ab215a2f1e101451a533d3eb7f455237aa65483a7857d42f10ed7f722d1c4fa1dd918" + "lower": "&\u0000\t‮�.L%'/󧐩?吗�𔆼&�y<񽫌P‮g:\"<򚑣\u000b񮽿*Ⱥ񽩱", + "upper": "*𼥫򺙶\r`\u001b򸬬󳻀𐘒𯯦򠸅J{\u0001mŽ" + "lower": "0000eb2a33ab2470", + "upper": "00011967174bf570", + "kind": "packed-time", + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "2": { + "lower": "37d6ce59db97ced8015d28058ea7b63d", + "upper": "c484aa7f545b8acaa785839ea657ee22", + "kind": "uuid" } } } }, { - "len": 4, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" }, - "0": "NoneStats" + "0": "NoneStats", + "1": "NoneStats" } } }, { - "len": 3, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" }, "0": { - "lower": "10000000f6ffffffb101e6024b0077002d0107000000000000000000000000000000800000000000", - "upper": "10000000f5ffffff7300f70138005300910205000000000000000000000000000000000000000000", - "kind": "packed-numeric" - }, - "1": { "lower": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6216" }, "upper": { - "$serde_json::private::Number": "99" + "$serde_json::private::Number": "58198" } + }, + "1": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" } } } }, { - "len": 1, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" }, "0": { - "nulls": { - "$serde_json::private::Number": "1" + "lower": { + "$serde_json::private::Number": "265085137" }, - "not nulls": "NoneStats" - } + "upper": { + "$serde_json::private::Number": "2692942694" + }, + "nulls": { + "$serde_json::private::Number": "2" + } + }, + "1": "NoneStats" } } }, { - "len": 3, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "2" }, "0": { - "lower": { - "$serde_json::private::Number": "9438011" + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "57370446" - } + "not nulls": "NoneStats" } } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, - "0": "NoneStats", - "1": { + "0": { "lower": { - "$serde_json::private::Number": "1068516546" + "$serde_json::private::Number": "3130153800" }, "upper": { - "$serde_json::private::Number": "1068516546" + "$serde_json::private::Number": "4083381042" } }, - "2": { - "lower": "v‮\"򭐳@􃋁s𵫊\u001b𕳄`&Ѩ:", - "upper": "v‮\"򭐳@􃋁s𵫊\u001b𕳄`&Ѩ:" + "1": { + "lower": "164f702c13690825cf857326b0bb489a", + "upper": "3b4a6023db8848237f3051f2a793fe81", + "kind": "uuid" } } } }, { - "len": 4, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" }, "0": { - "lower": { - "$serde_json::private::Number": "13399490" - }, - "upper": { - "$serde_json::private::Number": "3773344219" - } - }, - "1": { - "lower": { - "$serde_json::private::Number": "13869869618741862288" - }, - "upper": { - "$serde_json::private::Number": "16927159054129459030" - } - }, - "2": { - "lower": { - "$serde_json::private::Number": "-1605431015" - }, - "upper": { - "$serde_json::private::Number": "1690529883" - } + "lower": "\\񺟒*b??󡬢{\t構?jÑ‮\u000bé🕴\\𛫷–񿃫*4/󊲥K\n񽽫YȺѨ\\葩Z\"󝓛_<\t`b.&`Zs򞳢\\�‮Z🕴", + "upper": "򑈗􅲩\n=:`󵎉\\q󍷜󅖍\t=OCѨb\n*B=󞌡\\M\u001b*\"~&\"¥¥{$'/5{𡬄x<Ⱥ)񽁶񂯃<󲺝\u000bH󪿛Ⱥ.Ⱥ&)T\r\f" } } } }, { - "len": 7, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "5" }, "0": { - "nulls": { - "$serde_json::private::Number": "1" + "lower": { + "$serde_json::private::Number": "447451227" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "4271844906" + } }, "1": { "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "not nulls": "NoneStats" }, @@ -17241,382 +17109,327 @@ expression: all_stats } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, - "0": { - "lower": { - "$serde_json::private::Number": "1.196986642616556e175" + "0": "NoneStats", + "1": { + "nulls": { + "$serde_json::private::Number": "0" }, - "upper": { - "$serde_json::private::Number": "1.196986642616556e175" - } + "not nulls": "NoneStats" } } } }, { - "len": 7, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" }, "0": { "lower": { - "$serde_json::private::Number": "4230644038863761808" + "$serde_json::private::Number": "-2.120456e-24" }, "upper": { - "$serde_json::private::Number": "16797078297388657440" + "$serde_json::private::Number": "6.2672076e34" + } + }, + "1": { + "lower": { + "$serde_json::private::Number": "-3.2153028e28" }, - "nulls": { - "$serde_json::private::Number": "2" + "upper": { + "$serde_json::private::Number": "-0.0" } } } } }, { - "len": 3, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" }, "0": { - "lower": "=?Ⱥ\u0003􀍩𐿦􋅙\\G&", - "upper": "Q\u0006&.:󏨾󹩂󐳤=\u000b':񂿚\\Ѩ\t", + "lower": "" }, "2": { - "lower": "10000000f6ffffff95032c029c01d203d90209000000000000000000000000000000800000000000", - "upper": "10000000f6ffffff5b029f0117031d038a0106000000000000000000000000000000800000000000", - "kind": "packed-numeric", - "nulls": { - "$serde_json::private::Number": "1" + "lower": { + "$serde_json::private::Number": "192" + }, + "upper": { + "$serde_json::private::Number": "193" } } } } }, { - "len": 1, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "4" }, "0": { "lower": { - "$serde_json::private::Number": "388429" + "$serde_json::private::Number": "991203644546196303" }, "upper": { - "$serde_json::private::Number": "388429" + "$serde_json::private::Number": "13803869441307208521" } }, "1": { "lower": { - "$serde_json::private::Number": "3250406895" + "$serde_json::private::Number": "1193128911" }, "upper": { - "$serde_json::private::Number": "3250406895" - } - }, - "2": { - "lower": { - "$serde_json::private::Number": "0" - }, - "upper": { - "$serde_json::private::Number": "0" - }, - "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3438970422" } } } } }, { - "len": 6, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "6" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "6" - }, - "0": "NoneStats", - "1": "NoneStats" - } - } - }, - { - "len": 6, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "6" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "6" - }, - "0": "NoneStats", - "1": { - "lower": "$\u000b\"oIFKW񺫍�\b", - "upper": "񫳎o.<=D'¥򊃨$=򟎣%񞱫\u0000.n𭾄\\&%\u0000\u0000‘{񲓌򶒛" - }, - "2": { - "lower": "\u0000\\'񜴔{\u0000$", - "upper": "ѨP=\\{¥񏪌򿓚򢰱\u000b%\u0005`\"`8" - } - } - } - }, - { - "len": 6, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "7" }, "0": { "lower": { - "$serde_json::private::Number": "-1351142301" + "$serde_json::private::Number": "459712031" }, "upper": { - "$serde_json::private::Number": "2087991825" + "$serde_json::private::Number": "4024103319" }, "nulls": { "$serde_json::private::Number": "1" } }, - "1": "NoneStats" + "1": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + }, + "2": { + "lower": "8000ec3b00000152000133510a9394a0", + "upper": "8003886f0000008f00001a1919bed200", + "kind": "packed-date-time", + "nulls": { + "$serde_json::private::Number": "2" + } + } } } }, { - "len": 1, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" }, "0": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + "lower": "1bcfe3d083225cec4caf797e42ffe740", + "upper": "f8f0f2a90cb6d6d0561fb51cdd4b32b4", + "kind": "packed-interval" }, "1": { "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" } @@ -18166,24 +17979,22 @@ expression: all_stats } }, { - "len": 3, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" }, "0": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + "lower": "&\\򠲣=$<.虯󤅅%\u000brѨ7", - "upper": "¡=񱻯\t<.Ⱥ;&𻧨:\r𥨚x" - }, - "2": { - "lower": "\u000b¥`~¥'lgC\u0000\"", - "upper": "&񟔐Ⱥ‮:񨍴\u001bC\t\\-\t�\u001b񉱏'Ѩ<񪏱􊤠?%\u000b¸ˆ!<ȺBg򯌰?" + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } @@ -19374,48 +19273,42 @@ expression: all_stats }, "0": { "lower": { - "$serde_json::private::Number": "435531731" + "$serde_json::private::Number": "2535186305795674480" }, "upper": { - "$serde_json::private::Number": "4036748697" + "$serde_json::private::Number": "15549144137683317926" } }, - "1": { - "lower": { - "$serde_json::private::Number": "2057177601" + "1": "NoneStats", + "2": { + "nulls": { + "$serde_json::private::Number": "2" }, - "upper": { - "$serde_json::private::Number": "3450023695" - } + "not nulls": "NoneStats" } } } }, { - "len": 1, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" }, "0": { "nulls": { "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" - }, - "1": { - "lower": "\"o/M$�|k9󘘉\u0000", - "upper": "\"o/M$�|k9󘘉\u0000" - }, - "2": "NoneStats" + } } } }, @@ -19435,218 +19328,101 @@ expression: all_stats }, "0": { "lower": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "1825589947" }, "upper": { - "$serde_json::private::Number": "0" - }, - "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "1825589947" } - } + }, + "1": "NoneStats", + "2": "NoneStats" } } }, { - "len": 1, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" }, - "0": "NoneStats", - "1": { - " 󛸕5.\\^\tȺ/􏩰\b.%{\"󄬖{$~ 򔌕Ⱥm\u0003]\r!?": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" - }, - ":򗙹𳫟򔻡.": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201160a14882198035551253400000000000000000000000c", - "upper": "c201160a14882198035551253400000000000000000000000c" - } - }, - "?8񀡜�:\\?񽗲򶼽/𱰛򒡢*#\t¥򁺃񿤱8𺖦󻢹": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": true, - "upper": true - } - }, - "/r\u001b%lȺ?x¥*&‹4\u001b": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" - }, - "<�\u0003%^񫪇󹢠X‮ѨѨ`d\u001b\tW]򍠟ȺmU򝳴\r🕴Kᆳ<𤢤": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201160a14768278148029691600000000000000000000000c", - "upper": "c201160a14768278148029691600000000000000000000000c" - } - }, - "M{o!H򾑗\u000b𝔩?뮂>k•:\tѨ<򔇫󑒭\r\u0007ü": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": false, - "upper": false - } - }, - "{񍩫`򊈻񽸚'󨃺~񱷅\u0005=K[^`\u0003": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "rg*󖱿\u001b\t񶭮\u0000𑬾\b{&", - "upper": "rg*󖱿\u001b\t񶭮\u0000𑬾\b{&" - } - }, - "􈃸9$🕴.": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" - } - } - }, - "?Wh3/\tѨ¸򓻼k󺏘Ⱥ\"Ѩ񘪖": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201160a14051729430800859194748390273685201362787d", - "upper": "c201160a14051729430800859194748390273685201362787d" - } - }, - "{'�𤦓¥#$󅸖򮋊Ê?]\u0007Ⱥ": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201150a134500256583898834163395356519170413717d", - "upper": "c201150a134500256583898834163395356519170413717d" - } - }, - "𝋘‮񒶧\u0001\u000b񨥁򡤺񧜠󰕮:񗏮\t󘿄m\u0000񶞪񯖖?󵼖򚑘‮𦿸򜖦cѨCF'": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "%-<\t�񭫑\ra\r*w\\򑪒9\u0007Ü", - "upper": "\\񕽣‮\u001b .\u000b\u0002󳇔�$򺂧񦢗*\\.Uu>\ra\r*w\\򑪒9\u0007Ü" - } + "upper": { + "$serde_json::private::Number": "4183464551" } }, - "2": { + "1": { "lower": { - "$serde_json::private::Number": "466672930801059707" + "$serde_json::private::Number": "349223466" }, "upper": { - "$serde_json::private::Number": "466672930801059707" + "$serde_json::private::Number": "2569325701" + }, + "nulls": { + "$serde_json::private::Number": "1" } } } } }, { - "len": 5, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" }, "0": { "lower": { - "$serde_json::private::Number": "304677426" + "$serde_json::private::Number": "-1.430979366997704e260" }, "upper": { - "$serde_json::private::Number": "2482682312" + "$serde_json::private::Number": "9.32497643528777e213" } } } } }, { - "len": 1, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" }, "0": { "lower": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "15496315" }, "upper": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "48486610" }, "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } } } @@ -19668,208 +19444,160 @@ expression: all_stats }, "0": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" }, "1": { - "lower": "800229a9000001500000ba20160b8a18", - "upper": "800229a9000001500000ba20160b8a18", - "kind": "packed-date-time" + "lower": "8c3322c7fd29875bcb473a427051e366f3a3700c6204bd67b0f9051e54faac430c4f7fe8fc514a22736cda6824ffc21bb91c0bdc51fc543628b51b8586dd5268f3902cae4febba8beb10175b6e82364c696ae599c37b5bcf5e9c658d17d9ac1c5a51c7b5", + "upper": "8c3322c7fd29875bcb473a427051e366f3a3700c6204bd67b0f9051e54faac430c4f7fe8fc514a22736cda6824ffc21bb91c0bdc51fc543628b51b8586dd5268f3902cae4febba8beb10175b6e82364c696ae599c37b5bcf5e9c658d17d9ac1c5a51c7b6" }, "2": { - "lower": "d715b88852c4e1cf1c2a0193b41f2c58", - "upper": "d715b88852c4e1cf1c2a0193b41f2c58", - "kind": "uuid" + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } }, { - "len": 1, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" }, "0": { - "lower": { - "$serde_json::private::Number": "2483052199" + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "2483052199" - } + "not nulls": "json_mixed" }, - "1": "NoneStats" + "1": { + "lower": "%`𐮽񀏘򠁵뎍󵪴Ⱥ*𬐛‮󯎊", + "upper": "񥗁🕴{󤟝󷑽^W񹌪ȺLh`򇀀kI%\"\u0001\\[🕴\u0001", + "nulls": { + "$serde_json::private::Number": "1" + } + } } } }, { - "len": 1, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" }, - "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - }, - "1": { - "lower": { - "$serde_json::private::Number": "0" - }, - "upper": { - "$serde_json::private::Number": "0" - }, - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "2": "NoneStats" + "0": "NoneStats" } } }, { - "len": 1, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" }, "0": { - "lower": { - "$serde_json::private::Number": "0" - }, - "upper": { - "$serde_json::private::Number": "0" - }, - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "1": { - "lower": { - "$serde_json::private::Number": "10390604715057022288" - }, - "upper": { - "$serde_json::private::Number": "10390604715057022288" - } + "lower": "2700000000000000340236025d01a5020d03eb01a002970300020b003703cb016e00800000000000", + "upper": "1000000017000000eb01050012024703820107000000000000000000000000000000000000000000", + "kind": "packed-numeric" } } } }, { - "len": 7, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "1" }, "0": { + "lower": "00000000000000000000000000000000", + "upper": "00000000000000000000000000000000", + "kind": "uuid", "nulls": { - "$serde_json::private::Number": "2" - }, - "not nulls": "json_mixed" - }, - "1": { - "lower": "785b3a219ba576dbb23e5be80afda543", - "upper": "ee8c65a3195133fcac25a20d8fddafa9", - "kind": "packed-interval", - "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, - "2": { - "lower": "abd29aa2e6208db1e81930a79373decc", - "upper": "e97c399b87ea11117a57f7da5a983628", - "kind": "packed-interval", + "1": { "nulls": { - "$serde_json::private::Number": "3" - } + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } }, { - "len": 2, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" }, "0": { "lower": { - "$serde_json::private::Number": "1541292447" + "$serde_json::private::Number": "5603" }, "upper": { - "$serde_json::private::Number": "3133226395" + "$serde_json::private::Number": "50412" } }, "1": { - "lower": "$򺌎KE&a\u001b򧨥D\tq🜯Ⱥ\"X", - "upper": "񔿸�񱨛򗪍񢡔𜐄*" - } - } - } - }, - { - "len": 5, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "5" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "5" + "lower": { + "$serde_json::private::Number": "2760781173318393118" + }, + "upper": { + "$serde_json::private::Number": "3394638539067600063" + } }, - "0": { + "2": { "lower": { - "$serde_json::private::Number": "12814832" + "$serde_json::private::Number": "-319939424" }, "upper": { - "$serde_json::private::Number": "3455026983" + "$serde_json::private::Number": "1005302302" }, "nulls": { "$serde_json::private::Number": "1" @@ -19892,69 +19620,112 @@ expression: all_stats "len": { "$serde_json::private::Number": "4" }, - "0": "NoneStats" + "0": "NoneStats", + "1": { + "lower": "15bd4b40852b445a872d7cf3fdfd1f57", + "upper": "f8023799a6cf01abbf526356376e9811", + "kind": "uuid" + }, + "2": { + "lower": "'\t‮V\u000b𚼭𜄢N", + "upper": "L\u0004/򇯋‮6", + "nulls": { + "$serde_json::private::Number": "2" + } + } } } }, { - "len": 2, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" }, - "0": { - "lower": "'J񺣔", - "upper": "Ѩ🕴F%" - } + "0": "NoneStats" } } }, { - "len": 7, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "3" }, - "0": "NoneStats" + "0": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + }, + "1": { + "lower": { + "$serde_json::private::Number": "-5023" + }, + "upper": { + "$serde_json::private::Number": "14336" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "2": { + "lower": { + "$serde_json::private::Number": "11" + }, + "upper": { + "$serde_json::private::Number": "243" + } + } } } }, { - "len": 2, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" }, "0": { - "lower": "\\\r2\t?l��.0𰤁‮tP󴱷H'", - "upper": "" + "lower": { + "$serde_json::private::Number": "-3.1907289e-18" + }, + "upper": { + "$serde_json::private::Number": "1.1149066e17" + } }, - "1": "json_lists", - "2": "NoneStats" + "1": { + "lower": "3ecdc1b40279525f7765bc0a4e6488ae", + "upper": "9f0faa2b5d1bcb3e8e6947e43efb5a64", + "kind": "packed-interval", + "nulls": { + "$serde_json::private::Number": "1" + } + } } } }, @@ -19972,92 +19743,81 @@ expression: all_stats "len": { "$serde_json::private::Number": "7" }, - "0": "NoneStats", + "0": { + "lower": ">Ó\t`\u001b2\u000b=", + "upper": "񺷉𧙡'.񨴓�% ¶󟎑{𿀗¥𸕿=�$\r3W�k7񖠠\\\u0000𾦲.%" + }, "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "lower": "009c6e44d674006d1629bc89523b0fec5da73a7beb6e68c12f8761f0b1921a02b08756c1a31843fb0cf703ffaf1c13b99d9d34154052d7dd4dcd3886a768223a8b754e800cd703655aec11d814936645e65e1675cfa9442e55f0b9ae1931fba6854d5641", + "upper": "cc3100a33e64d457171bbed4bab0150089e71a28a93d8fff0704b65073d19df8951add2513cafe7e32beabbabc1247d8338b61a75cf8bf1cc1197ac96c2c84f5bd7de0f9825d01c71199f23c81caa8224fe2e120627d6883cfc757dd601663ee7030f55f" }, "2": { - "lower": { - "$serde_json::private::Number": "8324859" - }, - "upper": { - "$serde_json::private::Number": "51840099" - } + "lower": "187c8c7af90c652850107c19bc60eab1", + "upper": "de7ede9a0e357227164ae96902e03afb", + "kind": "packed-interval" } } } }, { - "len": 5, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "2" }, "0": { - "lower": { - "$serde_json::private::Number": "386841069" + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "3622653318" - } + "not nulls": "NoneStats" }, "1": { "lower": { - "$serde_json::private::Number": "20614794" + "$serde_json::private::Number": "750923645" }, "upper": { - "$serde_json::private::Number": "92451705" + "$serde_json::private::Number": "750923645" + }, + "nulls": { + "$serde_json::private::Number": "1" } - }, - "2": { - "lower": false, - "upper": true } } } }, { - "len": 7, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "2" }, "0": { - "lower": { - "$serde_json::private::Number": "3244640993113274935" - }, - "upper": { - "$serde_json::private::Number": "4947202609575712764" - }, "nulls": { "$serde_json::private::Number": "2" - } + }, + "not nulls": "NoneStats" }, "1": "NoneStats", "2": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + "lower": "8001bd7d0000010200013bc70de4b3a0", + "upper": "8002112c000001060000dad81f7c2288", + "kind": "packed-date-time" } } } @@ -20078,49 +19838,66 @@ expression: all_stats }, "0": { "lower": { - "$serde_json::private::Number": "-1381817015232102155" + "$serde_json::private::Number": "41143" }, "upper": { - "$serde_json::private::Number": "2924704868345785686" + "$serde_json::private::Number": "64949" }, "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "2" } }, - "1": "NoneStats", - "2": { - "lower": "\r򏜾F񩾘/", - "upper": "񑠶AÔ%Ⱥ󢚠󘐇S\"`\u0000‮󗩾\u000bN<򿚱Ѩ𯱍񷏀\t𫘒:/p󕟨 \u0004", + "1": { "nulls": { "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + }, + "2": { + "lower": { + "$serde_json::private::Number": "741145274" + }, + "upper": { + "$serde_json::private::Number": "4001036162" + }, + "nulls": { + "$serde_json::private::Number": "2" } } } } }, { - "len": 3, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" }, "0": { "lower": { - "$serde_json::private::Number": "-1.927084e-29" + "$serde_json::private::Number": "1500722153" }, "upper": { - "$serde_json::private::Number": "7.4826524e-28" + "$serde_json::private::Number": "3356008701" } }, "1": { + "lower": { + "$serde_json::private::Number": "5.3617384e-28" + }, + "upper": { + "$serde_json::private::Number": "7.976814e16" + } + }, + "2": { "nulls": { "$serde_json::private::Number": "0" }, @@ -20130,20 +19907,24 @@ expression: all_stats } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "0": { + "lower": "4d817eb6c99ad50512cb402252cf6ea4a7ceef30570d046b8a0f84dd637f1ff5fbf3882875aa92f34b351ca8cf085489bb113bf5f8a5bffd25bbfa7205c252038b67d90be206c2a1ddad5f88c235890cd6a07d8dc607dad7f2efa7483cd263f43cc3676d", + "upper": "fff7bbee64c5c8cea6cf73fbfc9016485ca97561101dcffdd63cc7bab4c97c467a21f3d08314e482ce4dee3cb157677a2dc9dd6ef8edb7933eb9cf46aedca5935ded2229cbe241ac06d7891eb3de630a5336c3f712a3c7063691ea59b052b56dc750eb52" + }, + "1": { "nulls": { "$serde_json::private::Number": "0" }, @@ -20166,154 +19947,146 @@ expression: all_stats "len": { "$serde_json::private::Number": "4" }, - "0": { + "0": "NoneStats", + "1": { "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" - }, - "1": { - "lower": "51b22b6015f834d700790bfaf01f7a53fca14972b3c3ed84597fedbe3e694192156b378df4693b2acd554450a0208df15698bb148867ce68388d2025224dc39cb6f5fea662495e80f6b0e2d55fe010459bc9214bd6b216305f121e023f77195dfc468e44", - "upper": "f88ef0bb95017923f9d09ccfddcb1dd9ae6714a24b32633d0b163faf2ee8b29c8d27959aea5610f11b01e7c7bc2b3dac9529e92412056362c243accff45e0a392d512b9a21f98d2ef7708f8dab177b20b72c38461a10e9976bc279e92ef72de469456996" } } } }, { - "len": 3, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "3" - }, - "0": { - "lower": { - "$serde_json::private::Number": "2238944939" - }, - "upper": { - "$serde_json::private::Number": "3946788309" - } + "$serde_json::private::Number": "4" }, + "0": "NoneStats", "1": { "nulls": { "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" + }, + "2": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" } } } }, { - "len": 4, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" }, "0": { - "lower": "1c2b39883e5d6972c52bfd6c2d8d3afe", - "upper": "a935729f247e31d2cc5997dc31cc36f9", - "kind": "packed-interval", - "nulls": { - "$serde_json::private::Number": "1" - } + "lower": "=‮?{\"A*\\\u000b🕴򿴡񄲡]䎘??'q=򪸍񑎱%񈷶񱈉񘀛򇭓Ci\r¡󕬻󊏼A𵛞\rtk񼴩\nȺ*", - "upper": "򭤍񈩓󏜔A\\B‮", - "upper": "񻼢+󩙨?𔠺򨅘ër\rSѨ򖤏Ѩ*l:�\u000b", - "nulls": { - "$serde_json::private::Number": "1" - } - } + "0": "NoneStats" } } }, { - "len": 5, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "6" }, - "0": "NoneStats", - "1": { + "0": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" }, - "2": "NoneStats" + "1": "NoneStats" } } }, { - "len": 3, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" }, - "0": "NoneStats" - } - } - }, - { - "len": 7, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "7" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "7" + "0": { + "lower": "\n=򓧹\u001b6u᪻?񎎌𠮓\\P򾱿򼯖", + "upper": "򂡓/YȺ�𮦥\\󰂎`\"򺭒񃄷‮?@񑢟`𛈘=𼶇¼\u000b󱦶&\u0000'󟣨<\nÔ&򁷑🟪t\u0000:񏚔–&\u0000\"󜒨" }, - "0": "NoneStats", - "1": "NoneStats" + "1": { + "lower": "2600000000000000cb014103d2036a0238028d01b40390018e0049000c0143035a00800000000000", + "upper": "0f00000018000000c7035200ab025c00330300000000000000000000000000000000000000000000", + "kind": "packed-numeric", + "nulls": { + "$serde_json::private::Number": "1" + } + } } } }, { - "len": 3, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" }, - "0": "json_mixed", - "1": { - "nulls": { - "$serde_json::private::Number": "0" + "0": { + "lower": { + "$serde_json::private::Number": "-1455144908" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "2115011864" + } }, - "2": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - } + "1": "NoneStats" } } }, @@ -24585,82 +24249,74 @@ expression: all_stats "$serde_json::private::Number": "2" }, "0": { - "lower": "I񿸲\t%򒛲", - "upper": "𡗆\"Ѩ'&\"$򾤤:*񯠛􅏅=`𕮢=\u0006'" - }, - "1": { "lower": { - "$serde_json::private::Number": "12632" + "$serde_json::private::Number": "0.0" }, "upper": { - "$serde_json::private::Number": "45770" + "$serde_json::private::Number": "0.19805127" } } } } }, { - "len": 4, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "3" }, - "0": "NoneStats", - "1": { + "0": { "lower": { - "$serde_json::private::Number": "24460" + "$serde_json::private::Number": "1957652540" }, "upper": { - "$serde_json::private::Number": "35410" + "$serde_json::private::Number": "1957652540" + }, + "nulls": { + "$serde_json::private::Number": "2" } - }, - "2": "NoneStats" + } } } }, { - "len": 3, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" }, "0": { - "lower": { - "$serde_json::private::Number": "108" - }, - "upper": { - "$serde_json::private::Number": "208" - } + "lower": "8000324000000055000055b9244e01a0", + "upper": "8003ba5a000001420000cd0d265ed488", + "kind": "packed-date-time" }, "1": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "2" }, - "not nulls": "NoneStats" + "not nulls": "json_mixed" }, "2": { - "lower": { - "$serde_json::private::Number": "-6781291964862885387" + "nulls": { + "$serde_json::private::Number": "0" }, - "upper": { - "$serde_json::private::Number": "6737995431696620630" - } + "not nulls": "NoneStats" } } } @@ -24680,10 +24336,12 @@ expression: all_stats "$serde_json::private::Number": "5" }, "0": { + "lower": "800089030000010100013f8e3b74eab0", + "upper": "8003b2090000000c00008c94267492f0", + "kind": "packed-date-time", "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "1" + } } } } @@ -24703,76 +24361,73 @@ expression: all_stats "$serde_json::private::Number": "4" }, "0": { - "lower": "26000000000000009c022600dc011d0119029e0064020700a1011103e10252011100800000000000", - "upper": "01000000000000000000000000000000000000000000000000000000000000000000200000000000", - "kind": "packed-numeric" - }, - "1": { "lower": { - "$serde_json::private::Number": "-770052856" + "$serde_json::private::Number": "-9.374045e-39" }, "upper": { - "$serde_json::private::Number": "2118247268" - }, - "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "0.0015300695" } } } } }, { - "len": 3, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" }, "0": { - "lower": { - "$serde_json::private::Number": "-1521587346" + "nulls": { + "$serde_json::private::Number": "2" }, - "upper": { - "$serde_json::private::Number": "679056016" - } + "not nulls": "NoneStats" } } } }, { - "len": 3, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" }, "0": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + }, + "1": { "lower": { - "$serde_json::private::Number": "633119564" + "$serde_json::private::Number": "25096363" }, "upper": { - "$serde_json::private::Number": "4089114000" + "$serde_json::private::Number": "3448581840" } }, - "1": { + "2": { + "lower": ".?\u0004򧱩\u001b󀣰*==a%\u0005󬀨\\\u0000~񨦇\u0000", + "upper": "vȺ\u001bZ𤆈򬙵'󡡆񳙲Ý󕜽=%=", "nulls": { "$serde_json::private::Number": "2" - }, - "not nulls": "NoneStats" + } } } } @@ -24793,116 +24448,137 @@ expression: all_stats }, "0": { "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" }, "1": { - "lower": "c4bba97105fed5e2182866a1482a26f5", - "upper": "c4bba97105fed5e2182866a1482a26f5", - "kind": "packed-interval" + "lower": "10000000f6ffffff94004403000151024e0303000000000000000000000000000000800000000000", + "upper": "10000000f6ffffff94004403000151024e0303000000000000000000000000000000800000000000", + "kind": "packed-numeric" + }, + "2": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } }, { - "len": 2, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" }, "0": { - "lower": "00003ae40ce80bf0", - "upper": "0000fe07188753d0", - "kind": "packed-time" + "lower": { + "$serde_json::private::Number": "936718526764831957" + }, + "upper": { + "$serde_json::private::Number": "17750782460331519555" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "1": { + "nulls": { + "$serde_json::private::Number": "2" + }, + "not nulls": "NoneStats" } } } }, { - "len": 3, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "4" }, "0": { - "lower": { - "$serde_json::private::Number": "7911716380442151832" - }, - "upper": { - "$serde_json::private::Number": "17722052358174072298" - }, + "lower": "30f85d297c59ab09c9d6b77a95ababcd", + "upper": "f6e3555c9ef8302e3527d5d50a42cb92", + "kind": "uuid", "nulls": { "$serde_json::private::Number": "1" } }, - "1": "NoneStats" + "1": { + "nulls": { + "$serde_json::private::Number": "3" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 7, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "2" }, - "0": "NoneStats", - "1": { - "lower": { - "$serde_json::private::Number": "18" - }, - "upper": { - "$serde_json::private::Number": "248" - } + "0": { + "lower": "59df7a62f6d2b5cbc66c3bb17155d535", + "upper": "ced5d3c356c435d8549a6ca4d1aa536a", + "kind": "packed-interval" + }, + "1": "NoneStats", + "2": { + "lower": "8002baa2000000ad000060d002477b18", + "upper": "8002c260000000610001517a0e5dc3d0", + "kind": "packed-date-time" } } } }, { - "len": 6, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" }, "0": "NoneStats", "1": { - "lower": "%\\Ѩ󃨞*`_%‮¥󆁈?𷠋/\t¥*a󿅢%", - "upper": "Ѩ?𦉠?‮n", "nulls": { - "$serde_json::private::Number": "1" - } + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } @@ -24921,216 +24597,276 @@ expression: all_stats "len": { "$serde_json::private::Number": "2" }, - "0": "NoneStats" + "0": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 1, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" }, "0": { - "lower": "\u000b􇶲🕴\u001b,\u0000»$t%\b9™%", - "upper": "\u000b􇶲🕴\u001b,\u0000»$t%\b9™%" + "lower": "\"&J/򈸾!\"\u0000", + "upper": "񩸸`\u0003\u0006򠨍`&%򓹲:" }, "1": { - "nulls": { - "$serde_json::private::Number": "1" + "lower": { + "$serde_json::private::Number": "268100426" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "2392629484" + }, + "nulls": { + "$serde_json::private::Number": "2" + } }, "2": { "lower": { - "$serde_json::private::Number": "1403256035" + "$serde_json::private::Number": "274098241" }, "upper": { - "$serde_json::private::Number": "1403256035" + "$serde_json::private::Number": "3996439262" } } } } }, { - "len": 2, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" }, "0": { - "lower": "80005a0d000000900000ec823a5b1258", - "upper": "8000ad320000010e0000d75f26719550", - "kind": "packed-date-time" + "nulls": { + "$serde_json::private::Number": "2" + }, + "not nulls": "NoneStats" + }, + "1": { + "lower": "07f31dfc91a05f049b8c881c6b37435660d86ab2e05dc153b29a3ca969e1eac3d36c1e1f58de2047e0d8df8f8bc46f6c949f0081cbdbdbc1cb5f8948bb61889ae0c1f279a3ddc6c3d769bd526c0c6cecea1ed6b4c3f66376cf36d4693d9c01457f562706", + "upper": "e3af8a13bce4d0f80398aaf0f331db6d7a4212e29d4336f5d8e362781a9076a9146f1339e8beacec6f3437b743e269102ae886f3da3d0545d736045f59e07690728d8bd1d5d55eb335cd950e46ddf55a871b34800b0f2e061b7807cd88811c531465f620" + }, + "2": { + "nulls": { + "$serde_json::private::Number": "3" + }, + "not nulls": "NoneStats" } } } }, { - "len": 1, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" }, "0": { - "lower": "000016ce2132a458", - "upper": "000016ce2132a458", - "kind": "packed-time" + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + }, + "1": { + "lower": { + "$serde_json::private::Number": "-2.8940342e32" + }, + "upper": { + "$serde_json::private::Number": "0.0" + }, + "nulls": { + "$serde_json::private::Number": "2" + } + }, + "2": { + "lower": "06000000000000006f02460300000000000000000000000000000000000000000000800000000000", + "upper": "0600000000000000ef00f20100000000000000000000000000000000000000000000000000000000", + "kind": "packed-numeric" } } } }, { - "len": 6, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "7" }, - "0": { + "0": "NoneStats", + "1": { + "lower": { + "$serde_json::private::Number": "5662313116959763503" + }, + "upper": { + "$serde_json::private::Number": "17918995281998745649" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "2": { "lower": { - "$serde_json::private::Number": "838725825559044220" + "$serde_json::private::Number": "1242592129" }, "upper": { - "$serde_json::private::Number": "9964358325867884980" + "$serde_json::private::Number": "3979671140" + }, + "nulls": { + "$serde_json::private::Number": "3" } } } } }, { - "len": 6, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "6" - }, - "0": { - "lower": "0f000000f7ffffffb8035700ab01a602030200000000000000000000000000000000800000000000", - "upper": "260000000000000028010501a303de03870063018a03c4033e0292027a022e032500000000000000", - "kind": "packed-numeric" + "$serde_json::private::Number": "4" }, + "0": "NoneStats", "1": { "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" }, "not nulls": "NoneStats" }, "2": { - "nulls": { - "$serde_json::private::Number": "2" - }, - "not nulls": "NoneStats" + "lower": "=\u001b񳸨\u0000w&.|$W='􇜑:'񖕞zn\u000bI*򎭪Ûn𛸆\r=;]$󾆾򕊿H%<=󩄜󂇌?\u001b/3񂰘<\"\u000bȺdC񗴵_{\"򮴋/", + "upper": "\\𱕽\t:󶨗Ѩ񧯨󭯞:�𔡥*r<󲗒*\n򐣃򱂷𑽵∦=.􊚵󇽻􈂈'.\n$🕴'.\nȺk🕴򢼇󤏓FH'" } } } }, { - "len": 2, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "4" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": "33535976bfef08fbeed04ad6640ee8514a67cc41b4c5a3de32cc538f96f1202b085bce3bb0c26e80fc72fa42a220eb7b14af74d4a471294faf29787946d5d11a0193af2c3390a156484705601f07f9efc027c7a2027ad8973299a82e0d3a5dc8434e5825", + "upper": "c4729e02c09009b63ed779a771659bf76799e253c597d7f1cf7525e358d07203e29ee6917c2beb921e264fa46e18247783852fc19111e2428347f39faffc930a826a27123487c33e89e1d0b3a87f636b862047000cb17361efcfb2bc0c14fe1378a718f9" + }, + "1": { + "lower": { + "$serde_json::private::Number": "206136046" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "313259794" + }, + "nulls": { + "$serde_json::private::Number": "2" + } } } } }, { - "len": 2, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" + }, + "0": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" }, - "0": "NoneStats", "1": { - "lower": ".A.v" } } } }, { - "len": 7, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "3" }, "0": { - "lower": { - "$serde_json::private::Number": "1670485054" - }, - "upper": { - "$serde_json::private::Number": "4135757907" - } - }, - "1": { "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - }, - "2": { - "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" } @@ -25894,179 +25635,181 @@ expression: all_stats } }, { - "len": 5, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "3" }, "0": "NoneStats" } } }, { - "len": 5, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" }, "0": { - "lower": { - "$serde_json::private::Number": "324732967" - }, - "upper": { - "$serde_json::private::Number": "3498097473" - } - }, - "1": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - }, - "2": { "nulls": { "$serde_json::private::Number": "0" }, - "not nulls": "json_mixed" + "not nulls": "NoneStats" } } } }, { - "len": 2, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "3" }, "0": { - "lower": ":??+\u0000ȺH<%", - "upper": "Ѩ\u0000񧭥ౘ2@&{\u0000􈘸Ë.\tg:" + "lower": { + "$serde_json::private::Number": "27357073" + }, + "upper": { + "$serde_json::private::Number": "70355013" + } }, "1": { "lower": { - "$serde_json::private::Number": "2410879674" + "$serde_json::private::Number": "2609315985" }, "upper": { - "$serde_json::private::Number": "2624347002" + "$serde_json::private::Number": "2854329686" } - } + }, + "2": "NoneStats" } } }, { - "len": 6, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" }, "0": { "lower": { - "$serde_json::private::Number": "97" + "$serde_json::private::Number": "948331823" }, "upper": { - "$serde_json::private::Number": "243" + "$serde_json::private::Number": "948331823" }, "nulls": { "$serde_json::private::Number": "1" } - }, - "1": { - "lower": { - "$serde_json::private::Number": "663342312" - }, - "upper": { - "$serde_json::private::Number": "2919088619" - } } } } }, { - "len": 4, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "5" + }, + "0": "NoneStats" + } + } + }, + { + "len": 1, + "cols": { + "err": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "ok": { + "len": { + "$serde_json::private::Number": "1" }, "0": { "lower": { - "$serde_json::private::Number": "7232634100089542743" + "$serde_json::private::Number": "2185569119" }, "upper": { - "$serde_json::private::Number": "17015822655559794486" + "$serde_json::private::Number": "2185569119" } }, - "1": { + "1": "NoneStats", + "2": { "lower": { - "$serde_json::private::Number": "1982428495" + "$serde_json::private::Number": "0" }, "upper": { - "$serde_json::private::Number": "3672402292" + "$serde_json::private::Number": "0" + }, + "nulls": { + "$serde_json::private::Number": "1" } - }, - "2": "NoneStats" + } } } }, { - "len": 5, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "2" }, - "0": "NoneStats", - "1": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" + "0": { + "lower": "00002e1f11559f40", + "upper": "00011c6d14db3bc0", + "kind": "packed-time" } } } @@ -26086,457 +25829,291 @@ expression: all_stats "$serde_json::private::Number": "7" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "124656035807802463" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "15751564137310386318" + }, + "nulls": { + "$serde_json::private::Number": "1" + } }, "1": { "lower": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "99708214" }, "upper": { - "$serde_json::private::Number": "245" + "$serde_json::private::Number": "3474391568" } + } + } + } + }, + { + "len": 3, + "cols": { + "err": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "3" + } + }, + "ok": { + "len": { + "$serde_json::private::Number": "3" + }, + "0": { + "lower": "80018f1300000113000140c833e4e598", + "upper": "800291ca000000f20000820c2a111aa0", + "kind": "packed-date-time" + }, + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + } + } + } + }, + { + "len": 5, + "cols": { + "err": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "5" + } + }, + "ok": { + "len": { + "$serde_json::private::Number": "5" + }, + "0": "NoneStats", + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" }, "2": { - "": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" + "nulls": { + "$serde_json::private::Number": "2" }, - "\u0000*g񳫂'ȺŽ??o\u001b:�G?¥'\t\u0002Ⱥs7\"\"🕴'𦊙Q񁷡\"\u0000Ⱥ{󅝗\u000b%³": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "‮\u0000Ⱥ\t򶌢y񇐜R‮%*y²*", - "upper": "‮\u0000Ⱥ\t򶌢y񇐜R‮%*y²*" - } - }, - "F䱊-n-‮􇺈Ⱥ$i": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": {} - }, - "G�>`\u0006<򌦉\tѨ�ᄑ=": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" - }, - "\\Ô󉲐\"󲳻c": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_lists" - }, - "{񙿦􁋑Î\u0007򀐎`\bl`󁇖š¥>񑰂*%󹖝�{\"):‮\u000b𤫁?󡚹": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" - }, - "Ⱥ𚄘": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "", - "upper": "" - } - }, - "�=Ѩ\u0001*𾡒󭳹.*Ѩ\tl󟾖ƒ?񲤚\u001bHU": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "\u001bq🕴\r<\u0000=W`uú󫫲🕴[c&򓑾{Ç.i8󎩪`𺠞 \u0005񈉑{", - "upper": "\u001bq🕴\r<\u0000=W`uú󫫲🕴[c&򓑾{Ç.i8󎩪`𺠞 \u0005񈉑{" - } - }, - "🊾Ⱥ󚍢{&`\t\u000b\u0001d)7`񝸉􈉓=%": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": {} - }, - "🕴񠊳??\\[0*򈌅\u0007H<񚖰A_𫢺󑭀'􀈭򕼱󆱨¥<𛁊Ⱥ\u0004": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201160a14919383514119312000000000000000000000000c", - "upper": "c201160a14919383514119312000000000000000000000000c" - } - }, - "񄌋Ⱥ𠏏{򮠸%$\u0007p:‮7^\u001bѨ‮\u0000�¥\t򘔮$*A:]@򽃫": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201160a14112129178910678382336186128091635176036d", - "upper": "c201160a14112129178910678382336186128091635176036d" - } - }, - "򽽒ᅅQ󥍮:<\u001b򧟫\r󓯶򷊾:\u000b򤴫": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": false, - "upper": false - } - }, - "򾚀𵶒\"\u0001": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": true, - "upper": true - } - }, - "􈣳\u0005)򣙦": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": true, - "upper": true - } + "upper": { + "$serde_json::private::Number": "3526448235" }, "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" } } } } }, { - "len": 1, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" }, "0": { - "lower": "&񪹿󗽄�򛪛\u0002", - "upper": "&񪹿󗽄�򛪛\u0002" - }, - "1": { - "lower": "80000000800000008000000000000000", - "upper": "80000000800000008000000000000000", - "kind": "packed-interval", - "nulls": { - "$serde_json::private::Number": "1" - } + "lower": "00005ed204693620", + "upper": "00013f0007193320", + "kind": "packed-time" } } } }, { - "len": 7, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "3" }, "0": { - "lower": { - "$serde_json::private::Number": "51143023" - }, - "upper": { - "$serde_json::private::Number": "2564724017" - } + "lower": "Õ󶬻‮񜾋𳦟&🕴WѨkD'\"@", + "upper": "�B0Ⱥc`S\u001b&îW" }, "1": { - "lower": "\t/Ѩ\\\u0001K􈠓~`i\u001b𲇡", - "upper": "󥪲`Fl񦦎\u000bh‮\u000b" + "lower": "80003ce40000001400013bf6204eb8b0", + "upper": "8003fb2b0000003a000122bb14ca4018", + "kind": "packed-date-time" } } } }, { - "len": 2, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" }, - "0": { - "lower": "676929e6349ee5c742bb5a67a351fc1e", - "upper": "93116819641ab02bdc328fdd13f16ea3", - "kind": "uuid" - } - } - } - }, - { - "len": 4, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "4" + "0": "NoneStats", + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } - }, - "ok": { - "len": { - "$serde_json::private::Number": "4" - }, - "0": "NoneStats" } } }, @@ -26555,33 +26132,49 @@ expression: all_stats "$serde_json::private::Number": "7" }, "0": { - "lower": "2f45d1bbc433ec307efcc6aa77e902880f9ad15cdd816f1905a79d12f49fc3a483be43af72ab1054c3640eb2d5bacccf6a61d9953f115e7666dad66c2d2cf75f3a85606af59b8bd45b0261c4e6c91f078680c62a7b44ed74927931568ed1541d2f2e4fb7", - "upper": "ec1992fc9e69fcce70c0df4b58aa3ec3d6b4e7e0b15e245ef4ec12b72003ea88e7986e93e630e43ceccc8285a8b8e675a25cb4cd6e2fb9d5ce51e3e87524c5ca39f12dc4b20bc6b166cb68c42d852640ff165a9b0c87957168ca0681c427e43489c7c8c5" + "lower": { + "$serde_json::private::Number": "9939969429793526691" + }, + "upper": { + "$serde_json::private::Number": "17454494457801412503" + }, + "nulls": { + "$serde_json::private::Number": "1" + } } } } }, { - "len": 6, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" }, "0": { - "lower": { - "$serde_json::private::Number": "132817077" + "nulls": { + "$serde_json::private::Number": "1" }, - "upper": { - "$serde_json::private::Number": "3630875584" - } + "not nulls": "NoneStats" + }, + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + }, + "2": { + "lower": "71653055212f3148e3f89eab9373a977", + "upper": "cbc12bf8a25baed7944e246456f755b4", + "kind": "uuid" } } } @@ -26601,17 +26194,16 @@ expression: all_stats "$serde_json::private::Number": "5" }, "0": { - "lower": true, - "upper": true, - "nulls": { - "$serde_json::private::Number": "2" - } + "lower": "022f26492fba1a0c1c7297de46edbf0f2da2dff0b5ec877cdb4af5480b18125a0f356803f2b08c683439f7428c97f1d0be542e841a2ffa1753b25016c24ad5a94132209aa89ca9bc1f2e3efd58f57366ea3eb71c78bcdf7adb01c2c16365b155819b10a1", + "upper": "edbd37fa4ad63316a3e450f68157e4b36ed27dcf443c2f125f5479cfc089ef33961b8f6befb83b5c84ef9af90efe9f3db80e1dd2a50dbfb71617d4da972975011a32e360d27f512dd545e0eb1528ecf5fd02bd336674ec49d3ecd42471a5e27969956379" }, "1": { + "lower": "0c0a5b96eb538d88daed3f4b4c857a3a", + "upper": "d1d6611358b5b7db14f6e5059a61f96e", + "kind": "uuid", "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "2" + } } } } @@ -26632,155 +26224,188 @@ expression: all_stats }, "0": { "lower": { - "$serde_json::private::Number": "2033666223" + "$serde_json::private::Number": "-0.00010393589" + }, + "upper": { + "$serde_json::private::Number": "1.241443e-30" + } + }, + "1": { + "lower": { + "$serde_json::private::Number": "863790404" }, "upper": { - "$serde_json::private::Number": "3959769006" + "$serde_json::private::Number": "863790404" + }, + "nulls": { + "$serde_json::private::Number": "1" } } } } }, { - "len": 6, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "3" + }, + "0": { + "lower": "&:/\t/\u001b3\u000bu\u0000\u001b�?喜'󨭨\t", + "upper": "'`c7�/{r񛫄.򉿘$I󋂌R骔\\D\u0003R𝥅{)򆮉󆸊\u000bB" }, - "0": "NoneStats", "1": { - "lower": "7ffffd0600000039000089a0300146b0", - "upper": "8003ea0b0000010100011fe427a3b480", - "kind": "packed-date-time" + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "json_mixed" } } } }, { - "len": 4, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "2" }, - "0": "NoneStats" + "0": "NoneStats", + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "0": { + "lower": "2700000000000000a9032a016100ef01ec0173018802300157014903890215037400800000000000", + "upper": "03000000feffffff8802000000000000000000000000000000000000000000000000800000000000", + "kind": "packed-numeric" + }, + "1": { "lower": { - "$serde_json::private::Number": "1869607398" + "$serde_json::private::Number": "5759069805801565287" }, "upper": { - "$serde_json::private::Number": "1869607398" + "$serde_json::private::Number": "13712444757718594061" } } } } }, { - "len": 6, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" }, "0": { + "lower": "4d7d1d3dc6615d0f3d9726ebf3c97c170fb196e796f2314609a04d25c117aefd248ce4fdbe805e56469f4e7f951ee6ebcf444efa7efd973e23a9c2e1959a70a48db6e23a6c15db16ddf899b7090ccbc027419dc21e0b4c95bff1b3fab590423bed29ac61", + "upper": "f2e677669867100f1ba51a888eb82b6ebac29a0c36d61c2bee05c2093b0b53ed8df9fffdc5b673dc75b93d8b65e5d23911b167007c185c1753c295f2f3a4783964cf836dbca3cab2a43af5889253832c8b8bad558473346945e36b3f80fce130f632d289" + }, + "1": { "lower": { - "$serde_json::private::Number": "947957657594989975" + "$serde_json::private::Number": "211976352" }, "upper": { - "$serde_json::private::Number": "18382972268528941081" + "$serde_json::private::Number": "3673729568" } - }, - "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" } } } }, { - "len": 3, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" }, - "0": { - "lower": "**򼧥.‮𰵳&𤛬¥򚏑𾉭f", - "upper": "󱐾©\u000b¥񾬡\u0000򋩮", + "0": "NoneStats", + "1": { "nulls": { "$serde_json::private::Number": "1" - } + }, + "not nulls": "NoneStats" + }, + "2": { + "lower": "󔏖h$=힖JA='*$\u001b`\\񊲧ꕁ\u000b:u}񓤟R򙩝Ѩ\t*/\\�", + "upper": "󔏖h$=힖JA='*$\u001b`\\񊲧ꕁ\u000b:u}񓤟R򙩝Ѩ\t*/\\�" } } } }, { - "len": 7, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "6" }, "0": { "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" + }, + "1": { + "lower": "8000dfb00000005200004f5026ed6888", + "upper": "80037b4b000000ca000124a91c715388", + "kind": "packed-date-time" } } } @@ -26799,51 +26424,46 @@ expression: all_stats "len": { "$serde_json::private::Number": "7" }, - "0": { - "lower": false, - "upper": true, - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - }, + "0": "NoneStats", + "1": "NoneStats", "2": { "lower": { - "$serde_json::private::Number": "-30474" + "$serde_json::private::Number": "1052602255" }, "upper": { - "$serde_json::private::Number": "31519" + "$serde_json::private::Number": "2884251457" } } } } }, { - "len": 2, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "5" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "37651889" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "4002693771" + } }, "1": { + "lower": "", + "upper": "𢬌�l'\u001b\"y8⍺򈑬Ⱥ" + }, + "2": { "nulls": { "$serde_json::private::Number": "1" }, @@ -26853,140 +26473,174 @@ expression: all_stats } }, { - "len": 1, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "6" }, "0": "NoneStats", "1": { - "lower": "250000000100000060018f01ce00390131039f016301650192014801b4035f010500000000000000", - "upper": "250000000100000060018f01ce00390131039f016301650192014801b4035f010500000000000000", - "kind": "packed-numeric" + "lower": "&򑊬\"{󷥂ˆ_�󶶵fi[;_򑛧\r񗗯%", + "upper": "𴐎𦵸Ѩ:󦡟Ѩ=Ѩ🕴Ѩ" + }, + "2": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" } } } }, { - "len": 4, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "5" }, - "0": { - "lower": "80020b280000007d0001472e2b270af8", - "upper": "80037d98000000640000ee9e07bcca08", - "kind": "packed-date-time", - "nulls": { - "$serde_json::private::Number": "1" - } - } + "0": "NoneStats" } } }, { - "len": 2, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "6" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": { + "$serde_json::private::Number": "18575307" }, - "not nulls": "NoneStats" - } + "upper": { + "$serde_json::private::Number": "2881214874" + }, + "nulls": { + "$serde_json::private::Number": "1" + } + }, + "1": "NoneStats" } } }, { - "len": 3, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "6" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" + "lower": "\b%B\\򴡅/.\u000b<'Q/񟪞ã\u0001\u0001z�򣓮&?:.í`", + "upper": "񧷁\u001b/膽`񎂮􉡨X𼛍�.򚃊Ѩ򦻉\"i*󑈓&a<�򢀻\t򡖞{񾔟e𓱾" + }, + "1": { + "lower": { + "$serde_json::private::Number": "-3.6712078636512724e-14" }, - "not nulls": "NoneStats" + "upper": { + "$serde_json::private::Number": "9.169869738422937e266" + } } } } }, { - "len": 2, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" + }, + "0": { + "lower": { + "$serde_json::private::Number": "2531" + }, + "upper": { + "$serde_json::private::Number": "61047" + } }, - "0": "NoneStats", "1": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + }, + "2": { "lower": { - "$serde_json::private::Number": "3464255765" + "$serde_json::private::Number": "1654667525" }, "upper": { - "$serde_json::private::Number": "3711573104" + "$serde_json::private::Number": "4266242640" + }, + "nulls": { + "$serde_json::private::Number": "2" } } } } }, { - "len": 1, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" }, "0": { + "lower": { + "$serde_json::private::Number": "142611159" + }, + "upper": { + "$serde_json::private::Number": "2670640403" + } + }, + "1": { "nulls": { "$serde_json::private::Number": "1" }, @@ -26996,63 +26650,66 @@ expression: all_stats } }, { - "len": 5, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" }, "0": { - "lower": { - "$serde_json::private::Number": "-6782836221900216275" - }, - "upper": { - "$serde_json::private::Number": "8745189832288390099" + "lower": " ", + "upper": " " + }, + "1": { + "lower": "800007b2000000010000000000000000", + "upper": "800007b2000000010000000000000000", + "kind": "packed-date-time", + "nulls": { + "$serde_json::private::Number": "1" } + }, + "2": { + "lower": "aX\u0007\\򮖂:\t*󀘽򔨴\u0006", + "upper": "aX\u0007\\򮖂:\t*󀘽򔨴\u0006" } } } }, { - "len": 7, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "7" - }, - "0": { - "lower": { - "$serde_json::private::Number": "699" - }, - "upper": { - "$serde_json::private::Number": "62418" - } + "$serde_json::private::Number": "4" }, + "0": "NoneStats", "1": { "nulls": { - "$serde_json::private::Number": "0" + "$serde_json::private::Number": "2" }, "not nulls": "NoneStats" }, "2": { + "lower": "8000e6dc000000a800011de41bfd5ff0", + "upper": "8003fc4b000000b40000917234b05b88", + "kind": "packed-date-time", "nulls": { "$serde_json::private::Number": "1" - }, - "not nulls": "json_mixed" + } } } } @@ -27071,129 +26728,25 @@ expression: all_stats "len": { "$serde_json::private::Number": "2" }, - "0": { - "lower": { - "$serde_json::private::Number": "121" - }, - "upper": { - "$serde_json::private::Number": "121" - }, - "nulls": { - "$serde_json::private::Number": "1" - } - }, - "1": "NoneStats" - } - } - }, - { - "len": 4, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "4" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "4" - }, "0": { "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" - } - } - } - }, - { - "len": 5, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "5" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "5" }, - "0": { + "1": { + "lower": "m񗯻}e&\r-򍳽¥𧿿~'Ѩ4􍲥`1\u001b%‮񔝑.*C4.򁺺%\u000b7\r$¥\u0000󴤞򖻼`\t񾹁🕴L¥\"{={9􄱕'|S\tþ2A", + "upper": "m񗯻}e&\r-򍳽¥𧿿~'Ѩ4􍲥`1\u001b%‮񔝑.*C4.򁺺%\u000b7\r$¥\u0000󴤞򖻼`\t񾹁🕴L¥\"{={9􄱕'|S\tþ2B", "nulls": { "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - }, - "1": { - "lower": { - "$serde_json::private::Number": "-985027208" - }, - "upper": { - "$serde_json::private::Number": "1999670023" - } - } - } - } - }, - { - "len": 5, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "5" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "5" - }, - "0": { - "lower": { - "$serde_json::private::Number": "2452357486584185717" - }, - "upper": { - "$serde_json::private::Number": "9272986669071973949" - } - }, - "1": { - "lower": { - "$serde_json::private::Number": "14348" - }, - "upper": { - "$serde_json::private::Number": "36592" } - } - } - } - }, - { - "len": 4, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "4" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "4" }, - "0": { + "2": { "nulls": { "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" - }, - "1": "NoneStats" + } } } }, @@ -27212,1167 +26765,241 @@ expression: all_stats "$serde_json::private::Number": "4" }, "0": { - "lower": "80024f2e000000990000eb44084e6f30", - "upper": "800385c60000009800011efa32849a18", - "kind": "packed-date-time" - }, - "1": { - "lower": { - "$serde_json::private::Number": "129493885" - }, - "upper": { - "$serde_json::private::Number": "2888858575" - } - } - } - } - }, - { - "len": 5, - "cols": { - "err": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "5" - } - }, - "ok": { - "len": { - "$serde_json::private::Number": "5" - }, - "0": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - }, - "1": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - }, - "2": { "lower": { - "$serde_json::private::Number": "1301573280" + "$serde_json::private::Number": "10287592897303665259" }, "upper": { - "$serde_json::private::Number": "3884092153" + "$serde_json::private::Number": "18199527490534099507" } } } } }, { - "len": 4, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" }, - "0": { - "": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201160a14357465582473104760000000000000000000000c", - "upper": "c201160a14357465582473104760000000000000000000000c" - } - }, - "\u0000.Ⱥ\u000bȺ􊌮oo񧳮`򈔸'\u0000Ⱥ񳑝8`\r\t\u0001~󣰫񌙾=%\u0000\u0000?": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": false, - "upper": false - } - }, - "\u0000>\t‮?<,Y/}=񐏈áÞ<򕥩򻛦ȺM¡%*•": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": false, - "upper": false - } - }, - "\t=AY?\"a/h-E‮󁅸\b¥\t": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": false, - "upper": false - } - }, - "\u000b.🕴{¿\\å\\*{%t\u0000񴒎¥¥\u0002%:\u001bȺѨb": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_lists" - }, - "%¥\r𾘙\rI\u0004‮򼍄GѨ": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "򄫟=򨹐\u0000aȺ?:‮", - "upper": "򄫟=򨹐\u0000aȺ?:‮" - } - }, - ".'¥$?🕴o¥/򏪊d": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": true, - "upper": true - } - }, - ".Ⱥlf򗧈": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "\u0007s&;'": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" - }, - "'�?Ⱥ🕴󳬛Ѩ\u0000�\t\"*-𢐷\u001bi🊝\u0005\u001b&'򁓻r\r£{ 󆷋\u001b": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": false, - "upper": false - } - }, - "򵺋qÎ\u0006¥`&򷷀<󿭯&'򡌄=𩉙“'$": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": false, - "upper": false - } - }, - "􆄌󹏀(\u0000={�o[􆲨\u0000D^.%󤡡=&=񶀝\u001b\\*]{\t𺲤DV": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "‮\u0002򓮛\u0004\tY.", - "upper": "‮\u0002򓮛\u0004\tY." - } - } - } - }, - ":\r\t7\u0000Ѩ£򣾐M7\u000b㊡껲{\\°=%򩙳$‮𣨟`": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201160a14277354203162839500000000000000000000000c", - "upper": "c201160a14277354203162839500000000000000000000000c" - } - }, - "k􇳼\r<򄹞{\u0000񒡗\"/󹤚{%¥𼣝򶦡𾶞<{/\u0000": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_lists" - }, - "À\\񗤼W\"񷷕¥\"¥t%򊙊2\"%\u001b%񖇚\u0006'\t¥\r':�:.": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": true, - "upper": true - } - }, - "þ\\ýH񠟿$󽫸0𽂫󢤧?\u0006%h􎜃8�򒛷󻡡x\u000b$^򓟍=򕐉\"?\u0004": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_lists" - }, - "Ⱥ:\t>\"󛦯񭹶./z󫲻𔊪*:`󦔲\u0001<7¥Ⱥ=󆖠\">Ѩ\"": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_lists" - }, - "‮f🕴``*\"\u0007C*P`򄤛tÅ🶐🕴񶺴ѨJGg%\"`=򆟔La*": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": true, - "upper": true - } - }, - "냎򪄪{": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201160a14033027204316519850295271195831863245361d", - "upper": "c201160a14033027204316519850295271195831863245361d" - } - }, - "񅋩󞺘‮񱮼.g‮Ⱥ-\u0000&򶏊.񮺀Ѩw\u001b$¥\u000b\u0000𛺵񥸵\u000b🕴~%g-LѨC\u0007Ѩ": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" - }, - "ì{$\u00046�򜑛􀄦ž}Y𞮳ѨU󓠥&\t񶰨\"<񪼬$.􉋉": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" - }, - "�A󎀩wѨȺ>:򽅃": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201160a14094729316064041736216207221401355201026d", - "upper": "c201160a14094729316064041736216207221401355201026d" - } - }, - "🕴G·\\𡸙嬲$ø<\b¥": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": true, - "upper": true - } - }, - "𠌾夸\u000b'8g\u000b\\Ѩ*&å\u0000¦𗲞𹞪/<\t'𪄘/񔰎\u0000\u0004)": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "%]󕏰\"t�\r򘁛", - "upper": "%]󕏰\"t�\r򘁛" - } - }, - "𸝾\r�\t`򀡤Ѩv􇧣󺪯񘎥񧼑Vp=󥼙:'�?": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "{\t񧔋ÿ\\!r$#\\🕴\t񢱕H'`.\u000b", - "upper": "{\t񧔋ÿ\\!r$#\\🕴\t񢱕H'`.\u000b" - } - }, - "𼯭/*\\񚣾\u0000򊏤j¥\u0003𕚚\\": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" - }, - "񏫅\u0001^`ȺȺ0Î*򮂃񿗾)\u0001/𐹃🕴<\"\\\u0006": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": false, - "upper": false - } - }, - "񵄡񄶝\u0002?񔨃.\t=ǽ񄃢򀱧&m\t \u0002%&\u0005򜷋񊰍\\򰶢񨧛ñ􈺘%\r<򵶿": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_nulls" - }, - "򫅽ၘ`\u000bL򄁵%e\t=N𰴽`\u000b¥\u001b򋡲W\u0000<\u000b\\3𞱣\":O": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": { - "lower": "c201160a14152802035992101974242681973741169604074d", - "upper": "c201160a14152802035992101974242681973741169604074d" - } - } - } - }, - "}?ꁟA򿯑1󬎜¥𾬚{񷐼ꔥ‮*¥򢇜<^‮\b": { - "len": { - "$serde_json::private::Number": "1" - }, - "stats": "json_lists" - }, - "Ѩ\u0002\u001bѨ𞵰\u001bn&<󩢷:=Ⱥ‹🕴", + "upper": "񟶘򾱑󛗷\t=îK\r㌑‮Å" }, + "1": "NoneStats", "2": { "lower": { - "$serde_json::private::Number": "13815" + "$serde_json::private::Number": "-15173" }, "upper": { - "$serde_json::private::Number": "26818" + "$serde_json::private::Number": "1364" } } } } }, { - "len": 1, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2" }, "0": { + "lower": "00003ae719f09060", + "upper": "0000b382259f9b68", + "kind": "packed-time" + }, + "1": { "lower": { - "$serde_json::private::Number": "-4175222300.0" + "$serde_json::private::Number": "-26740" }, "upper": { - "$serde_json::private::Number": "-4175222300.0" + "$serde_json::private::Number": "-23830" } }, - "1": "NoneStats" + "2": { + "nulls": { + "$serde_json::private::Number": "2" + } + } } } }, { - "len": 7, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "7" - }, - "0": { - "nulls": { - "$serde_json::private::Number": "3" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "1" }, - "1": { - "lower": "2700000000000000ae003203d300ef002403bd0356039d0163029b00da002f016a00800000000000", - "upper": "10000000f6ffffffc300510143027901dd0008000000000000000000000000000000000000000000", - "kind": "packed-numeric" - } + "0": "NoneStats" } } }, { - "len": 3, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "1" }, "0": { "lower": { - "$serde_json::private::Number": "-2.076131676160267e-308" + "$serde_json::private::Number": "62555" }, "upper": { - "$serde_json::private::Number": "0.0" + "$serde_json::private::Number": "62555" + } + }, + "1": { + "lower": { + "$serde_json::private::Number": "-974" }, - "nulls": { - "$serde_json::private::Number": "1" + "upper": { + "$serde_json::private::Number": "-974" } } } } }, { - "len": 1, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" }, "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - }, - "1": { "nulls": { "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" }, - "2": { - "lower": { - "$serde_json::private::Number": "1879478049" - }, - "upper": { - "$serde_json::private::Number": "1879478049" - } + "1": { + "lower": "\"򻶨U򸉖/s&Ⱥ򰐌񲗳/`?񟱨S𼹬\tJ\u0000\r1\n\r{*,🕴Ѩ\\󳍛<🶭𞺪.\"' ", + "upper": "񔚤`򍝂/x񲝄򉃧􌊥󺟪\\򤀩L🕴°􁰥<)񯇭„X\"&𛰙�\r:'¤=ȺȺ< !" + } + } + } + }, + { + "len": 4, + "cols": { + "err": { + "lower": "", + "upper": "", + "nulls": { + "$serde_json::private::Number": "4" } + }, + "ok": { + "len": { + "$serde_json::private::Number": "4" + }, + "0": "NoneStats" } } }, { - "len": 5, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "7" }, "0": { - "lower": { - "$serde_json::private::Number": "218455147188710700" - }, - "upper": { - "$serde_json::private::Number": "13451704347440317454" - }, + "lower": "80017cc9000000ff0000732606349f80", + "upper": "8002832c000000e80000044a0736c958", + "kind": "packed-date-time", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" } + }, + "1": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "json_mixed" } } } @@ -28641,188 +27281,163 @@ expression: all_stats }, "0": { "lower": { - "$serde_json::private::Number": "-1.569111e21" + "$serde_json::private::Number": "2973719130381351146" }, "upper": { - "$serde_json::private::Number": "45792324.0" + "$serde_json::private::Number": "10549922244309804480" + }, + "nulls": { + "$serde_json::private::Number": "2" } - } + }, + "1": "json_mixed" } } }, { - "len": 2, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "7" }, "0": { "nulls": { "$serde_json::private::Number": "0" }, - "not nulls": "NoneStats" - }, - "1": { - "lower": { - "$serde_json::private::Number": "696922172" - }, - "upper": { - "$serde_json::private::Number": "3159817523" - } + "not nulls": "json_mixed" } } } }, { - "len": 2, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" }, "0": { - "lower": ":÷&򮺵鄁Ⱥ.񳌹$𶛶\u001b`�&󚊨�=\u001bc¥:w🕴<¥í\"Ѩ\t򻅦", - "upper": "¢K󟉚/򀁊?󅮢n<*󩪠G1*â!\\񦙷G=񹘗􊇀=" + "lower": { + "$serde_json::private::Number": "30359" + }, + "upper": { + "$serde_json::private::Number": "30359" + } }, "1": { "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "0" }, "not nulls": "NoneStats" - }, - "2": { - "lower": { - "$serde_json::private::Number": "2434974076" - }, - "upper": { - "$serde_json::private::Number": "3608010326" - } } } } }, { - "len": 7, + "len": 6, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "6" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "6" }, - "0": { - "nulls": { - "$serde_json::private::Number": "1" - }, - "not nulls": "NoneStats" - } + "0": "NoneStats" } } }, { - "len": 5, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "4" }, "0": { - "lower": "", - "upper": "򢰴t𿵷󜇡T󟓓*" + "lower": "07000000faffffffc300f40106000000000000000000000000000000000000000000800000000000", + "upper": "10000000f6ffffff630305032902d6004d0109000000000000000000000000000000000000000000", + "kind": "packed-numeric" }, - "1": "NoneStats" + "1": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 6, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "2" }, "0": { "nulls": { "$serde_json::private::Number": "1" }, "not nulls": "NoneStats" + }, + "1": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" } } } }, { - "len": 6, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "6" - }, - "0": { - "lower": { - "$serde_json::private::Number": "752882561" - }, - "upper": { - "$serde_json::private::Number": "2898228636" - }, - "nulls": { - "$serde_json::private::Number": "2" - } - }, - "1": { - "nulls": { - "$serde_json::private::Number": "2" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "1" }, - "2": { - "lower": { - "$serde_json::private::Number": "321333519" - }, - "upper": { - "$serde_json::private::Number": "4047881250" - } - } + "0": "NoneStats" } } }, @@ -28841,114 +27456,95 @@ expression: all_stats "$serde_json::private::Number": "1" }, "0": { + "lower": "1\"Ⱥ~\r󻤫%?�󫹟", + "upper": "1\"Ⱥ~\r󻤫%?�󫹟" + }, + "1": { "lower": { - "$serde_json::private::Number": "2842646611" + "$serde_json::private::Number": "1222044616" }, "upper": { - "$serde_json::private::Number": "2842646611" + "$serde_json::private::Number": "1222044616" } }, - "1": { - "lower": "0600000000000000ad00460300000000000000000000000000000000000000000000000000000000", - "upper": "0600000000000000ad00460300000000000000000000000000000000000000000000000000000000", - "kind": "packed-numeric" - }, "2": { - "lower": "", - "upper": "", - "nulls": { - "$serde_json::private::Number": "1" - } + "lower": "�_7?𤡇C􁐉'{\"$󄙏񃚙<‮lr􅼻򣜂񚫦`<", + "upper": "�_7?𤡇C􁐉'{\"$󄙏񃚙<‮lr􅼻򣜂񚫦`<" } } } }, { - "len": 1, + "len": 3, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "3" + }, + "0": { + "lower": "00003f6d00d40d28", + "upper": "0000adcb34c959f8", + "kind": "packed-time" }, - "0": "NoneStats", "1": { "lower": { - "$serde_json::private::Number": "330792673" + "$serde_json::private::Number": "-5.4344691589284305e-261" }, "upper": { - "$serde_json::private::Number": "330792673" + "$serde_json::private::Number": "5.732380999239263e-273" } } } } }, { - "len": 6, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "6" + "$serde_json::private::Number": "5" }, "0": { "lower": { - "$serde_json::private::Number": "1468843368666157615" + "$serde_json::private::Number": "-1692341483" }, "upper": { - "$serde_json::private::Number": "17940242370345659661" - }, - "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2008044786" } }, - "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - }, - "2": "NoneStats" + "1": "NoneStats" } } }, { - "len": 4, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "4" - }, - "0": { - "nulls": { - "$serde_json::private::Number": "2" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "7" }, - "1": { - "lower": "00000fea33d103c0", - "upper": "0000bbce19fd0f98", - "kind": "packed-time" - } + "0": "NoneStats" } } }, @@ -28967,139 +27563,144 @@ expression: all_stats "$serde_json::private::Number": "6" }, "0": { - "lower": "\u0006&$𫲡`<򏽇Z􅅼f<)򢡽", - "upper": "򫛍󐝐곂<\u0005🕴\"a'U򗱻=򛆜?󯡱@\u0004🕴\rv󼴇#&`𚔄\u001b񐣕:$", + "lower": "\r𸇻􉥣C0󭽾%=\t@¥\u001b5򻷦", + "upper": "򵖢™4\u000b�™:¥R8p?\u0000�󅉻", "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, - "1": { + "1": "NoneStats", + "2": { "lower": { - "$serde_json::private::Number": "858718386095319765" + "$serde_json::private::Number": "435706807" }, "upper": { - "$serde_json::private::Number": "13258057915884723657" + "$serde_json::private::Number": "3182912306" } } } } }, { - "len": 5, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" }, - "0": { - "nulls": { - "$serde_json::private::Number": "2" - }, - "not nulls": "NoneStats" - } + "0": "NoneStats", + "1": "NoneStats" } } }, { - "len": 3, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "3" + "$serde_json::private::Number": "5" }, "0": { - "lower": { - "$serde_json::private::Number": "2460302546" - }, - "upper": { - "$serde_json::private::Number": "4227256551" - } + "lower": "6ca62fce4dc3258f30788952bb250be13288b4a9b6aff3bc670b7332bdb225aa78f6e58353c3a8c78d5da02d95c15620e551fb304afaf3813810f3e1a6212700aa168a5554c2200048f931d5c0381ad7ad48cc193c56978837770393751f3cafb442ee40", + "upper": "ea183e465dd32bcd66cc37f61df05259f1f62dc4de973a6b6278fed8ca39f81b02f5f24600cb0270098896fdedf6693da9694e0e626e71b41f1f6c6fb4b082f8fc72932295cba060ff5c70f7338c6c4ab3c938c867e6a494e85a2c8dcc76ce62bb660d" } } } }, { - "len": 4, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "7" }, "0": { - "lower": "000057c400e7cbd8", - "upper": "0000ceef2e218a30", - "kind": "packed-time" + "lower": "1a8636adda6ec45ef78171cf338afc7dcf388585599fc32e201b34e2a817b095b9098ef7afa74063fa5fc435af88f0d273c1d74093f35a729c050fc298f2860fcb69cafc8d96f8209334739dae74412927d8dcb132450c4de3238314ed5b809e8b7a7b04", + "upper": "8e86cc1a9a95dfd105e2c8c8ec986cc674955987bbd610a62c8e46f6cb68fd0452a513387bd7c23d4a3c4fa70e068d6544002e814b58c3bdc47b5c4af39833c439e135c8631d19bd435f2518646fcf560037d7f65bcbb66e9b01b7e7e8547986c820e574", + "nulls": { + "$serde_json::private::Number": "3" + } } } } }, { - "len": 7, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" }, - "0": "NoneStats", - "1": { - "lower": "26000000000000008f019200e30282013d010e000b00fc0095020400b60175020b00800000000000", - "upper": "05000000010000004202630000000000000000000000000000000000000000000000000000000000", - "kind": "packed-numeric", - "nulls": { - "$serde_json::private::Number": "2" + "0": { + "lower": { + "$serde_json::private::Number": "9802" + }, + "upper": { + "$serde_json::private::Number": "54633" } } } } }, { - "len": 1, + "len": 5, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "5" }, "0": { - "lower": "00004e2e1c567888", - "upper": "00004e2e1c567888", - "kind": "packed-time" + "lower": { + "$serde_json::private::Number": "-1880561791" + }, + "upper": { + "$serde_json::private::Number": "2032653687" + }, + "nulls": { + "$serde_json::private::Number": "1" + } }, - "1": "NoneStats" + "1": { + "nulls": { + "$serde_json::private::Number": "1" + }, + "not nulls": "NoneStats" + } } } }, @@ -29116,25 +27717,26 @@ expression: all_stats "ok": { "len": { "$serde_json::private::Number": "5" - }, - "0": "NoneStats", - "1": { + }, + "0": { "lower": { - "$serde_json::private::Number": "-4621" + "$serde_json::private::Number": "227332714" }, "upper": { - "$serde_json::private::Number": "5329" - }, - "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "2672152559" } }, + "1": { + "lower": "2db085f03d03ba8ac89d8ef45880a174", + "upper": "d5ff42969d6d8ac548040bc2eb51f660", + "kind": "packed-interval" + }, "2": { "lower": { - "$serde_json::private::Number": "-7405649222772511785" + "$serde_json::private::Number": "-2.2882640007404815e196" }, "upper": { - "$serde_json::private::Number": "4650174542534912371" + "$serde_json::private::Number": "9.1128674469635e-162" }, "nulls": { "$serde_json::private::Number": "1" @@ -29144,202 +27746,327 @@ expression: all_stats } }, { - "len": 4, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" }, - "0": "NoneStats" + "0": { + "lower": "eQ𼧁", + "upper": "eQ𼧁" + }, + "1": { + "lower": "ca182a09411919053c228e3639332d09", + "upper": "ca182a09411919053c228e3639332d09", + "kind": "packed-interval" + } } } }, { - "len": 5, + "len": 2, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "2" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "2" }, "0": { - "lower": "", - "upper": "\u0000🕴\r�\r\u0000?𛫵ÀN񨭞𡳗A" + "lower": { + "$serde_json::private::Number": "48" + }, + "upper": { + "$serde_json::private::Number": "48" + }, + "nulls": { + "$serde_json::private::Number": "1" + } }, - "1": "NoneStats", - "2": "NoneStats" + "1": { + "lower": "50622269f6a44225d1003751f8ca42a2", + "upper": "775b0bf801a76eb2530548823c88d632", + "kind": "packed-interval" + }, + "2": { + "nulls": { + "$serde_json::private::Number": "0" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 7, + "len": 4, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" } }, "ok": { "len": { - "$serde_json::private::Number": "7" + "$serde_json::private::Number": "4" }, "0": { "lower": { - "$serde_json::private::Number": "-31200" + "$serde_json::private::Number": "271568890" }, "upper": { - "$serde_json::private::Number": "20020" + "$serde_json::private::Number": "3094227027" }, "nulls": { - "$serde_json::private::Number": "2" + "$serde_json::private::Number": "1" } }, - "1": "NoneStats" + "1": { + "nulls": { + "$serde_json::private::Number": "2" + }, + "not nulls": "NoneStats" + } } } }, { - "len": 1, + "len": 7, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" } }, "ok": { "len": { - "$serde_json::private::Number": "1" + "$serde_json::private::Number": "7" }, "0": "NoneStats" } } }, { - "len": 4, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "4" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "4" - }, - "0": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" + "$serde_json::private::Number": "1" }, - "1": { - "nulls": { - "$serde_json::private::Number": "0" - }, - "not nulls": "NoneStats" - } + "0": "NoneStats", + "1": "NoneStats" } } }, { - "len": 5, + "len": 1, "cols": { "err": { "lower": "", "upper": "", "nulls": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" } }, "ok": { "len": { - "$serde_json::private::Number": "5" + "$serde_json::private::Number": "1" }, - "0": "NoneStats" + "0": { + "$X\"\u0002\u0000􀻸&8򷸝𝶬𙓭": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": "<#‮\u0000'.\\\u0003􍜚1\t\u0004.7\";:񧾷\"X\r$<:Ѩ", + "upper": "<#‮\u0000'.\\\u0003􍜚1\t\u0004.7\";:񧾷\"X\r$<:Ѩ" + } + }, + "%/!`\"¥g": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": "json_nulls" + }, + "'􊤒<.%-𑢁/\\.ѨN🕴񼏎󤛃🕴A¥󊃮򋈻/b:\u0000񞲞¸\u0006{\b": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": "json_nulls" + }, + "?A🕴󤞷<i=.Q}v\u0000.{\u000b/𭸹x\"W󋵔<򸃬\u001b ": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": { + "lower": "\\áB𨕥¼'󚧘s.񧅖\\\u0002¥", + "upper": "\\áB𨕥¼'󚧘s.񧅖\\\u0002¥" + } + }, + "F'\\򫥵\r~\r\rw¥Ѩ񞎆&򳅏󅪲": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": "json_nulls" + }, + "t🕴'&N\u0000񊠸\u001b\"ȺW": { + "len": { + "$serde_json::private::Number": "1" + }, + "stats": "json_nulls" + }, + "y񦆰񿤠~𠶗􀧲\u0003‮🕴\r.\u000b\u001b<Ѩ󿞬񁢹󍨅Ⱥ\u0001›­.\u0000\t", + "upper": "􌪱㕁,$Ze򽯖kC󔘖:𘣆%\u0002?𲨿_=F8G򵊕:Ⱥ􋆐0¥&" } } } diff --git a/test/pgtest-mz/datums.pt b/test/pgtest-mz/datums.pt index 972521933a12c..63ea08e31e467 100644 --- a/test/pgtest-mz/datums.pt +++ b/test/pgtest-mz/datums.pt @@ -37,13 +37,13 @@ DataRow {"fields":["12","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL", DataRow {"fields":["11","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","178956970 years 7 months 2147483647 days 2562047788:00:54.775807","NULL","NULL","\"\"","\u0002","\"\"","\"JAPAN\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL"]} DataRow {"fields":["8","NULL","128","32768","2147483648","NULL","NULL","NULL","NaN","NaN","NaN","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","-1 days","NULL","NULL","JAPAN","\r","JAPAN","\".\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL"]} DataRow {"fields":["9","NULL","NULL","NULL","NULL","NULL","NULL","NULL","Infinity","Infinity","Infinity","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","-00:00:00.000001","NULL","NULL","1,2,3","\\","1,2,3","\"2015-09-18T23:56:04.123Z\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL"]} -DataRow {"fields":["6","NULL","32767","2147483647","9223372036854775807","NULL","NULL","NULL","3.4028235e+38","1.7976931348623157e+308","Infinity","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","00:00:00.000001","NULL","NULL","2015-09-18T23:56:04.123Z","\t","2015-09-18T23:56:04.123Z","\"'\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","=arwdUCRBN/u42"]} -DataRow {"fields":["4","NULL","-32768","-2147483648","-9223372036854775808","255","32767","2147483647","-3.4028235e+38","-1.7976931348623157e+308","-Infinity","NULL","NULL","1970-01-01 00:00:00.123457","1970-01-01 00:00:00.123457","1970-01-01 00:00:00.123457","1970-01-01 00:00:00.123457+00","1970-01-01 00:00:00.123457+00","1970-01-01 00:00:00.123457+00","1 month","NULL","NULL","\"",".","\"","\"\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","u42=arwdUCRBN/p"]} +DataRow {"fields":["6","NULL","32767","2147483647","9223372036854775807","NULL","NULL","NULL","3.4028235e+38","1.7976931348623157e+308","Infinity","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","00:00:00.000001","NULL","NULL","2015-09-18T23:56:04.123Z","\t","2015-09-18T23:56:04.123Z","\"'\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","=arwdUCRBNP/u42"]} +DataRow {"fields":["4","NULL","-32768","-2147483648","-9223372036854775808","255","32767","2147483647","-3.4028235e+38","-1.7976931348623157e+308","-Infinity","NULL","NULL","1970-01-01 00:00:00.123457","1970-01-01 00:00:00.123457","1970-01-01 00:00:00.123457","1970-01-01 00:00:00.123457+00","1970-01-01 00:00:00.123457+00","1970-01-01 00:00:00.123457+00","1 month","NULL","NULL","\"",".","\"","\"\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","u42=arwdUCRBNP/p"]} DataRow {"fields":["5","NULL","-32767","-2147483647","-9223372036854775807","256","32768","2147483648","1.1754944e-38","2.2250738585072014e-308","0","NULL","NULL","2019-07-24 23:59:60.1234","2019-07-24 23:59:60.1234","2019-07-24 23:59:60.1234","NULL","NULL","NULL","1 day","NULL","NULL",".",",",".","\" \"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","=/u42"]} DataRow {"fields":["10","NULL","NULL","NULL","NULL","NULL","NULL","NULL","-Infinity","-Infinity","-Infinity","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","-178956970 years -8 months -2147483648 days -2562047788:00:54.775808","NULL","NULL","\r\n","\u0000","\r\n","\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL"]} DataRow {"fields":["1","t","0","0","0","0","0","0","0","0","0","2000-01-01","00:00:00","1970-01-01 00:00:00","1970-01-01 00:00:00","1970-01-01 00:00:00","1970-01-01 00:00:00+00","1970-01-01 00:00:00+00","1970-01-01 00:00:00+00","00:00:00","\u0000","\\x",""," ","","true","00000000-0000-0000-0000-000000000000","0","0","0","0","NULL","0","=/p"]} DataRow {"fields":["3","NULL","-1","-1","-1","65535","4294967295","18446744073709551615","-1","-1","-1","262142-12-31","NULL","262142-12-31 23:59:59","262142-12-31 23:59:59","262142-12-31 23:59:59","262142-12-31 23:59:59+00","262142-12-31 23:59:59+00","262142-12-31 23:59:59+00","-1 months -1 days -00:00:00.000001","NULL","\\xff","'","\"","'","null","NULL","NULL","NULL","NULL","NULL","NULL","NULL","u42=/p"]} -DataRow {"fields":["2","f","1","1","1","1","1","1","1","1","1","4714-11-24 BC","23:59:59.999999","4714-12-31 00:00:00 BC","4714-12-31 00:00:00 BC","4714-12-31 00:00:00 BC","4714-12-31 00:00:00+00 BC","4714-12-31 00:00:00+00 BC","4714-12-31 00:00:00+00 BC","1 month 1 day 00:00:00.000001","[255]","\\x00"," ","'"," ","false","ffffffff-ffff-ffff-ffff-ffffffffffff","4294967295","4294967295","4294967295","4294967295","NULL","18446744073709551615","=arwdUCRBN/p"]} +DataRow {"fields":["2","f","1","1","1","1","1","1","1","1","1","4714-11-24 BC","23:59:59.999999","4714-12-31 00:00:00 BC","4714-12-31 00:00:00 BC","4714-12-31 00:00:00 BC","4714-12-31 00:00:00+00 BC","4714-12-31 00:00:00+00 BC","4714-12-31 00:00:00+00 BC","1 month 1 day 00:00:00.000001","[255]","\\x00"," ","'"," ","false","ffffffff-ffff-ffff-ffff-ffffffffffff","4294967295","4294967295","4294967295","4294967295","NULL","18446744073709551615","=arwdUCRBNP/p"]} DataRow {"fields":["7","NULL","127","32767","2147483647","NULL","NULL","NULL","1.1920929e-7","2.220446049250313e-16","0.0000000000000002220446049250313","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","-1 months","NULL","NULL","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","\n","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","\"\\\"\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL"]} CommandComplete {"tag":"SELECT 26"} ReadyForQuery {"status":"I"} @@ -79,13 +79,13 @@ DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f","NULL","NULL", DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[127, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255, 255, 127, 255, 255, 255]","NULL","NULL","\"\"","\u0002","\"\"","\u0001\"JAPAN\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL"]} DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b","NULL","[0, 128]","[0, 0, 128, 0]","[0, 0, 0, 0, 128, 0, 0, 0]","NULL","NULL","NULL","[127, 192, 0, 0]","[127, 248, 0, 0, 0, 0, 0, 0]","[0, 0, 255, 255, 192, 0, 0, 0]","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0]","NULL","NULL","JAPAN","\r","JAPAN","\u0001\".\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL"]} DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[127, 128, 0, 0]","[127, 240, 0, 0, 0, 0, 0, 0]","[0, 0, 255, 255, 208, 0, 0, 0]","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0]","NULL","NULL","1,2,3","\\","1,2,3","\u0001\"2015-09-18T23:56:04.123Z\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL"]} -DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006","NULL","[127, 255]","[127, 255, 255, 255]","[127, 255, 255, 255, 255, 255, 255, 255]","NULL","NULL","NULL","[127, 127, 255, 255]","[127, 239, 255, 255, 255, 255, 255, 255]","[0, 0, 255, 255, 208, 0, 0, 0]","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","NULL","NULL","2015-09-18T23:56:04.123Z","\t","2015-09-18T23:56:04.123Z","\u0001\"'\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[112, 0, 0, 0, 0, 0, 0, 0, 0, 117, 42, 0, 0, 0, 0, 0, 0, 0, 15, 3, 0, 224, 0, 0, 0, 0]"]} -DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004","NULL","[128, 0]","[128, 0, 0, 0]","[128, 0, 0, 0, 0, 0, 0, 0]","[0, 255]","[0, 0, 127, 255]","[0, 0, 0, 0, 127, 255, 255, 255]","[255, 127, 255, 255]","[255, 239, 255, 255, 255, 255, 255, 255]","[0, 0, 255, 255, 240, 0, 0, 0]","NULL","NULL","[255, 252, 162, 254, 196, 202, 2, 65]","[255, 252, 162, 254, 196, 202, 2, 65]","[255, 252, 162, 254, 196, 202, 2, 65]","[255, 252, 162, 254, 196, 202, 2, 65]","[255, 252, 162, 254, 196, 202, 2, 65]","[255, 252, 162, 254, 196, 202, 2, 65]","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001","NULL","NULL","\"",".","\"","\u0001\"\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[117, 42, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 15, 3, 0, 224, 0, 0, 0, 0]"]} +DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006","NULL","[127, 255]","[127, 255, 255, 255]","[127, 255, 255, 255, 255, 255, 255, 255]","NULL","NULL","NULL","[127, 127, 255, 255]","[127, 239, 255, 255, 255, 255, 255, 255]","[0, 0, 255, 255, 208, 0, 0, 0]","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","NULL","NULL","2015-09-18T23:56:04.123Z","\t","2015-09-18T23:56:04.123Z","\u0001\"'\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[112, 0, 0, 0, 0, 0, 0, 0, 0, 117, 42, 0, 0, 0, 0, 0, 0, 0, 15, 3, 0, 224, 1, 0, 0, 0]"]} +DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004","NULL","[128, 0]","[128, 0, 0, 0]","[128, 0, 0, 0, 0, 0, 0, 0]","[0, 255]","[0, 0, 127, 255]","[0, 0, 0, 0, 127, 255, 255, 255]","[255, 127, 255, 255]","[255, 239, 255, 255, 255, 255, 255, 255]","[0, 0, 255, 255, 240, 0, 0, 0]","NULL","NULL","[255, 252, 162, 254, 196, 202, 2, 65]","[255, 252, 162, 254, 196, 202, 2, 65]","[255, 252, 162, 254, 196, 202, 2, 65]","[255, 252, 162, 254, 196, 202, 2, 65]","[255, 252, 162, 254, 196, 202, 2, 65]","[255, 252, 162, 254, 196, 202, 2, 65]","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001","NULL","NULL","\"",".","\"","\u0001\"\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[117, 42, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 15, 3, 0, 224, 1, 0, 0, 0]"]} DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005","NULL","[128, 1]","[128, 0, 0, 1]","[128, 0, 0, 0, 0, 0, 0, 1]","\u0001\u0000","[0, 0, 128, 0]","[0, 0, 0, 0, 128, 0, 0, 0]","[0, 128, 0, 0]","\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","NULL","NULL","[0, 2, 49, 116, 224, 41, 242, 16]","[0, 2, 49, 116, 224, 41, 242, 16]","[0, 2, 49, 116, 224, 41, 242, 16]","NULL","NULL","NULL","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000","NULL","NULL",".",",",".","\u0001\" \"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","p\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000u*\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"]} DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[255, 128, 0, 0]","[255, 240, 0, 0, 0, 0, 0, 0]","[0, 0, 255, 255, 240, 0, 0, 0]","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[128, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 0]","NULL","NULL","\r\n","\u0000","\r\n","\u0001\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL"]} DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001","\u0001","\u0000\u0000","\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","\u0000\u0000","\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","[255, 252, 162, 254, 196, 200, 32, 0]","[255, 252, 162, 254, 196, 200, 32, 0]","[255, 252, 162, 254, 196, 200, 32, 0]","[255, 252, 162, 254, 196, 200, 32, 0]","[255, 252, 162, 254, 196, 200, 32, 0]","[255, 252, 162, 254, 196, 200, 32, 0]","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","\u0000","",""," ","","\u0001true","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000","\u0000\u0000\u0000\u0000","NULL","0","p\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000p\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"]} DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003","NULL","[255, 255]","[255, 255, 255, 255]","[255, 255, 255, 255, 255, 255, 255, 255]","[255, 255]","[255, 255, 255, 255]","[255, 255, 255, 255, 255, 255, 255, 255]","[191, 128, 0, 0]","[191, 240, 0, 0, 0, 0, 0, 0]","\u0000\u0001\u0000\u0000@\u0000\u0000\u0000\u0000\u0001","[5, 169, 209, 111]","NULL","[113, 237, 93, 56, 67, 138, 189, 192]","[113, 237, 93, 56, 67, 138, 189, 192]","[113, 237, 93, 56, 67, 138, 189, 192]","[113, 237, 93, 56, 67, 138, 189, 192]","[113, 237, 93, 56, 67, 138, 189, 192]","[113, 237, 93, 56, 67, 138, 189, 192]","[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]","NULL","[255]","'","\"","'","\u0001null","NULL","NULL","NULL","NULL","NULL","NULL","NULL","u*\u0000\u0000\u0000\u0000\u0000\u0000\u0000p\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"]} -DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002","\u0000","\u0000\u0001","\u0000\u0000\u0000\u0001","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001","\u0000\u0001","\u0000\u0000\u0000\u0001","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001","[63, 128, 0, 0]","[63, 240, 0, 0, 0, 0, 0, 0]","\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001","[255, 218, 151, 167]","[0, 0, 0, 20, 29, 215, 95, 255]","[253, 15, 127, 169, 145, 64, 128, 0]","[253, 15, 127, 169, 145, 64, 128, 0]","[253, 15, 127, 169, 145, 64, 128, 0]","[253, 15, 127, 169, 145, 64, 128, 0]","[253, 15, 127, 169, 145, 64, 128, 0]","[253, 15, 127, 169, 145, 64, 128, 0]","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001","[255]","\u0000"," ","'"," ","\u0001false","[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]","[255, 255, 255, 255]","[255, 255, 255, 255]","[255, 255, 255, 255]","[255, 255, 255, 255]","NULL","18446744073709551615","[112, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 15, 3, 0, 224, 0, 0, 0, 0]"]} +DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002","\u0000","\u0000\u0001","\u0000\u0000\u0000\u0001","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001","\u0000\u0001","\u0000\u0000\u0000\u0001","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001","[63, 128, 0, 0]","[63, 240, 0, 0, 0, 0, 0, 0]","\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001","[255, 218, 151, 167]","[0, 0, 0, 20, 29, 215, 95, 255]","[253, 15, 127, 169, 145, 64, 128, 0]","[253, 15, 127, 169, 145, 64, 128, 0]","[253, 15, 127, 169, 145, 64, 128, 0]","[253, 15, 127, 169, 145, 64, 128, 0]","[253, 15, 127, 169, 145, 64, 128, 0]","[253, 15, 127, 169, 145, 64, 128, 0]","\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001","[255]","\u0000"," ","'"," ","\u0001false","[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]","[255, 255, 255, 255]","[255, 255, 255, 255]","[255, 255, 255, 255]","[255, 255, 255, 255]","NULL","18446744073709551615","[112, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 15, 3, 0, 224, 1, 0, 0, 0]"]} DataRow {"fields":["\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007","NULL","\u0000","[0, 0, 127, 255]","[0, 0, 0, 0, 127, 255, 255, 255]","NULL","NULL","NULL","4\u0000\u0000\u0000","[60, 176, 0, 0, 0, 0, 0, 0]","[0, 9, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 156, 17, 252, 36, 34, 12, 58]","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255]","NULL","NULL","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","\n","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","\u0001\"\\\"\"","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL"]} CommandComplete {"tag":"SELECT 26"} ReadyForQuery {"status":"I"} diff --git a/test/sqllogictest/audit_log.slt b/test/sqllogictest/audit_log.slt index e92eb6c851460..dc9bf0e7e201a 100644 --- a/test/sqllogictest/audit_log.slt +++ b/test/sqllogictest/audit_log.slt @@ -151,8 +151,8 @@ SELECT id, event_type, object_type, details, user FROM mz_audit_events ORDER BY 12 grant cluster {"grantee_id":"p","grantor_id":"s1","object_id":"Cu1","privileges":"U"} NULL 13 grant cluster {"grantee_id":"u1","grantor_id":"s1","object_id":"Cu1","privileges":"UC"} NULL 14 create cluster-replica {"billed_as":null,"cluster_id":"u1","cluster_name":"quickstart","disk":false,"internal":false,"logical_size":"2","reason":"system","replica_id":"u1","replica_name":"r1"} NULL -15 grant system {"grantee_id":"s1","grantor_id":"s1","object_id":"SYSTEM","privileges":"RBN"} NULL -16 grant system {"grantee_id":"u1","grantor_id":"s1","object_id":"SYSTEM","privileges":"RBN"} NULL +15 grant system {"grantee_id":"s1","grantor_id":"s1","object_id":"SYSTEM","privileges":"RBNP"} NULL +16 grant system {"grantee_id":"u1","grantor_id":"s1","object_id":"SYSTEM","privileges":"RBNP"} NULL 17 alter system {"name":"enable_reduce_mfp_fusion","value":"on"} mz_system 18 alter system {"name":"enable_unsafe_functions","value":"on"} mz_system 19 create database {"id":"u2","name":"test"} materialize diff --git a/test/sqllogictest/autogenerated/mz_internal.slt b/test/sqllogictest/autogenerated/mz_internal.slt index be48c1fed525e..25dce0a490ac3 100644 --- a/test/sqllogictest/autogenerated/mz_internal.slt +++ b/test/sqllogictest/autogenerated/mz_internal.slt @@ -727,6 +727,7 @@ mz_show_my_object_privileges mz_show_my_role_members mz_show_my_schema_privileges mz_show_my_system_privileges +mz_show_network_policies mz_show_object_privileges mz_show_role_members mz_show_roles diff --git a/test/sqllogictest/information_schema_tables.slt b/test/sqllogictest/information_schema_tables.slt index 8bd9619f53c69..04758cd6a92ec 100644 --- a/test/sqllogictest/information_schema_tables.slt +++ b/test/sqllogictest/information_schema_tables.slt @@ -589,6 +589,10 @@ mz_show_my_system_privileges VIEW materialize mz_internal +mz_show_network_policies +VIEW +materialize +mz_internal mz_show_object_privileges VIEW materialize diff --git a/test/sqllogictest/mz_catalog_server_index_accounting.slt b/test/sqllogictest/mz_catalog_server_index_accounting.slt index a950866e9d56b..4f6adee71c260 100644 --- a/test/sqllogictest/mz_catalog_server_index_accounting.slt +++ b/test/sqllogictest/mz_catalog_server_index_accounting.slt @@ -72,7 +72,7 @@ mz_message_batch_counts_received_raw_s2_primary_idx CREATE␠INDEX␠"mz_messag mz_message_batch_counts_sent_raw_s2_primary_idx CREATE␠INDEX␠"mz_message_batch_counts_sent_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_message_batch_counts_sent_raw"␠("channel_id",␠"from_worker_id",␠"to_worker_id") mz_message_counts_received_raw_s2_primary_idx CREATE␠INDEX␠"mz_message_counts_received_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_message_counts_received_raw"␠("channel_id",␠"from_worker_id",␠"to_worker_id") mz_message_counts_sent_raw_s2_primary_idx CREATE␠INDEX␠"mz_message_counts_sent_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_message_counts_sent_raw"␠("channel_id",␠"from_worker_id",␠"to_worker_id") -mz_notices_ind CREATE␠INDEX␠"mz_notices_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s775␠AS␠"mz_internal"."mz_notices"]␠("id") +mz_notices_ind CREATE␠INDEX␠"mz_notices_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s776␠AS␠"mz_internal"."mz_notices"]␠("id") mz_object_dependencies_ind CREATE␠INDEX␠"mz_object_dependencies_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s453␠AS␠"mz_internal"."mz_object_dependencies"]␠("object_id") mz_object_history_ind CREATE␠INDEX␠"mz_object_history_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s517␠AS␠"mz_internal"."mz_object_history"]␠("id") mz_object_lifetimes_ind CREATE␠INDEX␠"mz_object_lifetimes_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s518␠AS␠"mz_internal"."mz_object_lifetimes"]␠("id") @@ -81,7 +81,7 @@ mz_objects_ind CREATE␠INDEX␠"mz_objects_ind"␠IN␠CLUSTER␠[s2]␠ON␠[ mz_peek_durations_histogram_raw_s2_primary_idx CREATE␠INDEX␠"mz_peek_durations_histogram_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_peek_durations_histogram_raw"␠("worker_id",␠"type",␠"duration_ns") mz_recent_activity_log_thinned_ind CREATE␠INDEX␠"mz_recent_activity_log_thinned_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s676␠AS␠"mz_internal"."mz_recent_activity_log_thinned"]␠("sql_hash") mz_recent_sql_text_ind CREATE␠INDEX␠"mz_recent_sql_text_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s672␠AS␠"mz_internal"."mz_recent_sql_text"]␠("sql_hash") -mz_recent_storage_usage_ind CREATE␠INDEX␠"mz_recent_storage_usage_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s767␠AS␠"mz_catalog"."mz_recent_storage_usage"]␠("object_id") +mz_recent_storage_usage_ind CREATE␠INDEX␠"mz_recent_storage_usage_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s768␠AS␠"mz_catalog"."mz_recent_storage_usage"]␠("object_id") mz_roles_ind CREATE␠INDEX␠"mz_roles_ind"␠IN␠CLUSTER␠[s2]␠ON␠[s476␠AS␠"mz_catalog"."mz_roles"]␠("id") mz_scheduling_elapsed_raw_s2_primary_idx CREATE␠INDEX␠"mz_scheduling_elapsed_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_scheduling_elapsed_raw"␠("id",␠"worker_id") mz_scheduling_parks_histogram_raw_s2_primary_idx CREATE␠INDEX␠"mz_scheduling_parks_histogram_raw_s2_primary_idx"␠IN␠CLUSTER␠[s2]␠ON␠"mz_introspection"."mz_scheduling_parks_histogram_raw"␠("worker_id",␠"slept_for_ns",␠"requested_ns") diff --git a/test/sqllogictest/network_policy.slt b/test/sqllogictest/network_policy.slt new file mode 100644 index 0000000000000..6b8adefa498bc --- /dev/null +++ b/test/sqllogictest/network_policy.slt @@ -0,0 +1,88 @@ +# Copyright Materialize, Inc. and contributors. All rights reserved. +# +# Use of this software is governed by the Business Source License +# included in the LICENSE file at the root of this repository. +# +# As of the Change Date specified in that file, in accordance with +# the Business Source License, use of this software will be governed +# by the Apache License, Version 2.0. + +# Test for `NETWORK POLICIES`. + +mode standard + +# Start from a pristine state +reset-server + +# Verify initial Network Policies. +query TTT +select * from (SHOW NETWORK POLICIES) +---- + + + +simple conn=mz_system,user=mz_system +ALTER SYSTEM SET enable_network_policies=on +---- +COMPLETE 0 + +simple conn=mz_system,user=mz_system +CREATE NETWORK POLICY np (RULES ( r1 (address='0.0.0.0/32', action='allow', direction='ingress'), r2 (address='0.0.0.1/32', action='allow', direction='ingress') )) +---- +COMPLETE 0 + +query TTT rowsort +SELECT * FROM (SHOW NETWORK POLICIES) +---- +np +r1,r2 +(empty) + +query TTTT +SELECT id, name, owner_id, oid FROM mz_internal.mz_network_policies +---- +u1 +np +s1 +20177 + + +query TTTTT colnames +SELECT * FROM mz_internal.mz_network_policy_rules +---- +name policy_id action address direction +r1 +u1 +allow +0.0.0.0/32 +ingress +r2 +u1 +allow +0.0.0.1/32 +ingress + + +simple conn=mz_system,user=mz_system +ALTER NETWORK POLICY np SET (RULES (r1 (address='1.1.1.1/32', action='allow', direction='ingress') )); +---- +COMPLETE 0 + +query TTTTT colnames +SELECT * FROM mz_internal.mz_network_policy_rules +---- +name policy_id action address direction +r1 +u1 +allow +1.1.1.1/32 +ingress + +simple conn=mz_system,user=mz_system +DROP NETWORK POLICY np; +---- +COMPLETE 0 + +query TT rowsort +select * from (SHOW NETWORK POLICIES) +---- diff --git a/test/sqllogictest/object_ownership.slt b/test/sqllogictest/object_ownership.slt index 2c4c89b5f4e7b..ffa1e08e05756 100644 --- a/test/sqllogictest/object_ownership.slt +++ b/test/sqllogictest/object_ownership.slt @@ -2543,8 +2543,8 @@ v materialize=r/mz_system query T SELECT privileges::text FROM mz_system_privileges ---- -mz_system=RBN/mz_system materialize=BN/mz_system +mz_system=RBNP/mz_system simple conn=mz_system,user=mz_system DROP OWNED BY materialize; @@ -2579,7 +2579,7 @@ v mz_system=r/mz_system query T SELECT privileges::text FROM mz_system_privileges ---- -mz_system=RBN/mz_system +mz_system=RBNP/mz_system simple conn=mz_system,user=mz_system DROP VIEW v; diff --git a/test/sqllogictest/oid.slt b/test/sqllogictest/oid.slt index ca181939ce6bc..ccfee8dc83033 100644 --- a/test/sqllogictest/oid.slt +++ b/test/sqllogictest/oid.slt @@ -1148,3 +1148,4 @@ SELECT oid, name FROM mz_objects WHERE id LIKE 's%' AND oid < 20000 ORDER BY oid 17040 mz_network_policies 17041 mz_network_policy_rules 17042 mz_index_advice +17043 mz_show_network_policies diff --git a/test/sqllogictest/privilege_grants.slt b/test/sqllogictest/privilege_grants.slt index 68499a8dfa35d..9f304e4edc189 100644 --- a/test/sqllogictest/privilege_grants.slt +++ b/test/sqllogictest/privilege_grants.slt @@ -129,7 +129,7 @@ mz_system=U/mz_system query T SELECT privileges::text FROM mz_system_privileges ---- -mz_system=RBN/mz_system +mz_system=RBNP/mz_system ## Test user created objects @@ -2216,7 +2216,7 @@ query T SELECT privileges::text FROM mz_system_privileges ---- joe=B/mz_system -mz_system=RBN/mz_system +mz_system=RBNP/mz_system query B SELECT has_system_privilege('joe', 'CREATEDB') @@ -2243,7 +2243,7 @@ query T SELECT privileges::text FROM mz_system_privileges ---- joe=B/mz_system -mz_system=RBN/mz_system +mz_system=RBNP/mz_system simple conn=mz_system,user=mz_system GRANT CREATEROLE, CREATECLUSTER ON SYSTEM TO PUBLIC @@ -2255,7 +2255,7 @@ SELECT privileges::text FROM mz_system_privileges ---- =RN/mz_system joe=B/mz_system -mz_system=RBN/mz_system +mz_system=RBNP/mz_system statement error role "joe" cannot be dropped because some objects depend on it DROP ROLE joe @@ -2269,7 +2269,7 @@ query T SELECT privileges::text FROM mz_system_privileges ---- =RN/mz_system -mz_system=RBN/mz_system +mz_system=RBNP/mz_system query B SELECT has_system_privilege('joe', 'CREATEDB') @@ -2296,7 +2296,7 @@ query T SELECT privileges::text FROM mz_system_privileges ---- =RN/mz_system -mz_system=RBN/mz_system +mz_system=RBNP/mz_system statement ok DROP ROLE joe @@ -2315,7 +2315,7 @@ COMPLETE 0 query T SELECT privileges::text FROM mz_system_privileges ---- -mz_system=RBN/mz_system +mz_system=RBNP/mz_system query B SELECT has_system_privilege('joe', 'CREATEDB') @@ -2542,8 +2542,8 @@ COMPLETE 0 query T SELECT privileges::text FROM mz_system_privileges ---- -joe=RBN/mz_system -mz_system=RBN/mz_system +joe=RBNP/mz_system +mz_system=RBNP/mz_system simple conn=mz_system,user=mz_system REVOKE ALL ON SYSTEM FROM joe @@ -2553,7 +2553,7 @@ COMPLETE 0 query T SELECT privileges::text FROM mz_system_privileges ---- -mz_system=RBN/mz_system +mz_system=RBNP/mz_system ## Test system objects diff --git a/test/sqllogictest/rbac_views.slt b/test/sqllogictest/rbac_views.slt index 475762e9e065b..3191299cabb3f 100644 --- a/test/sqllogictest/rbac_views.slt +++ b/test/sqllogictest/rbac_views.slt @@ -99,6 +99,7 @@ mz_system PUBLIC CREATECLUSTER mz_system materialize CREATEDB mz_system materialize CREATEROLE mz_system materialize CREATECLUSTER +mz_system materialize CREATENETWORKPOLICY mz_system r1 CREATEDB mz_system r1 CREATECLUSTER mz_system r2 CREATEROLE @@ -320,6 +321,7 @@ mz_system PUBLIC NULL NULL NULL system CREATECLUS mz_system materialize NULL NULL NULL system CREATEDB mz_system materialize NULL NULL NULL system CREATEROLE mz_system materialize NULL NULL NULL system CREATECLUSTER +mz_system materialize NULL NULL NULL system CREATENETWORKPOLICY mz_system r1 NULL NULL NULL system CREATEDB mz_system r1 NULL NULL NULL system CREATECLUSTER mz_system r2 NULL NULL NULL system CREATEROLE @@ -402,6 +404,7 @@ mz_system PUBLIC NULL NULL NULL system CREATECLUS mz_system materialize NULL NULL NULL system CREATEDB mz_system materialize NULL NULL NULL system CREATEROLE mz_system materialize NULL NULL NULL system CREATECLUSTER +mz_system materialize NULL NULL NULL system CREATENETWORKPOLICY mz_system r1 NULL NULL NULL system CREATEDB mz_system r1 NULL NULL NULL system CREATECLUSTER mz_system r2 NULL NULL NULL system CREATEROLE diff --git a/test/testdrive/catalog.td b/test/testdrive/catalog.td index 864eaf1ccc39f..801712c53dfef 100644 --- a/test/testdrive/catalog.td +++ b/test/testdrive/catalog.td @@ -289,7 +289,7 @@ public.bool > DROP DATABASE foo ! DROP OBJECT v1 -contains:Expected one of TABLE or VIEW or MATERIALIZED or SOURCE or SINK or INDEX or TYPE or ROLE or USER or CLUSTER or SECRET or CONNECTION or DATABASE or SCHEMA or FUNCTION or CONTINUAL, found identifier +contains:Expected one of TABLE or VIEW or MATERIALIZED or SOURCE or SINK or INDEX or TYPE or ROLE or USER or CLUSTER or SECRET or CONNECTION or DATABASE or SCHEMA or FUNCTION or CONTINUAL or NETWORK, found identifier > SHOW OBJECTS name type comment @@ -671,6 +671,7 @@ mz_show_my_object_privileges "" mz_show_my_role_members "" mz_show_my_schema_privileges "" mz_show_my_system_privileges "" +mz_show_network_policies "" mz_show_object_privileges "" mz_show_role_members "" mz_show_roles "" diff --git a/test/testdrive/session.td b/test/testdrive/session.td index 071857987396e..93ae34f1fdd47 100644 --- a/test/testdrive/session.td +++ b/test/testdrive/session.td @@ -50,12 +50,14 @@ max_identifier_length 255 "The maximum length max_kafka_connections 1000 "The maximum number of Kafka connections in the region, across all schemas (Materialize)." max_materialized_views 100 "The maximum number of materialized views in the region, across all schemas (Materialize)." max_mysql_connections 1000 "The maximum number of MySQL connections in the region, across all schemas (Materialize)." +max_network_policies 25 "The maximum number of network policies in the region." max_objects_per_schema 1000 "The maximum number of objects in a schema (Materialize)." max_postgres_connections 1000 "The maximum number of PostgreSQL connections in the region, across all schemas (Materialize)." max_query_result_size "1GB" "The maximum size in bytes for a single query's result (Materialize)." max_replicas_per_cluster 5 "The maximum number of replicas of a single cluster (Materialize)." max_result_size "1GB" "The maximum size in bytes for an internal query result (Materialize)." max_roles 1000 "The maximum number of roles in the region (Materialize)." +max_rules_per_network_policy 25 "The maximum number of rules per network policies." max_schemas_per_database 1000 "The maximum number of schemas in a database (Materialize)." max_secrets 100 "The maximum number of secrets in the region, across all schemas (Materialize)." max_sinks 25 "The maximum number of sinks in the region, across all schemas (Materialize)."