/* * Copyright (c) 2015, 2020, 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 also distributed 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 included with * MySQL. * * Without limiting anything contained in the foregoing, this file, * which is part of MySQL Connector/C++, is also subject to the * Universal FOSS Exception, version 1.0, a copy of which can be found at * http://oss.oracle.com/licenses/universal-foss-exception. * * 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 */ #ifndef MYSQL_COMMON_CONSTANTS_H #define MYSQL_COMMON_CONSTANTS_H #define DEFAULT_MYSQL_PORT 3306 #define DEFAULT_MYSQLX_PORT 33060 // ---------------------------------------------------------------------------- /* Common constants ================ Warning: Values of these constants are part of the public API. Changing them is a non backward compatible API change. Note: Value of 0 is reserved for special uses and thus constant values are always > 0. Note: the empty END_LIST macro at the end of list macros helps Doxygen correctly interpret documentation for the list item. */ #define OPT_STR(X,Y,N) X##_str(Y,N) #define OPT_BOOL(X,Y,N) X##_bool(Y,N) #define OPT_NUM(X,Y,N) X##_num(Y,N) #define OPT_ANY(X,Y,N) X##_any(Y,N) #undef END_LIST #define END_LIST #define CLIENT_OPTION_LIST(x) \ OPT_BOOL(x,POOLING,1) /*!< disable/enable the pool. (Enabled by default)*/ \ OPT_NUM(x,POOL_MAX_SIZE,2) /*!< size of the pool. (Defaults to 25)*/ \ OPT_NUM(x,POOL_QUEUE_TIMEOUT,3) /*!< timeout for waiting for a connection in the pool (ms). (No timeout by default)*/ \ OPT_NUM(x,POOL_MAX_IDLE_TIME,4)/*!< time for a connection to be in the pool without being used (ms).(Will not expire by default)*/ \ END_LIST #define SESSION_OPTION_LIST(x) \ OPT_STR(x,URI,1) /*!< connection URI or string */ \ /*! DNS name of the host, IPv4 address or IPv6 address */ \ OPT_STR(x,HOST,2) \ OPT_NUM(x,PORT,3) /*!< X Plugin port to connect to */ \ /*! Assign a priority (a number in range 1 to 100) to the last specified host; these priorities are used to determine the order in which multiple hosts are tried by the connection fail-over logic (see description of `Session` class) */ \ OPT_NUM(x,PRIORITY,4) \ OPT_STR(x,USER,5) /*!< user name */ \ OPT_STR(x,PWD,6) /*!< password */ \ OPT_STR(x,DB,7) /*!< default database */ \ /*! Specify \ref SSLMode option to be used. In plain C code the value should be a `#mysqlx_ssl_mode_t` enum constant. */ \ OPT_ANY(x,SSL_MODE,8) \ /*! path to a PEM file specifying trusted root certificates*/ \ OPT_STR(x,SSL_CA,9) \ /*! Authentication method to use, see \ref AuthMethod. In plain C code the value should be a `#mysqlx_auth_method_t` enum constant. */ \ OPT_ANY(x,AUTH,10) \ OPT_STR(x,SOCKET,11) /*!< unix socket path */ \ /*! Sets connection timeout in milliseconds. In C++ code can be also set to a `std::chrono::duration` value. */ \ OPT_NUM(x,CONNECT_TIMEOUT,12) \ /*! Specifies connection attributes (key-value pairs) to be sent when a session is created. The value is a JSON string (in C++ code can be also a `DbDoc` object) defining additional attributes to be sent on top of the default ones. Setting this option to `false` (in C++ code) or NULL (in plain C code) disables sending any connection attributes (including the default ones). Setting it to `true` (in C++ code) or empty string (in plain C code) requests sending only the default attributes which is also the default behavior when this option is not set. */ \ OPT_STR(x,CONNECTION_ATTRIBUTES,13) \ /*! List of allowed TLS protocol versions, such as "TLSv1.2". The value is a string with comma separated versions. In C++ code it can also be an iterable container with versions. */ \ OPT_STR(x,TLS_VERSIONS, 14) \ /*! List of allowed TLS cipher suites. The value is a string with comma separated IANA cipher suitenames (such as "TLS_RSA_WITH_3DES_EDE_CBC_SHA"). In C++ code it can also be an iterable container with names. Unknown cipher suites are silently ignored. */ \ OPT_STR(x,TLS_CIPHERSUITES, 15) \ /*! If enabled (true) will check hostname for DNS SRV record and use its configuration (hostname, port, priority and weight) to connect. */ \ OPT_BOOL(x, DNS_SRV, 16) \ OPT_ANY(x,COMPRESSION,17) /*!< enable or disable compression */ \ /*! Specify compression algorithms in order of preference */ \ OPT_STR(x,COMPRESSION_ALGORITHMS,18) \ END_LIST /* Names for options supported in the query part of a connection string and how they map to session options above. Note: when adding new options to this list, also update doxygen docs for mysqlx::SessionSettings URL ctor (include\mysqlx\devapi\settings.h) and for mysqlx_get_session_from_url() (include\mysqlx\xapi.h). */ #define URI_OPTION_LIST(X) \ X("ssl-mode", SSL_MODE) \ X("ssl-ca", SSL_CA) \ X("auth", AUTH) \ X("connect-timeout", CONNECT_TIMEOUT) \ X("connection-attributes",CONNECTION_ATTRIBUTES)\ X("tls-versions", TLS_VERSIONS) \ X("tls-ciphersuites", TLS_CIPHERSUITES) \ X("compression", COMPRESSION) \ X("compression-algorithms", COMPRESSION_ALGORITHMS) \ END_LIST #define SSL_MODE_LIST(x) \ x(DISABLED,1) /*!< Establish an unencrypted connection. */ \ x(REQUIRED,2) /*!< Establish a secure connection if the server supports secure connections. The connection attempt fails if a secure connection cannot be established. This is the default if `SSL_MODE` is not specified. */ \ x(VERIFY_CA,3) /*!< Like `REQUIRED`, but additionally verify the server TLS certificate against the configured Certificate Authority (CA) certificates (defined by `SSL_CA` Option). The connection attempt fails if no valid matching CA certificates are found.*/ \ x(VERIFY_IDENTITY,4) /*!< Like `VERIFY_CA`, but additionally verify that the server certificate matches the host to which the connection is attempted.*/\ END_LIST #define AUTH_METHOD_LIST(x)\ x(PLAIN,1) /*!< Plain text authentication method. The password is sent as a clear text. This method is used by default in encrypted connections. */ \ x(MYSQL41,2) /*!< Authentication method supported by MySQL 4.1 and newer. The password is hashed before being sent to the server. This authentication method works over unencrypted connections */ \ x(EXTERNAL,3) /*!< External authentication when the server establishes the user authenticity by other means such as SSL/x509 certificates. Currently not supported by X Plugin */ \ x(SHA256_MEMORY,4) /*!< Authentication using SHA256 password hashes stored in server-side cache. This authentication method works over unencrypted connections. */ \ END_LIST /* Types that can be reported by MySQL server. */ #define RESULT_TYPE_LIST(X) \ X(BIT, 1) \ X(TINYINT, 2) \ X(SMALLINT, 3) \ X(MEDIUMINT, 4) \ X(INT, 5) \ X(BIGINT, 6) \ X(FLOAT, 7) \ X(DECIMAL, 8) \ X(DOUBLE, 9) \ X(JSON, 10) \ X(STRING, 11) \ X(BYTES, 12) \ X(TIME, 13) \ X(DATE, 14) \ X(DATETIME, 15) \ X(TIMESTAMP, 16) \ X(SET, 17) \ X(ENUM, 18) \ X(GEOMETRY, 19) \ END_LIST /* Check options for an updatable view. @see https://dev.mysql.com/doc/refman/en/view-check-option.html */ #define VIEW_CHECK_OPTION_LIST(x) \ x(CASCADED,1) \ x(LOCAL,2) \ END_LIST /* Algorithms used to process views. @see https://dev.mysql.com/doc/refman/en/view-algorithms.html */ #define VIEW_ALGORITHM_LIST(x) \ x(UNDEFINED,1) \ x(MERGE,2) \ x(TEMPTABLE,3) \ END_LIST /* View security settings. @see https://dev.mysql.com/doc/refman/en/stored-programs-security.html */ #define VIEW_SECURITY_LIST(x) \ x(DEFINER,1) \ x(INVOKER,2) \ END_LIST #define LOCK_MODE_LIST(X) \ X(SHARED,1) /*!< Sets a shared mode lock on any rows that are read. Other sessions can read the rows, but cannot modify them until your transaction commits. If any of these rows were changed by another transaction that has not yet committed, your query waits until that transaction ends and then uses the latest values. */ \ X(EXCLUSIVE,2) /*!< For index records the search encounters, locks the rows and any associated index entries, the same as if you issued an UPDATE statement for those rows. Other transactions are blocked from updating those rows, from doing locking in LOCK_SHARED, or from reading the data in certain transaction isolation levels. */ \ END_LIST #define LOCK_CONTENTION_LIST(X) \ X(DEFAULT,0) /*!< Block query until existing row locks are released. */ \ X(NOWAIT,1) /*!< Return error if lock could not be obtained immediately. */ \ X(SKIP_LOCKED,2) /*!< Execute query immediately, excluding items that are locked from the query results. */ \ END_LIST #define COMPRESSION_MODE_LIST(x) \ x(DISABLED,1) /*!< Disables the compression. */ \ x(PREFERRED,2) /*!< Request compression, but not return error if compression is requested, but could not be used */ \ x(REQUIRED,3) /*!< Request compression and return error if compression is not supported by the server */ \ END_LIST // ---------------------------------------------------------------------------- #define COLLECTION_OPTIONS_OPTION(X)\ X(REUSE,1) /*!< Use existing collection. Expects boolean value @anchor OPT_COLLECTION_REUSE */ \ X(VALIDATION,2) /*!< Collection validation options. Expects CollectionValidation or a json string.*/ \ END_LIST #define COLLECTION_VALIDATION_OPTION(X)\ X(SCHEMA,1) /*!< Collection validation schema, as defined by https://dev.mysql.com/doc/refman/8.0/en/json-validation-functions.html#function_json-schema-valid */ \ X(LEVEL,2) /*!< Defines level of validation on the collection, see \ref CollectionValidation_Level "CollectionValidation::Level". In plain C code the value should be \ref opt_collection_validation_level "mysqlx_collection_validation_level_t". */ \ END_LIST // Schema Validation Level //Windows defines STRICT as a macro... undefine it #ifdef STRICT #undef STRICT #endif #define COLLECTION_VALIDATION_LEVEL(X)\ X(OFF,1) /*!< No validation will be done on the collection. */ \ X(STRICT,2) /*!< All collection documents have to comply to validation schema. */ \ END_LIST #endif