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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 327381 $ -->
<refentry xml:id="function.mysqlnd-ms-query-is-select" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>mysqlnd_ms_query_is_select</refname>
<refpurpose>Find whether to send the query to the master, the slave or the last used MySQL server</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type>
<methodname>mysqlnd_ms_query_is_select</methodname>
<methodparam><type>string</type><parameter>query</parameter></methodparam>
</methodsynopsis>
<para>
Finds whether to send the query to the master, the slave or the
last used MySQL server.
</para>
<para>
The plugins built-in read/write split mechanism
will be used to analyze the query string to make a recommendation where
to send the query. The built-in read/write split mechanism is very
basic and simple. The plugin will recommend sending all queries to the
MySQL replication master server but those which begin with
<literal>SELECT</literal>, or begin with a SQL hint which
enforces sending the query to a slave server. Due to the basic
but fast algorithm the plugin may propose to run some read-only
statements such as <literal>SHOW TABLES</literal> on the replication master.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>query</parameter></term>
<listitem>
<para>
Query string to test.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
A return value of <constant>MYSQLND_MS_QUERY_USE_MASTER</constant>
indicates that the query should be send to the MySQL replication
master server. The function returns a value of
<constant>MYSQLND_MS_QUERY_USE_SLAVE</constant> if the query can be run
on a slave because it is considered read-only. A value of
<constant>MYSQLND_MS_QUERY_USE_LAST_USED</constant> is returned to recommend
running the query on the last used server. This can either be a MySQL
replication master server or a MySQL replication slave server.
</para>
<para>
If read write splitting has been disabled by setting
<literal>mysqlnd_ms.disable_rw_split</literal>, the function will
always return <constant>MYSQLND_MS_QUERY_USE_MASTER</constant> or
<constant>MYSQLND_MS_QUERY_USE_LAST_USED</constant>.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>mysqlnd_ms_query_is_select</function> example</title>
<programlisting role="php">
<![CDATA[
<?php
function is_select($query)
{
switch (mysqlnd_ms_query_is_select($query))
{
case MYSQLND_MS_QUERY_USE_MASTER:
printf("'%s' should be run on the master.\n", $query);
break;
case MYSQLND_MS_QUERY_USE_SLAVE:
printf("'%s' should be run on a slave.\n", $query);
break;
case MYSQLND_MS_QUERY_USE_LAST_USED:
printf("'%s' should be run on the server that has run the previous query\n", $query);
break;
default:
printf("No suggestion where to run the '%s', fallback to master recommended\n", $query);
break;
}
}
is_select("INSERT INTO test(id) VALUES (1)");
is_select("SELECT 1 FROM DUAL");
is_select("/*" . MYSQLND_MS_LAST_USED_SWITCH . "*/SELECT 2 FROM DUAL");
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
INSERT INTO test(id) VALUES (1) should be run on the master.
SELECT 1 FROM DUAL should be run on a slave.
/*ms=last_used*/SELECT 2 FROM DUAL should be run on the server that has run the previous query
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member>
<link linkend="mysqlnd-ms.constants">Predefined Constants</link>
</member>
<member>
<link linkend="ini.mysqlnd-ms-plugin-config-v2.filter-user"><literal>user</literal></link> filter
</member>
</simplelist>
<simplelist>
<member>
<link linkend="mysqlnd-ms.configuration">Runtime configuration</link>
</member>
<member>
<link linkend="ini.mysqlnd-ms.disable-rw-split">mysqlnd_ms.disable_rw_split</link>
</member>
<member>
<link linkend="ini.mysqlnd-ms.enable">mysqlnd_ms.enable</link>
</member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|