blob: 2a8c32d370c9189275d64bae9d86de694f10e77b [file]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
[workspace]
members = [
"datafusion/common",
"datafusion/common-runtime",
"datafusion/catalog",
"datafusion/catalog-listing",
"datafusion/datasource",
"datafusion/datasource-arrow",
"datafusion/datasource-avro",
"datafusion/datasource-csv",
"datafusion/datasource-json",
"datafusion/datasource-parquet",
"datafusion/core",
"datafusion/expr",
"datafusion/expr-common",
"datafusion/execution",
"datafusion/ffi",
"datafusion/ffi/integration-tests",
"datafusion/functions",
"datafusion/functions-aggregate",
"datafusion/functions-aggregate-common",
"datafusion/functions-table",
"datafusion/functions-nested",
"datafusion/functions-window",
"datafusion/functions-window-common",
"datafusion/optimizer",
"datafusion/physical-expr",
"datafusion/physical-expr-adapter",
"datafusion/physical-expr-common",
"datafusion/physical-optimizer",
"datafusion/pruning",
"datafusion/physical-plan",
"datafusion/proto",
"datafusion/proto-common",
"datafusion/proto-common/gen",
"datafusion/proto-models",
"datafusion/proto-models/gen",
"datafusion/session",
"datafusion/spark",
"datafusion/sql",
"datafusion/sqllogictest",
"datafusion/substrait",
"datafusion/wasmtest",
"datafusion-cli",
"datafusion-examples",
"datafusion-examples/examples/ffi/ffi_example_table_provider",
"datafusion-examples/examples/ffi/ffi_module_interface",
"datafusion-examples/examples/ffi/ffi_module_loader",
"test-utils",
"benchmarks",
"datafusion/macros",
"datafusion/doc",
"xtask",
]
resolver = "2"
[workspace.package]
authors = ["Apache DataFusion <dev@datafusion.apache.org>"]
edition = "2024"
homepage = "https://datafusion.apache.org"
license = "Apache-2.0"
readme = "README.md"
repository = "https://github.com/apache/datafusion"
# Define Minimum Supported Rust Version (MSRV)
rust-version = "1.95.0"
# Define DataFusion version
version = "55.1.0"
[workspace.dependencies]
# We turn off default-features for some dependencies here so the workspaces which inherit them can
# selectively turn them on if needed, since we can override default-features = true (from false)
# for the inherited dependency but cannot do the reverse (override from true to false).
#
# See for more details: https://github.com/rust-lang/cargo/issues/11329
apache-avro = { version = "0.21", default-features = false }
arrow = { version = "60.0.0", features = [
"prettyprint",
"chrono-tz",
] }
arrow-avro = { version = "60.0.0", default-features = false, features = [
"deflate",
"snappy",
"zstd",
"bzip2",
"xz",
] }
arrow-buffer = { version = "60.0.0", default-features = false }
arrow-data = { version = "60.0.0", default-features = false }
arrow-flight = { version = "60.0.0", features = [
"flight-sql",
] }
# Both codecs are required here to make sure that code paths like
# file-spilling have access to all compression codecs.
arrow-ipc = { version = "60.0.0", default-features = false, features = [
"lz4",
"zstd",
] }
arrow-ord = { version = "60.0.0", default-features = false }
arrow-schema = { version = "60.0.0", default-features = false }
arrow-select = { version = "60.0.0", default-features = false }
async-trait = "0.1.89"
bigdecimal = "0.4.8"
bytes = "1.11"
bzip2 = "0.6.1"
chrono = { version = "0.4.45", default-features = false }
criterion = "0.8"
ctor = "1.0.7"
dashmap = "6.2.1"
datafusion = { path = "datafusion/core", version = "55.1.0", default-features = false }
datafusion-catalog = { path = "datafusion/catalog", version = "55.1.0" }
datafusion-catalog-listing = { path = "datafusion/catalog-listing", version = "55.1.0" }
datafusion-common = { path = "datafusion/common", version = "55.1.0", default-features = false }
datafusion-common-runtime = { path = "datafusion/common-runtime", version = "55.1.0" }
datafusion-datasource = { path = "datafusion/datasource", version = "55.1.0", default-features = false }
datafusion-datasource-arrow = { path = "datafusion/datasource-arrow", version = "55.1.0", default-features = false }
datafusion-datasource-avro = { path = "datafusion/datasource-avro", version = "55.1.0", default-features = false }
datafusion-datasource-csv = { path = "datafusion/datasource-csv", version = "55.1.0", default-features = false }
datafusion-datasource-json = { path = "datafusion/datasource-json", version = "55.1.0", default-features = false }
datafusion-datasource-parquet = { path = "datafusion/datasource-parquet", version = "55.1.0", default-features = false }
datafusion-doc = { path = "datafusion/doc", version = "55.1.0" }
datafusion-execution = { path = "datafusion/execution", version = "55.1.0", default-features = false }
datafusion-expr = { path = "datafusion/expr", version = "55.1.0", default-features = false }
datafusion-expr-common = { path = "datafusion/expr-common", version = "55.1.0" }
datafusion-ffi = { path = "datafusion/ffi", version = "55.1.0" }
datafusion-functions = { path = "datafusion/functions", version = "55.1.0" }
datafusion-functions-aggregate = { path = "datafusion/functions-aggregate", version = "55.1.0" }
datafusion-functions-aggregate-common = { path = "datafusion/functions-aggregate-common", version = "55.1.0" }
datafusion-functions-nested = { path = "datafusion/functions-nested", version = "55.1.0", default-features = false }
datafusion-functions-table = { path = "datafusion/functions-table", version = "55.1.0" }
datafusion-functions-window = { path = "datafusion/functions-window", version = "55.1.0" }
datafusion-functions-window-common = { path = "datafusion/functions-window-common", version = "55.1.0" }
datafusion-macros = { path = "datafusion/macros", version = "55.1.0" }
datafusion-optimizer = { path = "datafusion/optimizer", version = "55.1.0", default-features = false }
datafusion-physical-expr = { path = "datafusion/physical-expr", version = "55.1.0", default-features = false }
datafusion-physical-expr-adapter = { path = "datafusion/physical-expr-adapter", version = "55.1.0", default-features = false }
datafusion-physical-expr-common = { path = "datafusion/physical-expr-common", version = "55.1.0", default-features = false }
datafusion-physical-optimizer = { path = "datafusion/physical-optimizer", version = "55.1.0" }
datafusion-physical-plan = { path = "datafusion/physical-plan", version = "55.1.0" }
datafusion-proto = { path = "datafusion/proto", version = "55.1.0", default-features = false }
datafusion-proto-common = { path = "datafusion/proto-common", version = "55.1.0" }
datafusion-proto-models = { path = "datafusion/proto-models", version = "55.1.0" }
datafusion-pruning = { path = "datafusion/pruning", version = "55.1.0" }
datafusion-session = { path = "datafusion/session", version = "55.1.0" }
datafusion-spark = { path = "datafusion/spark", version = "55.1.0" }
datafusion-sql = { path = "datafusion/sql", version = "55.1.0" }
datafusion-substrait = { path = "datafusion/substrait", version = "55.1.0" }
doc-comment = "0.3"
env_logger = "0.11"
flate2 = "1.1.9"
futures = "0.3"
glob = "0.3.0"
half = { version = "2.7.0", default-features = false }
hashbrown = { version = "0.17.1" }
hex = { version = "0.4.3" }
indexmap = "2.14.0"
insta = { version = "1.47.2", features = ["glob", "filters"] }
itertools = "0.15"
itoa = "1.0"
liblzma = { version = "0.4.6", features = ["static"] }
log = "^0.4"
loom = "0.7"
memchr = "2.8.1"
num-traits = { version = "0.2" }
object_store = { version = "0.14.2", default-features = false }
parking_lot = "0.12"
parquet = { version = "60.0.0", default-features = false, features = [
"arrow",
"async",
"object_store",
] }
pbjson = { version = "0.9.0" }
pbjson-types = "0.9"
percent-encoding = "2.3"
pin-project = "1"
pin-project-lite = "^0.2.7"
# Should match arrow-flight's version of prost.
prost = "0.14.1"
rand = "0.9"
recursive = "0.1.1"
regex = "1.12"
rstest = "0.28.0"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
sha2 = "^0.11.0"
sqlparser = { version = "0.63.0", default-features = false, features = ["std", "visitor"] }
stacker = "0.1.24"
strum = "0.28.0"
strum_macros = "0.28.0"
tempfile = "3"
testcontainers-modules = { version = "0.15" }
tokio = { version = "1.52", features = ["macros", "rt", "sync"] }
tokio-stream = "0.1"
tokio-util = "0.7"
url = "2.5.7"
uuid = "1.23"
zstd = { version = "0.14", default-features = false }
# Keep this list sorted alphabetically.
# See https://github.com/apache/datafusion/issues/18467 for the ongoing effort of
# picking useful non-default lints.
[workspace.lints.clippy]
all = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
# https://github.com/apache/datafusion/issues/18881
allow_attributes = "warn"
as_ptr_cast_mut = "warn"
branches_sharing_code = "warn"
clear_with_drain = "warn"
coerce_container_to_any = "warn"
debug_assert_with_mut_call = "warn"
default_union_representation = "warn"
doc_include_without_cfg = "warn"
empty_enum_variants_with_brackets = "warn"
equatable_if_let = "warn"
exit = "warn"
fn_to_numeric_cast_any = "warn"
imprecise_flops = "warn"
infinite_loop = "warn"
iter_on_empty_collections = "warn"
iter_on_single_items = "warn"
large_include_file = "warn"
# Guards against stack overflows
large_stack_frames = "warn"
# Catches `"{foo}"` where the string is never actually formatted
literal_string_with_formatting_args = "warn"
mem_forget = "warn"
needless_type_cast = "warn"
negative_feature_names = "warn"
non_zero_suggestions = "warn"
nonstandard_macro_braces = "warn"
or_fun_call = "warn"
path_buf_push_overwrite = "warn"
pathbuf_init_then_push = "warn"
precedence_bits = "warn"
pub_without_shorthand = "warn"
rc_mutex = "warn"
rest_pat_in_fully_bound_structs = "warn"
# Avoids hashing the key twice
set_contains_or_insert = "warn"
single_option_map = "warn"
string_lit_as_bytes = "warn"
string_lit_chars_any = "warn"
suspicious_xor_used_as_pow = "warn"
trailing_empty_array = "warn"
trait_duplication_in_bounds = "warn"
uninhabited_references = "warn"
unnecessary_safety_doc = "warn"
unnecessary_self_imports = "warn"
unnecessary_struct_initialization = "warn"
unused_peekable = "warn"
unused_rounding = "warn"
verbose_file_reads = "warn"
wildcard_dependencies = "warn"
# Pedantic lints we opt out of, with the number of hits at the time we enabled `pedantic`.
# Some of these we should consider enabling.
assert_is_empty = "allow" # 105 hits
cast_lossless = "allow" # 361 hits
cast_possible_truncation = "allow" # 911 hits
cast_possible_wrap = "allow" # 493 hits
cast_precision_loss = "allow" # 266 hits
cast_sign_loss = "allow" # 440 hits
default_trait_access = "allow" # 221 hits
doc_markdown = "allow" # 4933 hits; needs a long `doc-valid-idents` list in `clippy.toml`
enum_glob_use = "allow" # 98 hits
explicit_into_iter_loop = "allow" # 55 hits
explicit_iter_loop = "allow" # 189 hits
float_cmp = "allow" # 8 hits; exact float comparisons are often intentional here
if_not_else = "allow" # 133 hits
ignored_unit_patterns = "allow" # 52 hits
implicit_clone = "allow" # 198 hits
implicit_hasher = "allow" # 17 hits; some sites feed arrow APIs that require the default hasher
inline_always = "allow" # 45 hits
items_after_statements = "allow" # 171 hits
manual_string_new = "allow" # 84 hits
many_single_char_names = "allow" # 12 hits; short names are idiomatic in the numeric kernels
map_unwrap_or = "allow" # 198 hits
match_bool = "allow" # 46 hits
match_same_arms = "allow" # 261 hits
match_wildcard_for_single_variants = "allow" # 132 hits
missing_errors_doc = "allow" # 1807 hits
missing_fields_in_debug = "allow" # 29 hits
missing_panics_doc = "allow" # 244 hits
must_use_candidate = "allow" # 2726 hits
needless_raw_string_hashes = "allow" # 540 hits
redundant_closure_for_method_calls = "allow" # 686 hits
redundant_else = "allow" # 48 hits
return_self_not_must_use = "allow" # 644 hits
semicolon_if_nothing_returned = "allow" # 1353 hits
similar_names = "allow" # 228 hits; too many false positives, e.g. `expr`/`exprs`
single_match_else = "allow" # 155 hits
struct_excessive_bools = "allow" # 24 hits
struct_field_names = "allow" # 14 hits
too_many_lines = "allow" # 484 hits
trivially_copy_pass_by_ref = "allow" # 74 hits
unnecessary_literal_bound = "allow" # 471 hits
unnecessary_wraps = "allow" # 427 hits
unnested_or_patterns = "allow" # 68 hits
unreadable_literal = "allow" # 502 hits
unused_self = "allow" # 69 hits
used_underscore_items = "allow" # 28 hits
wildcard_imports = "allow" # 48 hits; `use crate::prelude::*` is idiomatic
[workspace.lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = [
'cfg(datafusion_coop, values("tokio", "tokio_fallback", "per_stream"))',
"cfg(coverage)",
"cfg(coverage_nightly)",
# Enables the loom model-checked concurrency tests; see
# datafusion/physical-plan/src/joins/hash_join/probe_completion.rs.
# Namespaced rather than a bare `loom`, which tokio also reads and which
# would switch tokio itself into its loom build.
"cfg(datafusion_loom)",
] }
unused_qualifications = "deny"
# --------------------
# Compilation Profiles
# --------------------
# A Cargo profile is a preset for the compiler/linker knobs that trades off:
# - Build time: how quickly code compiles and links
# - Runtime performance: how fast the resulting binaries execute
# - Binary size: how large the executables end up
# - Debuggability: how much debug information is preserved for debugging and profiling
#
# To use a profile: `cargo [ build | run | ... ] --profile <profile-name>`
#
# Profiles available:
# - dev: default debug build; fastest to compile, slowest to run. Carries line
# tables only, so panics and backtraces still name a file and line but a
# debugger cannot inspect variables; build with `CARGO_PROFILE_DEV_DEBUG=2`
# when you need that. For everyday development; default for
# "cargo [ build | test | run ]".
# - release: fully optimized build; slowest to compile, fastest to run, smallest
# binaries. For public releases; default for "cargo [ bench | install ]".
# - release-nonlto: skips LTO, so it builds much faster while staying close to
# release performance. Useful when developing performance optimizations.
# - profiling: inherits release optimizations but retains debug info to support
# profiling tools and flamegraphs.
# - ci: derived from `dev` but disables debug info and incremental builds to keep
# CI artifacts small and reproducible.
# - ci-optimized: derived from `release` but enables debug assertions and uses
# less aggressive optimizations for faster builds. Used for long-running CI
# tasks.
#
# If you want to optimize compilation, the `compile_profile` benchmark can be useful.
# See `benchmarks/README.md` for more details.
# `dev` is the profile every `cargo build`/`cargo test` uses, so its debug info
# is generated over and over. `line-tables-only` keeps file and line numbers --
# so panics and `RUST_BACKTRACE` output stay useful -- while dropping the
# variable-level DWARF that only an interactive debugger consumes. Build with
# `CARGO_PROFILE_DEV_DEBUG=2 cargo build` when you need to step through code in a
# debugger.
[profile.dev]
#debug = "line-tables-only"
[profile.release]
codegen-units = 1
lto = true
strip = true # Eliminate debug info to minimize binary size
[profile.release-nonlto]
inherits = "release"
codegen-units = 16
lto = false
strip = false # Retain debug info for flamegraphs
[profile.profiling]
inherits = "release"
debug = true
strip = false
[profile.ci-optimized]
inherits = "release"
debug-assertions = true
codegen-units = 16
lto = "thin"
[profile.ci]
inherits = "dev"
debug = false
incremental = false
# This rule applies to every package except workspace members (dependencies
# such as `arrow` and `tokio`). It disables debug info and related features on
# dependencies so their binaries stay smaller, improving cache reuse.
[profile.ci.package."*"]
debug = false
debug-assertions = false
strip = "debuginfo"
incremental = false
# Execute benchmark tests with debug checks, without release-mode build costs.
[profile.ci-bench]
inherits = "ci"
opt-level = 1