Skip to content

Commit 3c94267

Browse files
committed
update
1 parent 1821c0f commit 3c94267

73 files changed

Lines changed: 3013 additions & 2061 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

protocol/proto/fs_api.proto

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,17 @@ message ConnectorOp {
1212
string description = 3;
1313
}
1414

15+
message ValuePlanOperator {
16+
string name = 1;
17+
bytes physical_plan = 2;
18+
}
19+
20+
message KeyPlanOperator {
21+
string name = 1;
22+
bytes physical_plan = 2;
23+
repeated uint64 key_fields = 3;
24+
}
25+
1526
message ProjectionOperator {
1627
string name = 1;
1728
FsSchema input_schema = 2;

src/coordinator/coordinator.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use crate::coordinator::execution::Executor;
2020
use crate::coordinator::plan::{LogicalPlanVisitor, LogicalPlanner, PlanNode};
2121
use crate::coordinator::statement::Statement;
2222
use crate::runtime::taskexecutor::TaskManager;
23-
use crate::sql::planner::StreamSchemaProvider;
23+
use crate::sql::schema::StreamSchemaProvider;
2424

2525
use super::execution_context::ExecutionContext;
2626

src/coordinator/execution/executor.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,11 @@ use crate::coordinator::plan::{
1919
};
2020
use crate::coordinator::statement::{ConfigSource, FunctionSource};
2121
use crate::runtime::taskexecutor::TaskManager;
22+
use crate::sql::schema::table::Table as CatalogTable;
23+
use crate::sql::analysis::{ StreamSchemaProvider};
2224
use std::sync::Arc;
2325
use thiserror::Error;
2426
use tracing::{debug, info};
25-
use crate::datastream::logical::{LogicalProgram, ProgramConfig};
26-
use crate::datastream::optimizers::ChainingOptimizer;
27-
use crate::sql::CompiledSql;
28-
use crate::sql::planner::{physical_planner, rewrite_sinks};
2927

3028
#[derive(Error, Debug)]
3129
pub enum ExecuteError {
@@ -222,12 +220,21 @@ impl PlanVisitor for Executor {
222220

223221
fn visit_streaming_table(
224222
&self,
225-
_plan: &StreamingTable,
223+
plan: &StreamingTable,
226224
_context: &PlanVisitorContext,
227225
) -> PlanVisitorResult {
228-
let result = Err(ExecuteError::Internal(
229-
"StreamingTable execution not yet implemented".to_string(),
230-
));
226+
let result = (|| -> Result<ExecuteResult, ExecuteError> {
227+
let catalog_table =
228+
CatalogTable::ConnectorTable(plan.connector_table.clone());
229+
let mut schema_provider = StreamSchemaProvider::new();
230+
schema_provider.insert_catalog_table(catalog_table.clone());
231+
232+
233+
Ok(ExecuteResult::ok_with_data(
234+
format!("Streaming table '{}' compiled successfully", plan.name),
235+
empty_record_batch(),
236+
))
237+
})();
231238
PlanVisitorResult::Execute(result)
232239
}
233240

src/coordinator/plan/logical_plan_visitor.rs

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
use std::sync::Arc;
1414

1515
use datafusion::common::{Result, plan_datafusion_err, plan_err};
16+
use datafusion::execution::SessionStateBuilder;
1617
use datafusion::sql::sqlparser::ast::{SqlOption, Statement as DFStatement};
1718
use datafusion_common::TableReference;
19+
use datafusion_execution::config::SessionConfig;
1820
use datafusion_expr::{Expr, Extension, LogicalPlan, col};
1921
use sqlparser::ast::Statement;
2022
use tracing::debug;
@@ -30,21 +32,24 @@ use crate::coordinator::statement::{
3032
StreamingTableStatement,
3133
};
3234
use crate::coordinator::tool::ConnectorOptions;
33-
use crate::sql::catalog::Table;
34-
use crate::sql::catalog::connector::ConnectionType;
35-
use crate::sql::catalog::connector_table::ConnectorTable;
36-
use crate::sql::catalog::field_spec::FieldSpec;
37-
use crate::sql::catalog::optimizer::produce_optimized_plan;
35+
use crate::sql::logical_node::logical::{LogicalProgram, ProgramConfig};
36+
use crate::sql::logical_planner::optimizers::ChainingOptimizer;
37+
use crate::sql::schema::Table;
38+
use crate::sql::schema::connector::ConnectionType;
39+
use crate::sql::schema::connector_table::ConnectorTable;
40+
use crate::sql::schema::field_spec::FieldSpec;
41+
use crate::sql::schema::optimizer::produce_optimized_plan;
3842
use crate::sql::functions::{is_json_union, serialize_outgoing_json};
39-
use crate::sql::planner::extension::sink::SinkExtension;
40-
use crate::sql::planner::{StreamSchemaProvider, maybe_add_key_extension_to_sink, rewrite_sinks};
43+
use crate::sql::extensions::sink::SinkExtension;
44+
use crate::sql::logical_planner::planner;
45+
use crate::sql::analysis::{StreamSchemaProvider, maybe_add_key_extension_to_sink, rewrite_sinks};
4146
use crate::sql::rewrite_plan;
4247

4348
const CONNECTOR: &str = "connector";
4449
const PARTITION_BY: &str = "partition_by";
4550
const IDLE_MICROS: &str = "idle_time";
4651

47-
/// WITH 选项列表转为 key-value map,便于读取 connector 等配置。
52+
/// Convert `WITH` option list to a key-value map (e.g. connector settings).
4853
fn with_options_to_map(options: &[SqlOption]) -> std::collections::HashMap<String, String> {
4954
options
5055
.iter()
@@ -153,6 +158,8 @@ impl LogicalPlanVisitor {
153158
primary_keys: Arc::new(vec![]), // PKs are inferred or explicitly set here
154159
inferred_fields: None,
155160
partition_exprs: Arc::new(partition_exprs),
161+
lookup_cache_ttl:None,
162+
lookup_cache_max_bytes:None,
156163
};
157164

158165
// 6. Sink Extension & Final Rewrites
@@ -173,6 +180,37 @@ impl LogicalPlanVisitor {
173180
let final_extensions = rewrite_sinks(vec![plan_with_keys])?;
174181
let final_plan = final_extensions.into_iter().next().unwrap();
175182

183+
184+
185+
let mut config = SessionConfig::new();
186+
config
187+
.options_mut()
188+
.optimizer
189+
.enable_round_robin_repartition = false;
190+
config.options_mut().optimizer.repartition_aggregations = false;
191+
config.options_mut().optimizer.repartition_windows = false;
192+
config.options_mut().optimizer.repartition_sorts = false;
193+
config.options_mut().optimizer.repartition_joins = false;
194+
config.options_mut().execution.target_partitions = 1;
195+
196+
let session_state = SessionStateBuilder::new()
197+
.with_config(config)
198+
.with_default_features()
199+
.with_physical_optimizer_rules(vec![])
200+
.build();
201+
202+
let mut plan_to_graph_visitor =
203+
planner::PlanToGraphVisitor::new(&self.schema_provider, &session_state);
204+
205+
plan_to_graph_visitor.add_plan(final_plan.clone())?;
206+
207+
let graph = plan_to_graph_visitor.into_graph();
208+
209+
let mut program = LogicalProgram::new(graph, ProgramConfig::default());
210+
211+
program.optimize(&ChainingOptimizer {});
212+
213+
176214
Ok(Box::new(StreamingTable {
177215
name: table_name,
178216
comment: comment.clone(),

src/coordinator/plan/lookup_table_plan.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// See the License for the specific language governing permissions and
1111
// limitations under the License.
1212

13-
use crate::sql::catalog::connector_table::ConnectorTable;
13+
use crate::sql::schema::connector_table::ConnectorTable;
1414

1515
use super::{PlanNode, PlanVisitor, PlanVisitorContext, PlanVisitorResult};
1616

src/coordinator/plan/streaming_table_connector_plan.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// See the License for the specific language governing permissions and
1111
// limitations under the License.
1212

13-
use crate::sql::catalog::connector_table::ConnectorTable;
13+
use crate::sql::schema::connector_table::ConnectorTable;
1414

1515
use super::{PlanNode, PlanVisitor, PlanVisitorContext, PlanVisitorResult};
1616

src/coordinator/plan/streaming_table_plan.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
// limitations under the License.
1212

1313
use super::{PlanNode, PlanVisitor, PlanVisitorContext, PlanVisitorResult};
14-
use crate::sql::catalog::connector_table::ConnectorTable;
14+
use crate::sql::schema::connector_table::ConnectorTable;
1515
use datafusion::logical_expr::LogicalPlan;
1616

1717
/// Plan node representing a fully resolved streaming table (DDL).

src/datastream/mod.rs

Lines changed: 0 additions & 2 deletions
This file was deleted.

src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
pub mod api;
1818
pub mod config;
1919
pub mod coordinator;
20-
pub mod datastream;
2120
pub mod logging;
2221
pub mod runtime;
2322
pub mod server;

src/main.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
mod api;
1616
mod config;
1717
mod coordinator;
18-
mod datastream;
1918
mod logging;
2019
mod runtime;
2120
mod server;

0 commit comments

Comments
 (0)