Skip to content

Commit

Permalink
proto: split proto-files
Browse files Browse the repository at this point in the history
This patch splits the proto file into multiple specialized proto files.

This patch also adds a warning that CRUD operations are experimental.

Closes #2
  • Loading branch information
ImeevMA committed Dec 26, 2024
1 parent 9178a3f commit bb303b5
Show file tree
Hide file tree
Showing 7 changed files with 293 additions and 267 deletions.
275 changes: 8 additions & 267 deletions aeon_router.proto → aeon_crud.proto
Original file line number Diff line number Diff line change
@@ -1,32 +1,17 @@
syntax = "proto3";

package aeon_router;
import "aeon_error.proto";
import "aeon_value.proto";
import "aeon_schema.proto";

option go_package = "./pb";
package aeon;

// API to Aeon - a distributed database based on Tarantool.
service AeonRouterService {
//
// Diagnostic requests.
//

// Pings the router.
rpc Ping(PingRequest) returns (PingResponse) {}

//
// DDL requests.
//
option go_package = "github.com/tarantool/aeon/aeon/grpc/server/pb";

// Creates a space with the given definition.
rpc CreateSpace(CreateSpaceRequest) returns (CreateSpaceResponse) {}

// Drops a space by name.
rpc DropSpace(DropSpaceRequest) returns (DropSpaceResponse) {}

//
// DML requests.
//
// ATTENTION: This module is EXPERIMENTAL and we do not recommend using it.

// CRUD API to Aeon - a distributed database based on Tarantool.
service CRUDService {
// Transactionally executes a set of read and write operations.
rpc Execute(ExecuteRequest) returns (ExecuteResponse) {}

Expand All @@ -47,222 +32,6 @@ service AeonRouterService {

// Non-transactionally select tuples from a space.
rpc Select(SelectRequest) returns (stream SelectResponse) {}

//
// SQL requests.
//

// Execute a SQL query.
rpc SQL(SQLRequest) returns (SQLResponse) {}

// Execute a SQL query and return the result using a stream.
rpc SQLStream(SQLRequest) returns (stream SQLResponse) {}

// Check if an SQL is valid
// We provide the method for database CLI.
rpc SQLCheck(SQLRequest) returns (SQLCheckResponse) {}
}

//
// Common structures.
//

// Special value denoting null.
enum NullValue { NULL_VALUE = 0; }

// Array of arbitrary-typed values.
message ArrayValue { repeated Value fields = 1; }

// Map with string keys and arbitrary-typed values..
message MapValue { map<string, Value> fields = 1; }

// Date time value.
message DateTimeValue {
int64 seconds = 1;
int64 nsec = 2;
string location = 3;
}

// Date time interval value.
message IntervalValue {
enum IntervalAdjust {
INTERVAL_ADJUST_NONE = 0;
INTERVAL_ADJUST_EXCESS = 1;
INTERVAL_ADJUST_LAST = 2;
}
int64 year = 1;
int64 month = 2;
int64 week = 3;
int64 day = 4;
int64 hour = 5;
int64 min = 6;
int64 sec = 7;
int64 nsec = 8;
IntervalAdjust adjust = 9;
}

// Arbitrary value that can be serialized to be sent over the network or
// stored in the database.
message Value {
oneof kind {
uint64 unsigned_value = 1;
string string_value = 2;
double number_value = 3;
sint64 integer_value = 4;
bool boolean_value = 5;
bytes varbinary_value = 6;
string decimal_value = 7;
string uuid_value = 8;
DateTimeValue datetime_value = 9;
IntervalValue interval_value = 10;
ArrayValue array_value = 11;
MapValue map_value = 12;
NullValue null_value = 13;
}
}

// Error information.
message Error {
// Error type.
// * AeonError for core Aeon errors.
// * AeonSQLError for issues with SQL parsing.
// * AeonGRPCError for issues with gRPC encoding.
string type = 1;
// Error name.
string name = 2;
// Error location: file, line.
string file = 3;
uint64 line = 4;
// Human-readable error description.
string msg = 5;
// System errno (usually not set).
uint64 errno = 6;
// Error code.
uint64 code = 7;
// Fields with extra information.
MapValue fields = 8;
// Previous error on the error stack (cause of this error).
Error prev = 9;
}

// Tuple: array of values.
message Tuple { repeated Value fields = 1; }

// Tuple format: array of field names.
message TupleFormat { repeated string names = 1; }

// Read or write operation executed in a transaction.
message Operation {
// Target space name.
string space = 1;
// Target key in the space. Must be full (have all defined key parts).
Tuple key = 2;
// In a request:
// * Ignored for read operations.
// * Specifies the tuple to write in a write operation.
// In a response:
// * Tuple read from or written to the target space.
// The write operation type depends on the tuple value:
// * NOP if the tuple is not set.
// * DELETE if the tuple is set but has no fields.
// * REPLACE otherwise. The tuple must match the target key.
// The tuple may be overwritten by the user-defined function specified in
// a request to change the written value or even operation type depending on
// read values.
Tuple tuple = 3;
}

// Type a space field can have.
enum FieldType {
FIELD_TYPE_UNSPECIFIED = 0;
FIELD_TYPE_ANY = 1;
FIELD_TYPE_UNSIGNED = 2;
FIELD_TYPE_STRING = 3;
FIELD_TYPE_NUMBER = 4;
FIELD_TYPE_DOUBLE = 5;
FIELD_TYPE_INTEGER = 6;
FIELD_TYPE_BOOLEAN = 7;
FIELD_TYPE_VARBINARY = 8;
FIELD_TYPE_SCALAR = 9;
FIELD_TYPE_DECIMAL = 10;
FIELD_TYPE_UUID = 11;
FIELD_TYPE_DATETIME = 12;
FIELD_TYPE_INTERVAL = 13;
FIELD_TYPE_ARRAY = 14;
FIELD_TYPE_MAP = 15;
}

// Space field definition.
message FieldDef {
// Field name.
string name = 1;
// Field type.
FieldType type = 2;
// If set to true, the field may store null values. Optional.
bool is_nullable = 3;
}

// Key part definition.
message KeyPartDef {
enum KeyPartSortOrder {
KEY_PART_SORT_ORDER_ASC = 0;
KEY_PART_SORT_ORDER_DESC = 1;
}
// Indexed field ordinal number (1-based) or name.
oneof field {
uint64 id = 1;
string name = 2;
}
// Key part type. Optional: if omitted, it will be deduced from
// the corresponding space field type.
FieldType type = 3;
// Sorting order: ascending (default) or descending.
KeyPartSortOrder sort_order = 4;
}

//
// Diagnostic requests.
//

// Pings the router.

message PingRequest {}

message PingResponse {
// Error information. Set only on failure.
Error error = 1;
}

//
// DDL requests.
//

// Creates a space with the given definition.

message CreateSpaceRequest {
// Name of the new space.
string name = 1;
// Format of the new space.
repeated FieldDef format = 2;
// Sorting key definition (indexed fields).
repeated KeyPartDef key_def = 3;
}

message CreateSpaceResponse {
// Error information. Set only on failure.
Error error = 1;
}

// Drops a space by name.

message DropSpaceRequest {
// Name of the space to drop.
string name = 1;
}

message DropSpaceResponse {
// Error information. Set only on failure.
Error error = 1;
}

//
Expand Down Expand Up @@ -496,31 +265,3 @@ message SelectResponse {
// Format of the returned tuples.
TupleFormat tuple_format = 8;
}

//
// SQL requests.
//

message SQLRequest {
// SQL query.
string query = 1;
// Bind variables.
map<string, Value> vars = 2;
}

message SQLResponse {
// Error information. Set only on failure.
Error error = 1;
// Retrieved tuples.
repeated Tuple tuples = 2;
// Format of the returned tuples.
TupleFormat tuple_format = 3;
}

enum SQLCheckStatus {
SQL_QUERY_VALID = 0;
SQL_QUERY_INCOMPLETE = 1;
SQL_QUERY_INVALID = 2;
}

message SQLCheckResponse { SQLCheckStatus status = 1; }
45 changes: 45 additions & 0 deletions aeon_ddl.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
syntax = "proto3";

import "aeon_error.proto";
import "aeon_schema.proto";

package aeon;

option go_package = "github.com/tarantool/aeon/aeon/grpc/server/pb";

// DDL API to Aeon - a distributed database based on Tarantool.
service DDLService {
// Creates a space with the given definition.
rpc CreateSpace(CreateSpaceRequest) returns (CreateSpaceResponse) {}

// Drops a space by name.
rpc DropSpace(DropSpaceRequest) returns (DropSpaceResponse) {}
}

// Creates a space with the given definition.

message CreateSpaceRequest {
// Name of the new space.
string name = 1;
// Format of the new space.
repeated FieldDef format = 2;
// Sorting key definition (indexed fields).
repeated KeyPartDef key_def = 3;
}

message CreateSpaceResponse {
// Error information. Set only on failure.
Error error = 1;
}

// Drops a space by name.

message DropSpaceRequest {
// Name of the space to drop.
string name = 1;
}

message DropSpaceResponse {
// Error information. Set only on failure.
Error error = 1;
}
22 changes: 22 additions & 0 deletions aeon_diag.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
syntax = "proto3";

import "aeon_error.proto";

package aeon;

option go_package = "github.com/tarantool/aeon/aeon/grpc/server/pb";

// Diagnostic API to Aeon - a distributed database based on Tarantool.
service DiagService {
// Pings the router.
rpc Ping(PingRequest) returns (PingResponse) {}
}

// Pings the router.

message PingRequest {}

message PingResponse {
// Error information. Set only on failure.
Error error = 1;
}
31 changes: 31 additions & 0 deletions aeon_error.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
syntax = "proto3";

import "aeon_value.proto";

package aeon;

option go_package = "github.com/tarantool/aeon/aeon/grpc/server/pb";

// Error information.
message Error {
// Error type.
// * AeonError for core Aeon errors.
// * AeonSQLError for issues with SQL parsing.
// * AeonGRPCError for issues with gRPC encoding.
string type = 1;
// Error name.
string name = 2;
// Error location: file, line.
string file = 3;
uint64 line = 4;
// Human-readable error description.
string msg = 5;
// System errno (usually not set).
uint64 errno = 6;
// Error code.
uint64 code = 7;
// Fields with extra information.
MapValue fields = 8;
// Previous error on the error stack (cause of this error).
Error prev = 9;
}
Loading

0 comments on commit bb303b5

Please sign in to comment.