syntax = "proto3"; package cosmos.orm.v1; import "google/protobuf/descriptor.proto"; extend google.protobuf.MessageOptions { // table specifies that this message will be used as an ORM table. It cannot // be used together with the singleton option. TableDescriptor table = 104503790; // singleton specifies that this message will be used as an ORM singleton. It cannot // be used together with the table option. SingletonDescriptor singleton = 104503791; } // TableDescriptor describes an ORM table. message TableDescriptor { // primary_key defines the primary key for the table. PrimaryKeyDescriptor primary_key = 1; // index defines one or more secondary indexes. repeated SecondaryIndexDescriptor index = 2; // id is a non-zero integer ID that must be unique within the // tables and singletons in this file. It may be deprecated in the future when this // can be auto-generated. uint32 id = 3; } // PrimaryKeyDescriptor describes a table primary key. message PrimaryKeyDescriptor { // fields is a comma-separated list of fields in the primary key. Spaces are // not allowed. Supported field types, their encodings, and any applicable constraints // are described below. // - uint32 are encoded as 2,3,4 or 5 bytes using a compact encoding that // is suitable for sorted iteration (not varint encoding). This type is // well-suited for small integers. // - uint64 are encoded as 2,4,6 or 9 bytes using a compact encoding that // is suitable for sorted iteration (not varint encoding). This type is // well-suited for small integers such as auto-incrementing sequences. // - fixed32, fixed64 are encoded as big-endian fixed width bytes and support // sorted iteration. These types are well-suited for encoding fixed with // decimals as integers. // - string's are encoded as raw bytes in terminal key segments and null-terminated // in non-terminal segments. Null characters are thus forbidden in strings. // string fields support sorted iteration. // - bytes are encoded as raw bytes in terminal segments and length-prefixed // with a 32-bit unsigned varint in non-terminal segments. // - int32, sint32, int64, sint64, sfixed32, sfixed64 are encoded as fixed width bytes with // an encoding that enables sorted iteration. // - google.protobuf.Timestamp is encoded such that values with only seconds occupy 6 bytes, // values including nanos occupy 9 bytes, and nil values occupy 1 byte. When iterating, nil // values will always be ordered last. Seconds and nanos values must conform to the officially // specified ranges of 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z and 0 to 999,999,999 respectively. // - google.protobuf.Duration is encoded as 12 bytes using an encoding that enables sorted iteration. // - enum fields are encoded using varint encoding and do not support sorted // iteration. // - bool fields are encoded as a single byte 0 or 1. // // All other fields types are unsupported in keys including repeated and // oneof fields. // // Primary keys are prefixed by the varint encoded table id and the byte 0x0 // plus any additional prefix specified by the schema. string fields = 1; // auto_increment specifies that the primary key is generated by an // auto-incrementing integer. If this is set to true fields must only // contain one field of that is of type uint64. bool auto_increment = 2; } // PrimaryKeyDescriptor describes a table secondary index. message SecondaryIndexDescriptor { // fields is a comma-separated list of fields in the index. The supported // field types are the same as those for PrimaryKeyDescriptor.fields. // Index keys are prefixed by the varint encoded table id and the varint // encoded index id plus any additional prefix specified by the schema. // // In addition the field segments, non-unique index keys are suffixed with // any additional primary key fields not present in the index fields so that the // primary key can be reconstructed. Unique indexes instead of being suffixed // store the remaining primary key fields in the value.. string fields = 1; // id is a non-zero integer ID that must be unique within the indexes for this // table and less than 32768. It may be deprecated in the future when this can // be auto-generated. uint32 id = 2; // unique specifies that this an unique index. bool unique = 3; } // TableDescriptor describes an ORM singleton table which has at most one instance. message SingletonDescriptor { // id is a non-zero integer ID that must be unique within the // tables and singletons in this file. It may be deprecated in the future when this // can be auto-generated. uint32 id = 1; }