@@ -5,14 +5,14 @@ use std::sync::Arc;
5
5
use crate :: array:: DataChunk ;
6
6
use crate :: binder:: { BindError , Binder } ;
7
7
use crate :: catalog:: { CatalogRef , DatabaseCatalog } ;
8
- use crate :: executor:: { ExecuteError , ExecutorBuilder } ;
8
+ use crate :: executor:: { ExecuteError , Executor } ;
9
9
use crate :: parser:: { parse, ParserError } ;
10
- use crate :: storage:: InMemoryStorage ;
10
+ use crate :: storage:: { InMemoryStorage , StorageRef } ;
11
11
12
12
/// The database instance.
13
13
pub struct Database {
14
14
catalog : CatalogRef ,
15
- executor_builder : ExecutorBuilder ,
15
+ storage : StorageRef ,
16
16
}
17
17
18
18
impl Default for Database {
@@ -26,24 +26,21 @@ impl Database {
26
26
pub fn new ( ) -> Self {
27
27
let catalog = Arc :: new ( DatabaseCatalog :: new ( ) ) ;
28
28
let storage = Arc :: new ( InMemoryStorage :: new ( ) ) ;
29
- Database {
30
- catalog : catalog. clone ( ) ,
31
- executor_builder : ExecutorBuilder :: new ( catalog, storage) ,
32
- }
29
+ Database { catalog, storage }
33
30
}
34
31
35
32
/// Run SQL queries and return the outputs.
36
33
pub fn run ( & self , sql : & str ) -> Result < Vec < DataChunk > , Error > {
37
34
// parse
38
35
let stmts = parse ( sql) ?;
39
36
let mut binder = Binder :: new ( self . catalog . clone ( ) ) ;
37
+ let executor = Executor :: new ( self . catalog . clone ( ) , self . storage . clone ( ) ) ;
40
38
41
39
let mut outputs = vec ! [ ] ;
42
40
for stmt in stmts {
43
41
let bound_stmt = binder. bind ( & stmt) ?;
44
42
debug ! ( "{:#?}" , bound_stmt) ;
45
- let mut executor = self . executor_builder . build ( bound_stmt) ;
46
- let output = executor. execute ( ) ?;
43
+ let output = executor. execute ( bound_stmt) ?;
47
44
outputs. push ( output) ;
48
45
}
49
46
Ok ( outputs)
0 commit comments