Skip to content

Commit 76cb8c0

Browse files
committed
Add support for using Window functions
1 parent 1677b90 commit 76cb8c0

File tree

2 files changed

+36
-35
lines changed

2 files changed

+36
-35
lines changed

src/main.rs

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,12 @@ use gitql_cli::printer::csv_printer::CSVPrinter;
1414
use gitql_cli::printer::json_printer::JSONPrinter;
1515
use gitql_cli::printer::table_printer::TablePrinter;
1616
use gitql_core::environment::Environment;
17-
use gitql_core::schema::Schema;
1817
use gitql_engine::data_provider::DataProvider;
1918
use gitql_engine::engine;
2019
use gitql_parser::diagnostic::Diagnostic;
2120
use gitql_parser::parser;
2221
use gitql_parser::tokenizer::Tokenizer;
23-
use gitql_std::aggregation::aggregation_function_signatures;
24-
use gitql_std::aggregation::aggregation_functions;
25-
use schema::tables_fields_names;
26-
use schema::tables_fields_types;
22+
use schema::create_fileql_environment;
2723

2824
mod arguments;
2925
mod data_provider;
@@ -47,21 +43,8 @@ fn main() {
4743
reporter.report_diagnostic("", Diagnostic::error(error.as_str()));
4844
return;
4945
}
50-
let schema = Schema {
51-
tables_fields_names: tables_fields_names().to_owned(),
52-
tables_fields_types: tables_fields_types().to_owned(),
53-
};
54-
55-
let std_signatures = functions::fileql_std_signatures();
56-
let std_functions = functions::fileql_std_functions();
57-
58-
let aggregation_signatures = aggregation_function_signatures();
59-
let aggregation_functions = aggregation_functions();
60-
61-
let mut env = Environment::new(schema);
62-
env.with_standard_functions(&std_signatures, std_functions);
63-
env.with_aggregation_functions(&aggregation_signatures, aggregation_functions);
6446

47+
let mut env = create_fileql_environment();
6548
execute_fileql_query(query, &arguments, files, &mut env, &mut reporter);
6649
}
6750
Command::Help => {
@@ -84,20 +67,7 @@ fn launch_fileql_repl(arguments: Arguments) {
8467
return;
8568
}
8669

87-
let schema = Schema {
88-
tables_fields_names: tables_fields_names().to_owned(),
89-
tables_fields_types: tables_fields_types().to_owned(),
90-
};
91-
92-
let std_signatures = functions::fileql_std_signatures();
93-
let std_functions = functions::fileql_std_functions();
94-
95-
let aggregation_signatures = aggregation_function_signatures();
96-
let aggregation_functions = aggregation_functions();
97-
98-
let mut global_env = Environment::new(schema);
99-
global_env.with_standard_functions(&std_signatures, std_functions);
100-
global_env.with_aggregation_functions(&aggregation_signatures, aggregation_functions);
70+
let mut global_env = create_fileql_environment();
10171

10272
let mut input = String::new();
10373

src/schema.rs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@ use gitql_ast::types::base::DataType;
55
use gitql_ast::types::boolean::BoolType;
66
use gitql_ast::types::integer::IntType;
77
use gitql_ast::types::text::TextType;
8+
use gitql_core::environment::Environment;
9+
use gitql_core::schema::Schema;
10+
use gitql_std::aggregation::aggregation_function_signatures;
11+
use gitql_std::aggregation::aggregation_functions;
12+
use gitql_std::window::window_function_signatures;
13+
use gitql_std::window::window_functions;
814

9-
pub fn tables_fields_types() -> HashMap<&'static str, Box<dyn DataType>> {
15+
use crate::functions;
16+
17+
fn tables_fields_types() -> HashMap<&'static str, Box<dyn DataType>> {
1018
let mut map: HashMap<&'static str, Box<dyn DataType>> = HashMap::new();
1119
map.insert("path", Box::new(TextType));
1220
map.insert("parent", Box::new(TextType));
@@ -17,7 +25,7 @@ pub fn tables_fields_types() -> HashMap<&'static str, Box<dyn DataType>> {
1725
map
1826
}
1927

20-
pub fn tables_fields_names() -> &'static HashMap<&'static str, Vec<&'static str>> {
28+
fn tables_fields_names() -> &'static HashMap<&'static str, Vec<&'static str>> {
2129
static HASHMAP: OnceLock<HashMap<&'static str, Vec<&'static str>>> = OnceLock::new();
2230
HASHMAP.get_or_init(|| {
2331
let mut map = HashMap::new();
@@ -28,3 +36,26 @@ pub fn tables_fields_names() -> &'static HashMap<&'static str, Vec<&'static str>
2836
map
2937
})
3038
}
39+
40+
pub fn create_fileql_environment() -> Environment {
41+
let schema = Schema {
42+
tables_fields_names: tables_fields_names().to_owned(),
43+
tables_fields_types: tables_fields_types().to_owned(),
44+
};
45+
46+
let std_signatures = functions::fileql_std_signatures();
47+
let std_functions = functions::fileql_std_functions();
48+
49+
let aggregation_signatures = aggregation_function_signatures();
50+
let aggregation_functions = aggregation_functions();
51+
52+
let window_signatures = window_function_signatures();
53+
let window_functions = window_functions();
54+
55+
let mut env = Environment::new(schema);
56+
env.with_standard_functions(&std_signatures, std_functions);
57+
env.with_aggregation_functions(&aggregation_signatures, aggregation_functions);
58+
env.with_window_functions(&window_signatures, window_functions);
59+
60+
env
61+
}

0 commit comments

Comments
 (0)