1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/*
* Copyright (c) 2015, 2025, Oracle and/or its affiliates.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2.0,
* as published by the Free Software Foundation.
*
* This program is designed to work with certain software (including
* but not limited to OpenSSL) that is licensed under separate terms,
* as designated in a particular file or component or in included license
* documentation. The authors of MySQL hereby grant you an additional
* permission to link the program and your derivative works with the
* separately licensed software that they have either included with
* the program or referenced in the documentation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License, version 2.0, for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
syntax = "proto2";
// ifdef PROTOBUF_LITE: option optimize_for = LITE_RUNTIME;
/**
@namespace Mysqlx::Prepare
@brief Handling of prepared statments
*/
package Mysqlx.Prepare;
option java_package = "com.mysql.cj.x.protobuf";
import "mysqlx.proto"; // comment_out_if PROTOBUF_LITE
import "mysqlx_sql.proto";
import "mysqlx_crud.proto";
import "mysqlx_datatypes.proto";
/**
Prepare a new statement
@startuml
client -> server: Prepare
alt Success
client <- server: Ok
else Failure
client <- server: Error
end
@enduml
@returns @ref Mysqlx::Ok or @ref Mysqlx::Error
*/
message Prepare {
/** client-side assigned statement ID, which is going to identify
the result of preparation */
required uint32 stmt_id = 1;
message OneOfMessage {
// Determine which of optional fields was set by the client
// (Workaround for missing "oneof" keyword in pb2.5)
enum Type {
FIND = 0;
INSERT = 1;
UPDATE = 2;
DELETE = 4;
STMT = 5;
}
required Type type = 1;
optional Mysqlx.Crud.Find find = 2;
optional Mysqlx.Crud.Insert insert = 3;
optional Mysqlx.Crud.Update update = 4;
optional Mysqlx.Crud.Delete delete = 5;
optional Mysqlx.Sql.StmtExecute stmt_execute = 6;
}
/** defines one of following messages to be prepared:
Crud::Find, Crud::Insert, Crud::Delete, Crud::Upsert, Sql::StmtExecute */
required OneOfMessage stmt = 2;
option (client_message_id) = PREPARE_PREPARE; // comment_out_if PROTOBUF_LITE
}
/**
Execute already-prepared statement
@startuml
client -> server: Execute
alt Success
... Resultsets...
client <- server: StmtExecuteOk
else Failure
client <- server: Error
end
@enduml
@returns @ref Mysqlx::Ok
*/
message Execute {
/** client-side assigned statement ID, must be already prepared */
required uint32 stmt_id = 1;
/** Arguments to bind to the prepared statement */
repeated Mysqlx.Datatypes.Any args = 2;
/** send only type information for
@ref Mysqlx::Resultset::ColumnMetaData, skipping names and others */
optional bool compact_metadata = 3 [ default = false ];
option (client_message_id) = PREPARE_EXECUTE; // comment_out_if PROTOBUF_LITE
}
/**
Deallocate already-prepared statement
@startuml
client -> server: Deallocate
alt Success
client <- server: Ok
else Failure
client <- server: Error
end
@enduml
@returns @ref Mysqlx::Ok or @ref Mysqlx::Error
*/
message Deallocate {
/** client-side assigned statement ID, must be already prepared */
required uint32 stmt_id = 1;
option (client_message_id) = PREPARE_DEALLOCATE; // comment_out_if PROTOBUF_LITE
}
|