// 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.

syntax = "proto2";

package quickstep.serialization;

import "relational_operators/SortMergeRunOperator.proto";

// Next tag: 26.
enum WorkOrderType {
  AGGREGATION = 1;
  BUILD_AGGREGATION_EXISTENCE_MAP = 23;
  BUILD_HASH = 2;
  BUILD_LIP_FILTER = 3;
  CREATE_INDEX = 4;  // Placeholder.
  CREATE_TABLE = 5;  // Placeholder.
  DELETE = 6;
  DESTROY_AGGREGATION_STATE = 22;
  DESTROY_HASH = 7;
  DROP_TABLE = 8;
  FINALIZE_AGGREGATION = 9;
  HASH_JOIN = 10;
  INITIALIZE_AGGREGATION = 25;
  INSERT = 11;
  NESTED_LOOP_JOIN = 12;
  SAMPLE = 13;
  SAVE_BLOCKS = 14;
  SELECT = 15;
  SORT_MERGE_RUN = 16;
  SORT_RUN_GENERATION = 17;
  TABLE_GENERATOR = 18;
  TEXT_SCAN = 19;
  UNION_ALL = 24;
  UPDATE = 20;
  WINDOW_AGGREGATION = 21;
}

message WorkOrder {
  required WorkOrderType work_order_type = 1;
  required uint64 query_id = 2;

  // The convention for extension numbering is that extensions for a particular
  // WorkOrderID should begin from (operator_type * 16).
  extensions 16 to max;
}

// Next tag: 21.
message AggregationWorkOrder {
  extend WorkOrder {
    // All required.
    optional uint32 aggr_state_index = 16;
    optional uint64 partition_id = 20;
    optional fixed64 block_id = 17;
    optional int32 lip_deployment_index = 18;
    repeated uint32 lip_filter_indexes = 19;
  }
}

message BuildAggregationExistenceMapWorkOrder {
  extend WorkOrder {
    optional int32 relation_id = 368;
    optional fixed64 build_block_id = 369;
    optional int32 build_attribute = 370;
    optional uint32 aggr_state_index = 371;
    optional uint64 partition_id = 372;
  }
}

// Next tag: 40.
message BuildHashWorkOrder {
  extend WorkOrder {
    // All required.
    optional int32 relation_id = 32;
    repeated int32 join_key_attributes = 33;
    optional bool any_join_key_attributes_nullable = 34;
    optional uint32 join_hash_table_index = 35;
    optional uint64 partition_id = 38;
    optional fixed64 block_id = 36;
    optional int32 lip_deployment_index = 37;
    repeated uint32 lip_filter_indexes = 39;
  }
}

// Next tag: 54.
message BuildLIPFilterWorkOrder {
  extend WorkOrder {
    // All required.
    optional int32 relation_id = 48;
    optional uint64 partition_id = 53;
    optional fixed64 build_block_id = 49;
    optional int32 build_side_predicate_index = 50;
    optional int32 lip_deployment_index = 51;
    repeated uint32 lip_filter_indexes = 52;
  }
}

message DeleteWorkOrder {
  extend WorkOrder {
    // All required.
    optional uint64 operator_index = 96;
    optional int32 relation_id = 97;
    optional int32 predicate_index = 98;
    optional fixed64 block_id = 99;
  }
}

message DestroyAggregationStateWorkOrder {
  extend WorkOrder {
    optional uint32 aggr_state_index = 352;
    optional uint64 partition_id = 353;
  }
}

message DestroyHashWorkOrder {
  extend WorkOrder {
    // All required.
    optional uint32 join_hash_table_index = 112;
    optional uint64 partition_id = 113;
  }
}

message DropTableWorkOrder {
  extend WorkOrder {
    // If set, CatalogDatabaseCache will drop the relation.
    optional int32 relation_id = 128;
    // Optional, and maybe empty.
    repeated fixed64 block_ids = 129;
  }
}

// Next tag: 148.
message FinalizeAggregationWorkOrder {
  extend WorkOrder {
    // All required.
    optional uint32 aggr_state_index = 144;
    optional uint64 partition_id = 146;
    optional uint64 state_partition_id = 147;
    optional int32 insert_destination_index = 145;
  }
}

