summaryrefslogtreecommitdiff
path: root/include/mysql.h
diff options
context:
space:
mode:
authorunknown <sasha@mysql.sashanet.com>2001-06-08 19:24:41 -0600
committerunknown <sasha@mysql.sashanet.com>2001-06-08 19:24:41 -0600
commit26ffc5d4dec03f804ea36a2f5915acdbc9c1f705 (patch)
treef46251fc12dc5ff80de5c799174f04ad0fc2487d /include/mysql.h
parent011b141574d8b4c07b9f6b0f8c2f44b18d751646 (diff)
downloadmariadb-git-26ffc5d4dec03f804ea36a2f5915acdbc9c1f705.tar.gz
auto-magic replication redirection logic support in the client,
compiles, passes test suite, does magic, has bugs, but none that I know at this point. Have not tested everything yet, though. Changed a lot of code in the client, but normal stuff appears to be working. BUILD/SETUP.sh: make sure client link statically client/mysqltest.c: new commands to test replication probe/parse include/errmsg.h: new error messages include/mysql.h: support for replication auto-magic libmysql/errmsg.c: new error messages libmysql/libmysql.c: replication probe/parse auto-magic mysql-test/mysql-test-run.sh: --client-gdb to run the client in debugger
Diffstat (limited to 'include/mysql.h')
-rw-r--r--include/mysql.h39
1 files changed, 35 insertions, 4 deletions
diff --git a/include/mysql.h b/include/mysql.h
index 5d06f96d223..4ce7e80bcb9 100644
--- a/include/mysql.h
+++ b/include/mysql.h
@@ -154,6 +154,14 @@ enum mysql_option { MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS,
enum mysql_status { MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,
MYSQL_STATUS_USE_RESULT};
+/* there are three types of queries - the ones that have to go to
+ the master, the ones that go to a slave, and the adminstrative
+ type which must happen on the pivot connectioin
+*/
+enum mysql_rpl_type { MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE,
+ MYSQL_RPL_ADMIN };
+
+
typedef struct st_mysql {
NET net; /* Communication parameters */
gptr connector_fd; /* ConnectorFd for SSL */
@@ -183,7 +191,15 @@ typedef struct st_mysql {
struct st_mysql* master, *next_slave;
struct st_mysql* last_used_slave; /* needed for round-robin slave pick */
- my_bool is_slave; /* will be false for a lone connection */
+ struct st_mysql* last_used_con; /* needed for send/read/store/use
+ result to work
+ correctly with replication
+ */
+ my_bool rpl_pivot; /* set if this is the original connection,
+ not a master or a slave we have added though
+ mysql_rpl_probe() or mysql_set_master()/
+ mysql_add_slave()
+ */
} MYSQL;
@@ -261,9 +277,13 @@ int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
/* perform query on master */
int STDCALL mysql_master_query(MYSQL *mysql, const char *q,
unsigned int length);
+int STDCALL mysql_master_send_query(MYSQL *mysql, const char *q,
+ unsigned int length);
/* perform query on slave */
int STDCALL mysql_slave_query(MYSQL *mysql, const char *q,
unsigned int length);
+int STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q,
+ unsigned int length);
/* enable/disable parsing of all queries to decide
if they go on master or slave */
@@ -278,11 +298,22 @@ void STDCALL mysql_disable_reads_from_master(MYSQL* mysql);
/* get the value of the master read flag */
int STDCALL mysql_reads_from_master_enabled(MYSQL* mysql);
-int STDCALL mysql_query_goes_to_master(const char* q, int len);
+enum mysql_rpl_type STDCALL mysql_rpl_query_type(const char* q, int len);
/* discover the master and its slaves */
-int STDCALL mysql_rpl_probe(MYSQL* mysql);
-
+int STDCALL mysql_rpl_probe(MYSQL* mysql);
+
+/* set the master, close/free the old one, if it is not a pivot */
+int STDCALL mysql_set_master(MYSQL* mysql, const char* host,
+ unsigned int port,
+ const char* user,
+ const char* passwd);
+int STDCALL mysql_add_slave(MYSQL* mysql, const char* host,
+ unsigned int port,
+ const char* user,
+ const char* passwd);
+
+
int STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
int STDCALL mysql_shutdown(MYSQL *mysql);