| // 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. | |
| //! IMDB binary entrypoint | |
| use clap::{Parser, Subcommand}; | |
| use datafusion::error::Result; | |
| use datafusion_benchmarks::imdb; | |
| #[cfg(feature = "snmalloc")] | |
| #[global_allocator] | |
| static ALLOC: snmalloc_rs::SnMalloc = snmalloc_rs::SnMalloc; | |
| // `cargo clippy --all-features` enables both allocator features, so prefer | |
| // `snmalloc` in that case and fall back to `mimalloc` otherwise. | |
| #[cfg(all(not(feature = "snmalloc"), feature = "mimalloc"))] | |
| #[global_allocator] | |
| static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc; | |
| #[derive(Debug, Parser)] | |
| #[command(name = "IMDB", about = "IMDB Dataset Processing.")] | |
| struct Cli { | |
| #[command(subcommand)] | |
| command: ImdbOpt, | |
| } | |
| #[derive(Debug, Subcommand)] | |
| enum ImdbOpt { | |
| #[command(subcommand)] | |
| Benchmark(BenchmarkSubCommandOpt), | |
| Convert(imdb::ConvertOpt), | |
| } | |
| #[derive(Debug, Subcommand)] | |
| enum BenchmarkSubCommandOpt { | |
| #[command(name = "datafusion")] | |
| DataFusionBenchmark(imdb::RunOpt), | |
| } | |
| #[tokio::main] | |
| pub async fn main() -> Result<()> { | |
| env_logger::init(); | |
| match Cli::parse().command { | |
| ImdbOpt::Benchmark(BenchmarkSubCommandOpt::DataFusionBenchmark(opt)) => { | |
| Box::pin(opt.run()).await | |
| } | |
| ImdbOpt::Convert(opt) => opt.run().await, | |
| } | |
| } |