// Next tag: 174.
message HashJoinWorkOrder {
  enum HashJoinWorkOrderType {
    HASH_ANTI_JOIN = 0;
    HASH_INNER_JOIN = 1;
    HASH_OUTER_JOIN = 2;
    HASH_SEMI_JOIN = 3;
  }

  extend WorkOrder {
    // All required.
    optional HashJoinWorkOrderType hash_join_work_order_type = 160;
    optional int32 build_relation_id = 161;
    optional int32 probe_relation_id = 162;
    repeated int32 join_key_attributes = 163;
    optional bool any_join_key_attributes_nullable = 164;
    optional int32 insert_destination_index = 165;
    optional uint32 join_hash_table_index = 166;
    optional uint64 partition_id = 172;
    optional int32 selection_index = 167;
    optional fixed64 block_id = 168;

    // Used by all but HashOuterJoinWorkOrder.
    optional int32 residual_predicate_index = 169;
    // Used by HashOuterJoinWorkOrder only.
    repeated bool is_selection_on_build = 170;

    optional int32 lip_deployment_index = 171;
    repeated uint32 lip_filter_indexes = 173;
  }
}

message InitializeAggregationWorkOrder {
  extend WorkOrder {
    // All required.
    optional uint32 aggr_state_index = 400;
    optional uint64 partition_id = 401;
    optional uint64 state_partition_id = 402;
  }
}

message InsertWorkOrder {
  extend WorkOrder {
    // All required.
    optional int32 insert_destination_index = 176;
    optional uint32 tuple_index = 177;
  }
}

// Next tag: 201.
message NestedLoopsJoinWorkOrder {
  extend WorkOrder {
    // All required.
    optional uint64 nested_loops_join_index = 200;
    optional int32 left_relation_id = 192;
    optional int32 right_relation_id = 193;
    optional uint64 partition_id = 199;
    optional fixed64 left_block_id = 194;
    optional fixed64 right_block_id = 195;
    optional int32 insert_destination_index = 196;
    optional int32 join_predicate_index = 197;
    optional int32 selection_index = 198;
  }
}

message SampleWorkOrder {
  extend WorkOrder {
    // All required.
    optional int32 relation_id = 208;
    optional fixed64 block_id = 209;
    optional bool is_block_sample = 210;
    optional int32 percentage = 211;
    optional int32 insert_destination_index = 212;
  }
}

message SaveBlocksWorkOrder {
  extend WorkOrder {
    // All required.
    optional fixed64 block_id = 224;
    optional bool force = 225;
  }
}

// Next tag: 250.
message SelectWorkOrder {
  extend WorkOrder {
    // All required.
    optional int32 relation_id = 240;
    optional int32 insert_destination_index = 241;
    optional int32 predicate_index = 242;
    optional uint64 partition_id = 249;
    optional fixed64 block_id = 243;
    optional bool simple_projection = 244;

    // When 'simple_projection' is true.
    repeated int32 simple_selection = 245;
    // Otherwise.
    optional int32 selection_index = 246;

    optional int32 lip_deployment_index = 247;
    repeated uint32 lip_filter_indexes = 248;
  }
}

message SortMergeRunWorkOrder {
  extend WorkOrder {
    // All required.
    optional uint64 operator_index = 256;
    optional uint64 sort_config_index = 257;
    repeated Run runs = 258;
    optional uint64 top_k = 259;
    optional uint64 merge_level = 260;
    optional int32 relation_id = 261;
    optional int32 insert_destination_index = 262;
  }
}

message SortRunGenerationWorkOrder {
  extend WorkOrder {
    // All required.
    optional uint64 sort_config_index = 272;
    optional int32 relation_id = 273;
    optional int32 insert_destination_index = 274;
    optional fixed64 block_id = 275;
  }
}

message TableGeneratorWorkOrder {
  extend WorkOrder {
    // All required.
    optional int32 generator_function_index = 288;
    optional int32 insert_destination_index = 289;
  }
}

message TextScanWorkOrder {
  extend WorkOrder {
    // All required.
    optional string filename = 304;
    optional uint64 text_offset = 305;
    optional uint64 text_segment_size = 306;
    optional uint32 field_terminator = 307;  // For one-byte char.
    optional bool process_escape_sequences = 308;
    optional int32 insert_destination_index = 309;
  }
}

message UnionAllWorkOrder {
  extend WorkOrder {
    optional int32 relation_id = 384;
    optional int32 insert_destination_index = 385;
    optional fixed64 block_id = 386;
    repeated int32 select_attribute_id = 387;
  }
}

message UpdateWorkOrder {
  extend WorkOrder {
    // All required.
    optional uint64 operator_index = 320;
    optional int32 relation_id = 321;
    optional int32 insert_destination_index = 322;
    optional int32 predicate_index = 323;
    optional uint32 update_group_index = 324;
    optional fixed64 block_id = 325;
  }
}

message WindowAggregationWorkOrder {
  extend WorkOrder {
    // All required
    optional uint32 window_aggr_state_index = 336;
    repeated fixed64 block_ids = 337;
    optional int32 insert_destination_index = 338;
  }
}
