| // Copyright 2011-2015 Quickstep Technologies LLC. |
| // Copyright 2015 Pivotal Software, Inc. |
| // |
| // Licensed 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 "types/Type.proto"; |
| import "types/TypedValue.proto"; |
| import "types/operations/Operation.proto"; |
| |
| // ---------------------------------------------------------------------------- |
| // Base message types. |
| |
| message Predicate { |
| enum PredicateType { |
| TRUE = 0; |
| FALSE = 1; |
| COMPARISON = 2; |
| NEGATION = 3; |
| CONJUNCTION = 4; |
| DISJUNCTION = 5; |
| } |
| |
| required PredicateType predicate_type = 1; |
| |
| // The convention for extension numbering is that extensions for a particular |
| // PredicateType should begin from (predicate_type + 1) * 32. |
| extensions 32 to max; |
| } |
| |
| message Scalar { |
| enum ScalarDataSource { |
| LITERAL = 0; |
| ATTRIBUTE = 1; |
| UNARY_EXPRESSION = 2; |
| BINARY_EXPRESSION = 3; |
| CASE_EXPRESSION = 4; |
| } |
| |
| required ScalarDataSource data_source = 1; |
| |
| // The convention for extension numbering is that extensions for a particular |
| // ScalarDataSource should begin from (data_source + 1) * 32. |
| extensions 32 to max; |
| } |
| |
| // ---------------------------------------------------------------------------- |
| // Extensions for Predicate. |
| |
| message ComparisonPredicate { |
| extend Predicate { |
| optional Comparison comparison = 96; |
| optional Scalar left_operand = 97; |
| optional Scalar right_operand = 98; |
| } |
| } |
| |
| message NegationPredicate { |
| extend Predicate { |
| optional Predicate operand = 128; |
| } |
| } |
| |
| // Either ConjunctionPredicate or DisjunctionPredicate. |
| message PredicateWithList { |
| extend Predicate { |
| repeated Predicate operands = 160; |
| } |
| } |
| |
| // ---------------------------------------------------------------------------- |
| // Extensions for Scalar. |
| |
| message ScalarLiteral { |
| extend Scalar { |
| optional TypedValue literal = 32; |
| optional Type literal_type = 33; |
| } |
| } |
| |
| message ScalarAttribute { |
| extend Scalar { |
| optional int32 relation_id = 64; |
| optional int32 attribute_id = 65; |
| } |
| } |
| |
| message ScalarUnaryExpression { |
| extend Scalar { |
| optional UnaryOperation operation = 96; |
| optional Scalar operand = 97; |
| } |
| } |
| |
| message ScalarBinaryExpression { |
| extend Scalar { |
| optional BinaryOperation operation = 128; |
| optional Scalar left_operand = 129; |
| optional Scalar right_operand = 130; |
| } |
| } |
| |
| message ScalarCaseExpression { |
| extend Scalar { |
| optional Type result_type = 160; |
| repeated Predicate when_predicate = 161; |
| repeated Scalar result_expression = 162; |
| optional Scalar else_result_expression = 163; |
| } |
| } |