From c4b96f426acc70e64ecfd7758fd5a82c99c9f3ea Mon Sep 17 00:00:00 2001 From: Till Rohrmann Date: Thu, 14 May 2026 01:51:58 +0200 Subject: [PATCH] Correct sort order for tables with variable length key fields The problem is that variable length key fields are length encoded so that the length of the field decides its order and not the value. Hence, shorter values precede longer values which should violate DF sort order assumption. --- .../src/keyed_service_status/schema.rs | 6 +----- crates/storage-query-datafusion/src/locks/schema.rs | 2 +- crates/storage-query-datafusion/src/promise/schema.rs | 2 +- crates/storage-query-datafusion/src/state/schema.rs | 2 +- crates/storage-query-datafusion/src/user_limits/schema.rs | 2 +- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/crates/storage-query-datafusion/src/keyed_service_status/schema.rs b/crates/storage-query-datafusion/src/keyed_service_status/schema.rs index caba39d131..a0852808e1 100644 --- a/crates/storage-query-datafusion/src/keyed_service_status/schema.rs +++ b/crates/storage-query-datafusion/src/keyed_service_status/schema.rs @@ -12,11 +12,7 @@ use crate::table_macro::*; use datafusion::arrow::datatypes::DataType; -define_sort_order!(sys_keyed_service_status( - partition_key, - service_name, - service_key -)); +define_sort_order!(sys_keyed_service_status(partition_key)); define_table!(sys_keyed_service_status( /// Internal column that is used for partitioning the services invocations. Can be ignored. diff --git a/crates/storage-query-datafusion/src/locks/schema.rs b/crates/storage-query-datafusion/src/locks/schema.rs index 324909ad0b..9aca0043a6 100644 --- a/crates/storage-query-datafusion/src/locks/schema.rs +++ b/crates/storage-query-datafusion/src/locks/schema.rs @@ -12,7 +12,7 @@ use crate::table_macro::*; use datafusion::arrow::datatypes::DataType; -define_sort_order!(sys_locks(partition_key, scope, lock_name)); +define_sort_order!(sys_locks(partition_key)); define_table!(sys_locks( /// Internal column that is used for partitioning. Can be ignored. diff --git a/crates/storage-query-datafusion/src/promise/schema.rs b/crates/storage-query-datafusion/src/promise/schema.rs index bb099f5697..6b0e31d018 100644 --- a/crates/storage-query-datafusion/src/promise/schema.rs +++ b/crates/storage-query-datafusion/src/promise/schema.rs @@ -12,7 +12,7 @@ use crate::table_macro::*; use datafusion::arrow::datatypes::DataType; -define_sort_order!(sys_promise(partition_key, service_name, service_key)); +define_sort_order!(sys_promise(partition_key)); define_table!(sys_promise( /// Internal column that is used for partitioning the services invocations. Can be ignored. diff --git a/crates/storage-query-datafusion/src/state/schema.rs b/crates/storage-query-datafusion/src/state/schema.rs index 59e0df3214..e04d35d281 100644 --- a/crates/storage-query-datafusion/src/state/schema.rs +++ b/crates/storage-query-datafusion/src/state/schema.rs @@ -12,7 +12,7 @@ use crate::table_macro::*; use datafusion::arrow::datatypes::DataType; -define_sort_order!(state(partition_key, service_name, service_key)); +define_sort_order!(state(partition_key)); define_table!(state( /// Internal column that is used for partitioning the services invocations. Can be ignored. diff --git a/crates/storage-query-datafusion/src/user_limits/schema.rs b/crates/storage-query-datafusion/src/user_limits/schema.rs index e6f8177ab6..161be7aa37 100644 --- a/crates/storage-query-datafusion/src/user_limits/schema.rs +++ b/crates/storage-query-datafusion/src/user_limits/schema.rs @@ -12,7 +12,7 @@ use crate::table_macro::*; use datafusion::arrow::datatypes::DataType; -define_sort_order!(sys_user_limits(partition_key, scope, l1, l2)); +define_sort_order!(sys_user_limits(partition_key)); define_table!(sys_user_limits( /// Internal column that is used for partitioning. Can be ignored.