Repository: incubator-quickstep Updated Branches: refs/heads/frontend-backend [created] 596cb529f
First commit for frontend-backend separation. Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/596cb529 Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/596cb529 Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/596cb529 Branch: refs/heads/frontend-backend Commit: 596cb529f0928964d19e55f9da761cebbd08f4a7 Parents: 5b7b5cb Author: Hakan Memisoglu <hakanmemiso...@apache.org> Authored: Mon Apr 10 21:02:00 2017 -0500 Committer: Hakan Memisoglu <hakanmemiso...@apache.org> Committed: Mon Apr 10 21:02:00 2017 -0500 ---------------------------------------------------------------------- query_optimizer/CMakeLists.txt | 10 ++ query_optimizer/Optimizer.cpp | 5 + query_optimizer/QueryPlan.proto | 44 +++++++ relational_operators/CMakeLists.txt | 6 + relational_operators/Operator.proto | 198 +++++++++++++++++++++++++++++++ 5 files changed, 263 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/596cb529/query_optimizer/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/query_optimizer/CMakeLists.txt b/query_optimizer/CMakeLists.txt index 9bdb753..abe59e2 100644 --- a/query_optimizer/CMakeLists.txt +++ b/query_optimizer/CMakeLists.txt @@ -24,6 +24,10 @@ configure_file ( "${CMAKE_CURRENT_BINARY_DIR}/QueryOptimizerConfig.h" ) +QS_PROTOBUF_GENERATE_CPP(queryoptimizer_QueryPlan_proto_srcs + queryoptimizer_QueryPlan_proto_hdrs + QueryPlan.proto) + set_gflags_lib_name () add_subdirectory(cost_model) @@ -48,6 +52,9 @@ add_library(quickstep_queryoptimizer_OptimizerTree ../empty_src.cpp OptimizerTre add_library(quickstep_queryoptimizer_PhysicalGenerator PhysicalGenerator.cpp PhysicalGenerator.hpp) add_library(quickstep_queryoptimizer_QueryHandle ../empty_src.cpp QueryHandle.hpp) add_library(quickstep_queryoptimizer_QueryPlan ../empty_src.cpp QueryPlan.hpp) +add_library(quickstep_queryoptimizer_QueryPlan_proto + ${queryoptimizer_QueryPlan_proto_srcs} + ${queryoptimizer_QueryPlan_proto_hdrs}) add_library(quickstep_queryoptimizer_QueryProcessor QueryProcessor.cpp QueryProcessor.hpp) add_library(quickstep_queryoptimizer_Validator ../empty_src.cpp Validator.hpp) @@ -239,6 +246,9 @@ target_link_libraries(quickstep_queryoptimizer_QueryPlan quickstep_relationaloperators_RelationalOperator quickstep_utility_DAG quickstep_utility_Macros) +target_link_libraries(quickstep_queryoptimizer_QueryPlan_proto + quickstep_relationaloperators_Operator_proto + ${PROTOBUF_LIBRARY}) target_link_libraries(quickstep_queryoptimizer_QueryProcessor quickstep_catalog_Catalog quickstep_catalog_Catalog_proto http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/596cb529/query_optimizer/Optimizer.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/Optimizer.cpp b/query_optimizer/Optimizer.cpp index 1b91574..9ce517f 100644 --- a/query_optimizer/Optimizer.cpp +++ b/query_optimizer/Optimizer.cpp @@ -36,6 +36,11 @@ void Optimizer::generateQueryHandle(const ParseStatement &parse_statement, execution_generator.generatePlan( physical_generator.generatePlan( logical_generator.generatePlan(*catalog_database, parse_statement))); + + // TODO(Hakan): Break at this point. + // execution_serializer.serializePlan( + // physical_generator.generatePlan( + // logical_generator.generatePlan(*catalog_database, parse_statement))); } } // namespace optimizer http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/596cb529/query_optimizer/QueryPlan.proto ---------------------------------------------------------------------- diff --git a/query_optimizer/QueryPlan.proto b/query_optimizer/QueryPlan.proto new file mode 100644 index 0000000..a255b34 --- /dev/null +++ b/query_optimizer/QueryPlan.proto @@ -0,0 +1,44 @@ +syntax = "proto2"; + +package quickstep.serialization; + +import "relational_operators/Operator.proto"; + +message Vertex { + required OperatorType = 1; + oneof operator { + AggregationOperator aggregate_operator = 2; + BuildHashOperator build_hash_operator = 3; + BuildLIPFilterOperator build_lip_filter_operator = 4; + CreateIndexOperator create_index_operator = 5; + CreateTableOperator create_table_operator = 6; + DeleteOperator delete_operator = 7; + DestroyAggregationStateOperator destroy_aggregation_state_operator = 8; + DestroyHashOperator destroy_hash_operator = 9; + DropTableOperator drop_table_operator = 10; + FinalizeAggregationOperator finalize_aggregation_operator = 11; + HashJoinOperator hash_join_operator = 12; + InitializeAggregationOperator initialize_aggregation_operator = 13; + InsertOperator insert_operator = 14; + NestedLoopsJoinOperator nested_loops_join_operator = 15; + SampleOperator sample_operator = 16; + SaveBlocksOperator save_blocks_operator = 17; + SelectOperator select_operator = 18; + SortMergeRunOperator sort_merge_run_operator = 19; + SortRunGenerationOperator sort_run_generation_operator = 20; + TableGeneratorOperator table_generator_operator = 21; + TextScanOperator text_scan_operator = 22; + UpdateOperator update_operator = 23; + WindowAggregationOperator window_aggregation_operator = 24; + } +} + +message Edges { + repeated uint64 outgoing_id = 1; + repeated bool payload = 2; +} + +message DAG { + repeated Node = 1; + repeated Edges = 2; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/596cb529/relational_operators/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/relational_operators/CMakeLists.txt b/relational_operators/CMakeLists.txt index 1693ec2..c25c17e 100644 --- a/relational_operators/CMakeLists.txt +++ b/relational_operators/CMakeLists.txt @@ -28,6 +28,9 @@ QS_PROTOBUF_GENERATE_CPP(relationaloperators_SortMergeRunOperator_proto_srcs QS_PROTOBUF_GENERATE_CPP(relationaloperators_WorkOrder_proto_srcs relationaloperators_WorkOrder_proto_hdrs WorkOrder.proto) +QS_PROTOBUF_GENERATE_CPP(relationaloperators_Operator_proto_srcs + relationaloperators_Operator_proto_hdrs + Operator.proto) set_gflags_lib_name () @@ -57,6 +60,9 @@ add_library(quickstep_relationaloperators_InsertOperator InsertOperator.cpp Inse add_library(quickstep_relationaloperators_NestedLoopsJoinOperator NestedLoopsJoinOperator.cpp NestedLoopsJoinOperator.hpp) +add_library(quickstep_relationaloperators_Operator_proto + ${relationaloperators_Operator_proto_srcs} + ${relationaloperators_Operator_proto_hdrs}) add_library(quickstep_relationaloperators_RebuildWorkOrder ../empty_src.cpp RebuildWorkOrder.hpp) add_library(quickstep_relationaloperators_RelationalOperator ../empty_src.cpp RelationalOperator.hpp) add_library(quickstep_relationaloperators_SampleOperator SampleOperator.cpp SampleOperator.hpp) http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/596cb529/relational_operators/Operator.proto ---------------------------------------------------------------------- diff --git a/relational_operators/Operator.proto b/relational_operators/Operator.proto new file mode 100644 index 0000000..d96f183 --- /dev/null +++ b/relational_operators/Operator.proto @@ -0,0 +1,198 @@ +syntax = "proto2"; + +package quickstep.serialization; + +enum OperatorType { + AGGREGATION = 1; + BUILD_AGGREGATION_EXISTENCE_MAP = 2; + BUILD_HASH = 3; + BUILD_LIP_FILTER = 4; + CREATE_INDEX = 5; // Placeholder. + CREATE_TABLE = 6; // Placeholder. + DELETE = 7; + DESTROY_AGGREGATION_STATE = 8; + DESTROY_HASH = 9; + DROP_TABLE = 10; + FINALIZE_AGGREGATION = 11; + HASH_JOIN = 12; + INITIALIZE_AGGREGATION = 13; + INSERT = 14; + NESTED_LOOP_JOIN = 15; + SAMPLE = 16; + SAVE_BLOCKS = 17; + SELECT = 18; + SORT_MERGE_RUN = 19; + SORT_RUN_GENERATION = 20; + TABLE_GENERATOR = 21; + TEXT_SCAN = 22; + UPDATE = 23; + WINDOW_AGGREGATION = 24; +} + +message Operator { + required uint64 query_id = 1; + required OperatorType operator_type = 2; + extensions 16 to max; +} + +message AggregationOperator { + extend Operator { + // We need relation_id to retrieve CatalogRelation object. (?) + required int32 relation_id = 16; + // Learn whether we can check this one from relation id. (?) + required bool relation_is_stored = 17; + // Aggregate state index in QueryContext + required uint32 aggr_state_index = 18; + } +} + +message BuildHashOperator { + extend Operator { + required int32 relation_id = 16; + required bool relation_is_stored = 17; + repeated int32 join_key_attributes = 18; + required bool any_join_key_nullable = 19; + required uint64 num_partitions = 20; + required uint32 hash_table_index = 21; + } +} + +message CreateTableOperator { + extend Operator { + + } +} + +message DeleteOperator { + extend Operator { + + } +} + +message DestroyHashOperator { + extend Operator { + required uint64 build_num_partitions = 16; + required uint32 hash_table_index = 17; + } +} + +message DropTableOperator { + extend Operator { + required int32 relation_id = 16; + required int32 database_id = 17; + required bool only_drop_blocks = 18; + } +} + +message FinalizeAggregationOperator { + extend Operator { + required uint32 aggr_state_index = 16; + required int32 output_relation_id = 17; + required uint32 output_destination_index = 18; + } +} + + +message HashJoinOperator { + enum JoinType { + LEFT_INNER = 1; + LEFT_SEMI = 2; + LEFT_ANTI = 3; + LEFT_OUTER = 4; + } + + extend Operator { + required int32 build_relation_id = 16; + required int32 probe_relation_id = 17; + repeated int32 join_key_attributes = 18; + required bool any_join_key_attributes_nullable = 19; + required uint64 build_num_partitions = 20; + required int32 output_relation_id = 21; + required int32 output_destionation_index = 22; + required int32 hash_table_index = 23; + required int32 residiual_predicate_index = 24; + repeated bool is_selection_on_build = 25; + required JoinType join_type = 26; + } +} + +message InitializeAggregationOperator { + extend Operator { + required uint32 aggr_state_index = 16; + } +} + +message InsertOperator { + extend Operator { + required int32 output_relation_id = 16; + required uint32 output_destination_index = 17; + required uint32 tuple_index = 18; + } +} + +message SampleOperator { + extend Operator { + required int32 input_relation_id = 16; + required int32 output_relation_id = 17; + required int32 output_destination_index = 18; + required bool input_relation_is_stored = 19; + required bool is_block_sample = 20; + required int32 percentage = 21; + } +} + +message SaveBlocksOperator { + extend Operator { + required int32 relation_id = 16; + required bool force = 17; + } +} + +message SelectOperator { + extend Operator { + required int32 input_relation_id = 16; + required int32 output_relation_id = 17; + required int32 output_destination_index = 18; + required int32 predicate_index = 19; + required int32 selection_index = 20; + required bool input_relation_is_stored = 21; + required uint64 num_partitions = 22; + } +} + +message TableGeneratorOperator { + extend Operator { + required int32 output_relation_id = 16; + required int32 output_destination_index = 17; + required uint32 generator_function_index = 18; + } +} + +message TextScanOperator { + extend Operator { + required string file_pattern = 16; + required int32 field_terminator = 17; + required bool process_escap_sequences = 18; + required int32 output_relation_id = 19; + required int32 output_destination_index = 20; + } +} + +message UpdateOperator { + extend Operator { + required int32 relation_id = 16; + required int32 relocation_destionation_index = 17; + required int32 predicate_index = 18; + required uint32 update_group_index = 19; + } +} + +message WindowAggregationOperator { + extend Operator { + required int32 input_relation_id = 16; + required int32 output_relation_id = 17; + required uint32 window_aggregation_state_index = 18; + required int32 output_destination_index = 19; + } +} +