Skip to main content

uni_query_functions/rewrite/rules/
mod.rs

1/// Built-in rewrite rules
2pub mod btic;
3pub mod temporal;
4
5use crate::rewrite::registry::RewriteRegistry;
6use std::sync::Arc;
7
8/// Register all built-in rewrite rules
9pub fn register_builtin_rules(registry: &mut RewriteRegistry) {
10    // Register temporal rules
11    registry.register(Arc::new(temporal::ValidAtRule));
12    registry.register(Arc::new(temporal::OverlapsRule));
13    registry.register(Arc::new(temporal::PrecedesRule));
14    registry.register(Arc::new(temporal::SucceedsRule));
15    registry.register(Arc::new(temporal::IsOngoingRule));
16    registry.register(Arc::new(temporal::HasClosedRule));
17
18    // BTIC rules: available but not registered by default.
19    // btic_contains_point rewrite decomposes into btic_lo/btic_hi range
20    // predicates, but btic_lo returns DateTime while the point argument is
21    // typically Int (ms-since-epoch), causing a type mismatch.  Enable once
22    // the pushdown layer can handle the decomposed form end-to-end.
23    // registry.register(Arc::new(btic::BticContainsPointRule));
24
25    tracing::debug!("Registered {} built-in rewrite rules", registry.len());
26}