File: mysqlnd-ms-query-is-select.xml

package info (click to toggle)
php-doc 20140201-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 74,084 kB
  • ctags: 4,040
  • sloc: xml: 998,137; php: 20,812; cpp: 500; sh: 177; makefile: 63; awk: 28
file content (160 lines) | stat: -rwxr-xr-x 4,939 bytes parent folder | download
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
-->