Merge lp:~stewart/percona-server/bug1012488 into lp:percona-server/5.5
- bug1012488
- Merge into 5.5
Status: | Work in progress |
---|---|
Proposed branch: | lp:~stewart/percona-server/bug1012488 |
Merge into: | lp:percona-server/5.5 |
Diff against target: |
12645 lines (+10373/-1867) 59 files modified
Percona-Server/plugin/percona-pam-for-mysql/.bzrignore (+1/-0) Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt (+2/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile (+9/-0) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html (+0/-499) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html (+0/-22) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t (+0/-469) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js (+0/-154) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css (+0/-271) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js (+0/-269) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js (+0/-151) Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf (+0/-32) Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h (+4/-0) Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh (+122/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py (+216/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst (+21/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst (+34/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst (+498/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat (+170/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst (+202/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst (+182/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst (+123/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst (+494/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst (+100/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py (+131/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py (+139/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py (+495/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/native/native_test_execution.py (+100/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/native/native_test_management.py (+201/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/sysbench/sysbench_test_execution.py (+162/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/sysbench/sysbench_test_management.py (+159/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/test_mode.py (+68/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/opts/defaults.py (+119/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/opts/matrix_manager.py (+51/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/opts/test_run_options.py (+575/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/drizzled.py (+236/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/galera.py (+359/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/mysqld.py (+506/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/percona.py (+287/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/server.py (+382/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/server_mgmt/server_management.py (+507/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/codeTree.py (+489/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/code_management.py (+116/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/environment_management.py (+99/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/logging_management.py (+157/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/port_management.py (+196/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/system_management.py (+555/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/sys_mgmt/time_management.py (+118/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/test_mgmt/execution_management.py (+142/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/test_mgmt/test_execution.py (+325/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/test_mgmt/test_management.py (+300/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/crashme_methods.py (+127/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/mysqlBaseTestCase.py (+377/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/mysql_methods.py (+258/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/randgen_methods.py (+55/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/sqlbench_methods.py (+70/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/util/xtrabackup_methods.py (+109/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/percona_tests/percona_pam/pam_basic_test.py (+112/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/percona_tests/percona_pam/pam_negative_test.py (+112/-0) Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/qp_data/uuid (+1/-0) |
To merge this branch: | bzr merge lp:~stewart/percona-server/bug1012488 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Alexey Kopytov (community) | Needs Fixing | ||
Review via email: mp+112280@code.launchpad.net |
Commit message
Description of the change
Update the bundled PAM plugin to latest PAM plugin BZR tree.
basically this adds the test suite and an OSX build fix.
http://
Stewart Smith (stewart) wrote : | # |
Alexey Kopytov <email address hidden> writes:
> All of that is because of 2 rudementary tests pam_negative_
> pam_basic_test.py. There's absolutely no reason to base them on
> kewpie. Apparently there was also an attempt to use the XtraBackup
> test suite, because there's also
> plugin/
> copy from the XtraBackup tree and is unused in PAM plugin tests.
Kewpie still needs a server to run, and bootstrap.sh is used to fetch it
(unless you're building a PS tree, in which case you can use that).
> There's also the following WTF thing:
>
> === added directory 'Percona-
> === added file 'Percona-
> --- Percona-
> +++ Percona-
> @@ -0,0 +1 @@
> +e5f64ede-
> \ No newline at end of file
>
> === added symlink 'Percona-
> === target is u'/dev/
>
> This has to be fixed 'upstream' before merging this into the server tree.
Yep, these shouldn't be there.
--
Stewart Smith
Alexey Kopytov (akopytov) wrote : | # |
On 09.07.12 9:28, Stewart Smith wrote:
> Alexey Kopytov <email address hidden> writes:
>> All of that is because of 2 rudementary tests pam_negative_
>> pam_basic_test.py. There's absolutely no reason to base them on
>> kewpie. Apparently there was also an attempt to use the XtraBackup
>> test suite, because there's also
>> plugin/
>> copy from the XtraBackup tree and is unused in PAM plugin tests.
>
> Kewpie still needs a server to run, and bootstrap.sh is used to fetch it
> (unless you're building a PS tree, in which case you can use that).
Well, in this case we do build in a PS tree.
Besides, bootstrap.sh is a verbatim copy from the XB tree, so I wonder
how it's arguments (innodb51, xtradb51, etc.) apply here.
Unmerged revisions
- 275. By Stewart Smith
-
merge latest PAM plugin sources
Preview Diff
1 | === modified file 'Percona-Server/plugin/percona-pam-for-mysql/.bzrignore' |
2 | --- Percona-Server/plugin/percona-pam-for-mysql/.bzrignore 2012-03-15 14:43:05 +0000 |
3 | +++ Percona-Server/plugin/percona-pam-for-mysql/.bzrignore 2012-06-27 07:03:19 +0000 |
4 | @@ -19,3 +19,4 @@ |
5 | *.tar.gz |
6 | m4/*.m4 |
7 | doc/build |
8 | +doc/source/percona-theme |
9 | |
10 | === modified file 'Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt' |
11 | --- Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt 2012-05-08 05:19:39 +0000 |
12 | +++ Percona-Server/plugin/percona-pam-for-mysql/CMakeLists.txt 2012-06-27 07:03:19 +0000 |
13 | @@ -18,6 +18,8 @@ |
14 | CHECK_LIBRARY_EXISTS(mysqlclient mysql_init "" HAVE_MYSQLCLIENT) |
15 | CHECK_SYMBOL_EXISTS(getpwnam_r "pwd.h" HAVE_GETPWNAM_R) |
16 | CHECK_SYMBOL_EXISTS(getgrgid_r "grp.h" HAVE_GETGRGID_R) |
17 | +CHECK_INCLUDE_FILES (security/pam_misc.h HAVE_SECURITY_PAM_MISC_H) |
18 | +CHECK_INCLUDE_FILES (security/openpam.h HAVE_SECURITY_OPENPAM_H) |
19 | IF(HAVE_PAM AND HAVE_MYSQLCLIENT AND HAVE_GETPWNAM_R AND HAVE_GETGRGID_R) |
20 | SET(AUTH_PAM_COMMON_SOURCES |
21 | src/auth_pam_common.c src/lib_auth_pam_client.c src/lib_auth_pam_client.h |
22 | |
23 | === modified file 'Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile' |
24 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile 2011-10-25 10:51:19 +0000 |
25 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/Makefile 2012-06-27 07:03:19 +0000 |
26 | @@ -37,6 +37,15 @@ |
27 | -rm -rf $(BUILDDIR)/* |
28 | |
29 | html: |
30 | + @echo "Downloading percona-theme ..." |
31 | + @wget -O percona-theme.tar.gz http://percona.com/docs/theme/percona-pam-for-mysql |
32 | + @echo "Extracting theme." |
33 | + @tar -zxf percona-theme.tar.gz |
34 | + @rm -rf source/percona-theme |
35 | + @mv percona-theme source/percona-theme |
36 | + @rm percona-theme.tar.gz |
37 | + @echo "Building html doc" |
38 | + |
39 | $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html |
40 | @echo |
41 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." |
42 | |
43 | === removed directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme' |
44 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html' |
45 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html 2012-03-26 17:43:02 +0000 |
46 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/layout.html 1970-01-01 00:00:00 +0000 |
47 | @@ -1,499 +0,0 @@ |
48 | -{# |
49 | - basic/layout.html |
50 | - ~~~~~~~~~~~~~~~~~ |
51 | - |
52 | - Master layout template for Sphinx themes. |
53 | - |
54 | - :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. |
55 | - :license: BSD, see LICENSE for details. |
56 | -#} |
57 | -{%- block doctype -%} |
58 | -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
59 | - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
60 | -{%- endblock %} |
61 | -{%- set reldelim1 = reldelim1 is not defined and ' »' or reldelim1 %} |
62 | -{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %} |
63 | -{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and |
64 | - (sidebars != []) %} |
65 | -{%- set url_root = pathto('', 1) %} |
66 | -{# XXX necessary? #} |
67 | -{%- if url_root == '#' %}{% set url_root = '' %}{% endif %} |
68 | -{%- if not embedded and docstitle %} |
69 | - {%- set titlesuffix = " — "|safe + docstitle|e %} |
70 | -{%- else %} |
71 | - {%- set titlesuffix = "" %} |
72 | -{%- endif %} |
73 | - |
74 | -{%- macro relbar() %} |
75 | - <div class="related"> |
76 | - <h3>{{ _('Navigation') }}</h3> |
77 | - <ul> |
78 | - {%- for rellink in rellinks %} |
79 | - <li class="right" {% if loop.first %}style="margin-right: 10px"{% endif %}> |
80 | - <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}" |
81 | - {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a> |
82 | - {%- if not loop.first %}{{ reldelim2 }}{% endif %}</li> |
83 | - {%- endfor %} |
84 | - {%- block rootrellink %} |
85 | - <li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li> |
86 | - {%- endblock %} |
87 | - {%- for parent in parents %} |
88 | - <li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li> |
89 | - {%- endfor %} |
90 | - {%- block relbaritems %} {% endblock %} |
91 | - </ul> |
92 | - </div> |
93 | -{%- endmacro %} |
94 | - |
95 | -{%- macro sidebar() %} |
96 | - {%- if render_sidebar %} |
97 | - <div class="sphinxsidebar"> |
98 | - <div class="sphinxsidebarwrapper"> |
99 | - {%- block sidebarlogo %} |
100 | - {%- if logo %} |
101 | - <p class="logo"><a href="{{ pathto(master_doc) }}"> |
102 | - <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/> |
103 | - </a></p> |
104 | - {%- endif %} |
105 | - |
106 | -<div class="noborder" id="sidenavi"> |
107 | - |
108 | - <div class="sidebanner" id="sidebanner"> |
109 | - <div class="header"><a href="/contact/sales">Call Us</a></div> |
110 | - <div class="numbers"> |
111 | - <div style="padding-bottom: 4px"> |
112 | - +1-888-316-9775 (USA - Sales)<br> |
113 | - +1-208-473-2904 (USA - Sales) |
114 | - </div> |
115 | - <div> |
116 | - +44-208-133-0309 (UK - Sales) |
117 | - </div> |
118 | - <div> |
119 | - +1-877-862-4316 (Emergency) |
120 | - </div> |
121 | - </div> |
122 | - </div> |
123 | - <div id="sidefloater"></div> |
124 | -</div> |
125 | - |
126 | - {%- endblock %} |
127 | - {%- if sidebars != None %} |
128 | - {#- new style sidebar: explicitly include/exclude templates #} |
129 | - {%- for sidebartemplate in sidebars %} |
130 | - {%- include sidebartemplate %} |
131 | - {%- endfor %} |
132 | - {%- else %} |
133 | - {#- old style sidebars: using blocks -- should be deprecated #} |
134 | - {%- block serverseries %} |
135 | - {%- endblock %} |
136 | - {%- block sidebartoc %} |
137 | - {%- include "localtoc.html" %} |
138 | - {%- endblock %} |
139 | - {%- block sidebarrel %} |
140 | - {%- include "relations.html" %} |
141 | - {%- endblock %} |
142 | - {%- block sidebarsourcelink %} |
143 | - {%- include "sourcelink.html" %} |
144 | - {%- endblock %} |
145 | - {%- if customsidebar %} |
146 | - {%- include customsidebar %} |
147 | - {%- endif %} |
148 | - {%- block sidebarsearch %} |
149 | - {%- include "searchbox.html" %} |
150 | - {%- endblock %} |
151 | - {%- endif %} |
152 | - |
153 | - </div> |
154 | - </div> |
155 | - {%- endif %} |
156 | -{%- endmacro %} |
157 | - |
158 | -{%- macro script() %} |
159 | - <script type="text/javascript"> |
160 | - var DOCUMENTATION_OPTIONS = { |
161 | - URL_ROOT: '{{ url_root }}', |
162 | - VERSION: '{{ release|e }}', |
163 | - COLLAPSE_INDEX: false, |
164 | - FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}', |
165 | - HAS_SOURCE: {{ has_source|lower }} |
166 | - }; |
167 | - </script> |
168 | - {%- for scriptfile in script_files %} |
169 | - <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script> |
170 | - {%- endfor %} |
171 | -{%- endmacro %} |
172 | - |
173 | -{%- macro css() %} |
174 | - <link rel="stylesheet" href="{{ pathto('_static/percona.com.css', 1) }}" type="text/css" /> |
175 | - <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" /> |
176 | - <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" /> |
177 | - {%- for cssfile in css_files %} |
178 | - <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" /> |
179 | - {%- endfor %} |
180 | -{%- endmacro %} |
181 | - |
182 | -<html xmlns="http://www.w3.org/1999/xhtml"> |
183 | - <head> |
184 | - <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" /> |
185 | - {{ metatags }} |
186 | - {%- block htmltitle %} |
187 | - <title>{{ title|striptags|e }}{{ titlesuffix }}</title> |
188 | - {%- endblock %} |
189 | - |
190 | - {{ css() }} |
191 | - {%- if not embedded %} |
192 | - {{ script() }} |
193 | - {%- if use_opensearch %} |
194 | - <link rel="search" type="application/opensearchdescription+xml" |
195 | - title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}" |
196 | - href="{{ pathto('_static/opensearch.xml', 1) }}"/> |
197 | - {%- endif %} |
198 | - |
199 | -<script src="{{ pathto('_static/percona.com.js', 1)}}" type="text/javascript"></script> |
200 | - |
201 | - {%- if favicon %} |
202 | - <link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/> |
203 | - {%- endif %} |
204 | - {%- endif %} |
205 | -{%- block linktags %} |
206 | - {%- if hasdoc('about') %} |
207 | - <link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" /> |
208 | - {%- endif %} |
209 | - {%- if hasdoc('genindex') %} |
210 | - <link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" /> |
211 | - {%- endif %} |
212 | - {%- if hasdoc('search') %} |
213 | - <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" /> |
214 | - {%- endif %} |
215 | - {%- if hasdoc('copyright') %} |
216 | - <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" /> |
217 | - {%- endif %} |
218 | - <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" /> |
219 | - {%- if parents %} |
220 | - <link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" /> |
221 | - {%- endif %} |
222 | - {%- if next %} |
223 | - <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" /> |
224 | - {%- endif %} |
225 | - {%- if prev %} |
226 | - <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" /> |
227 | - {%- endif %} |
228 | -{%- endblock %} |
229 | -{%- block extrahead %} {% endblock %} |
230 | - </head> |
231 | - <body> |
232 | - |
233 | -{%- block header %} |
234 | - |
235 | - <!-- <div id="stickywrapper"> --> |
236 | - <!-- <div id="stickycontent"> --> |
237 | - <div id="header"><div class="header"> |
238 | - <div class="logo"><a href="http://www.percona.com/" onfocus="this.blur()"><img src="http://s3.percona.com/ui-logo.png" alt="Percona Performance Consulting Experts" width="240" height="55" /></a></div> |
239 | - <div class="right"> |
240 | - <div class="searchlink"><a onmouseover="SEARCH.Open()"><img id="searchlink-anchor" src="http://s2.percona.com/ui-search.png" alt="" /></a></div> |
241 | - <span class="inv"><![CDATA[<noindex>]]></span> |
242 | - <div class="navicontainer"><div class="navi"> |
243 | - <span id="navilink-span-about-us" ><a id="navilink-a-about-us" href="http://www.percona.com/about-us/">About Us</a></span><span id="navilink-span-mysql-consulting" ><a id="navilink-a-mysql-consulting" href="http://www.percona.com/mysql-consulting/">Consulting</a></span><span id="navilink-span-support" ><a id="navilink-a-support" href="http://www.percona.com/mysql-support/">Support</a></span><span id="navilink-span-training" ><a id="navilink-a-training" href="http://www.percona.com/training/">Training</a></span><span id="navilink-span-development" ><a id="navilink-a-development" href="http://www.percona.com/development/">Development</a></span><span id="navilink-span-software" class="selected"><a class="selected" id="navilink-a-software" href="http://www.percona.com/software/">Software</a></span><span id="navilink-span-events" ><a id="navilink-a-events" href="http://www.percona.com/live/">Events</a></span><span id="navilink-span-contact" ><a id="navilink-a-contact" href="http://www.percona.com/contact/">Contact Us</a></span> </div></div> |
244 | - |
245 | - <span class="inv"><![CDATA[</noindex>]]></span> |
246 | - <span class="inv"><![CDATA[</noindex>]]></span> |
247 | - </div> |
248 | - </div></div> |
249 | - <div id="stripe"></div> |
250 | - |
251 | -{% endblock %} |
252 | - |
253 | - <!-- <div id="stripe"></div> --> |
254 | - |
255 | -{%- block content %} |
256 | - |
257 | - |
258 | - |
259 | - {%- block sidebar1 %} {# possible location for sidebar #} {% endblock %} |
260 | - |
261 | - <div class="document"> |
262 | - |
263 | - |
264 | - |
265 | - {%- block document %} |
266 | - <div class="documentwrapper"> |
267 | - {%- if render_sidebar %} |
268 | - <div class="bodywrapper"> |
269 | - {%- endif %} |
270 | - |
271 | - {%- block relbar1 %}{{ relbar() }}{% endblock %} |
272 | - |
273 | - <div class="body"> |
274 | - {% block body %} {% endblock %} |
275 | - </div> |
276 | - |
277 | - {%- block relbar2 %}{{ relbar() }} |
278 | - |
279 | - {%- if render_sidebar %} |
280 | - </div> |
281 | - {%- endif %} |
282 | - |
283 | - |
284 | - |
285 | - </div> |
286 | - |
287 | - {%- endblock %} |
288 | - |
289 | - {%- block sidebar2 %}{{ sidebar() }}{% endblock %} |
290 | - |
291 | - <div class="clearer"></div> |
292 | - |
293 | - {%- if last_updated %} |
294 | - {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %} |
295 | - {%- endif %} |
296 | - |
297 | - <div class="license"> |
298 | - |
299 | - {%- if show_copyright %} |
300 | - {%- if hasdoc('copyright') %} |
301 | - {% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %} |
302 | - {%- else %} |
303 | - {% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} |
304 | - {%- endif %} |
305 | - {%- endif %} |
306 | - |
307 | - <br /> |
308 | - Except where otherwise noted, this documentation is licensed under the following license: |
309 | - <br /> |
310 | - <a class="urlextern" rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/"> |
311 | - CC Attribution-ShareAlike 2.0 Generic</a><br /> |
312 | - |
313 | - {%- if show_sphinx %} |
314 | - {% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %} |
315 | - {%- endif %} |
316 | - |
317 | - </div> |
318 | - |
319 | - </div> |
320 | - {%- endblock %} |
321 | - |
322 | - {% endblock %} |
323 | - |
324 | -{%- block footer %} |
325 | - |
326 | - <div class="file-bugs"> |
327 | - This documentation is developed in Launchpad as part of the <a href="https://code.launchpad.net/percona-toolkit">Percona Toolkit source code</a>.<br/> |
328 | - If you spotted innacuracies, errors, don't understood it or you think something is missing or should be improved, please <a href="https://bugs.launchpad.net/percona-toolkit/+filebug?field.tags=doc&field.comment=[In:Percona Toolkit Documentation]&?field.tags=doc&field.title=[DOC] ">file a bug</a>. |
329 | - |
330 | - </div> |
331 | - |
332 | - <div id="support-ribbon" class="vertical" style="z-index: 1;"> |
333 | - <div id="support-suboptions"> |
334 | - <ul> |
335 | - <li><a title="Contact Me" href="http://form.percona.com/ContactMe.html" style="background: url('http://s2.percona.com/buttons/btn_contact-us.png?1');"><span>Contact Us</span></a></li> |
336 | - <li><a title="Customer Portal Log In" href="https://customers.percona.com/" style="background: url('http://s2.percona.com/buttons/btn_customer.png?1');"><span>Customer Portal Log In</span></a></li> |
337 | - <li><a title="Attend a Webinar" href="http://percona.com/webinars/" style="background: url('http://s2.percona.com/buttons/btn_attend-a-webinar.png?1');"><span>Attend a Webinar</span></a></li> |
338 | - <li><a title="Download Software" href="http://percona.com/downloads/" style="background:url('http://s2.percona.com/buttons/btn_download.png?1');"><span>Download Software</span></a></li> |
339 | - <li><a title="Register for Newsletters" href="http://percona.com/subscribe/" style="background: url('http://s2.percona.com/buttons/btn_register.png?1');"><span>Register for Newsletters</span></a></li> |
340 | - |
341 | - </ul> |
342 | - </div> |
343 | - </div> |
344 | - |
345 | - <div id="footer"> |
346 | - |
347 | - <div class="footer"> |
348 | - <div class="logo"><img width="110" height="25" alt="" src="{{ pathto('_static/ui-footer-logo.png', 1) }}"> |
349 | - </div> |
350 | - |
351 | - <div class="text"> |
352 | - <span class="inv"><!--[CDATA[<noindex-->]]></span> |
353 | - Call us: 1-888-316-9775 • <a href="/contact">Contact Us</a><br> |
354 | - MySQL and InnoDB are trademarks of Oracle Corp.<br> |
355 | - Proudly running <a href="/software/percona-server/">Percona Server<span id="recentServerVersion"></span></a><br> |
356 | - Copyright © 2006-2011 Percona Inc.<br> |
357 | - <a href="/about-us/policies/">Copyright, Trademark, and Privacy Policy</a> • <a href="/sitemap/">Sitemap</a> |
358 | - <span class="inv"><!--[CDATA[</noindex-->]]></span> |
359 | - </div> |
360 | - </div> |
361 | - |
362 | - </div> |
363 | -{%- endblock %} |
364 | -<span class="inv"><!--[CDATA[<noindex-->]]></span> |
365 | -<div id="submenus"> |
366 | - <div class="navi-dropdown" id="navi-dropdown-about-us"> |
367 | - <div class="navi-dropdown-header-l"><!-- //--></div> |
368 | - <div class="navi-dropdown-content"> |
369 | - <div class="item"><a href="http://www.percona.com/about-us/our-mission/">Our Mission</a></div> |
370 | - <div class="item"><a href="http://www.percona.com/about-us/why-percona/">Why Percona?</a></div> |
371 | - <div class="item"><a href="http://www.percona.com/about-us/procedures/">Coordinating with Percona</a></div> |
372 | - <div class="item"><a href="http://www.percona.com/about-us/customers/">Customers</a></div> |
373 | - <div class="item"><a href="http://www.percona.com/webinars/">Webinars</a></div> |
374 | - <div class="item"><a href="http://www.percona.com/about-us/mysql-case-studies/">MySQL Case Studies</a></div> |
375 | - <div class="item"><a href="http://www.percona.com/about-us/our-team/">Our Team</a></div> |
376 | - |
377 | - <div class="item"><a href="http://www.percona.com/about-us/books/">Our Books</a></div> |
378 | - <div class="item"><a href="http://www.percona.com/about-us/blogs/">Our Blogs</a></div> |
379 | - <div class="item"><a href="http://www.percona.com/about-us/mysql-white-papers/">MySQL White Papers</a></div> |
380 | - <div class="item"><a href="http://www.percona.com/about-us/conferences/">Conferences</a></div> |
381 | - <div class="item"><a href="http://www.percona.com/about-us/presentations/">Presentations</a></div> |
382 | - <div class="item"><a href="http://www.percona.com/about-us/newsletters/">Newsletters</a></div> |
383 | - <div class="item"><a href="http://www.percona.com/about-us/pressreleases/">Press Releases</a></div> |
384 | - <div class="item"><a href="http://www.percona.com/about-us/percona-in-the-news/">In The News</a></div> |
385 | - <div class="item"><a href="http://www.percona.com/about-us/careers/">Careers</a></div> |
386 | - |
387 | - </div> |
388 | - <div class="navi-dropdown-footer"><!-- //--></div> |
389 | - </div> |
390 | - <div class="navi-dropdown" id="navi-dropdown-mysql-consulting"> |
391 | - <div class="navi-dropdown-header-l"><!-- //--></div> |
392 | - <div class="navi-dropdown-content"> |
393 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/overview/">MySQL Consulting Overview</a></div> |
394 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/prices/">MySQL Consulting Prices</a></div> |
395 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/architecture/">MySQL Architecture & Design</a></div> |
396 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-backups/">MySQL Backups</a></div> |
397 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/cloud-computing/">MySQL Cloud Solutions</a></div> |
398 | - |
399 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/cluster/">MySQL Cluster Consulting</a></div> |
400 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/data-warehousing/">MySQL Data Warehousing</a></div> |
401 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/data-recovery/">MySQL Data Recovery</a></div> |
402 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/high-availability/">MySQL High Availability</a></div> |
403 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-monitoring-graphing/">MySQL Monitoring & Graphing</a></div> |
404 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-onsite-consulting/">MySQL Onsite Consulting</a></div> |
405 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/performance-audit/">MySQL Performance Audit</a></div> |
406 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/remote-dba/">MySQL Remote DBA</a></div> |
407 | - |
408 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/mysql-replication/">MySQL Replication</a></div> |
409 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/upgrade/">MySQL Version Upgrades</a></div> |
410 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/24x7-emergency/">Emergency 24×7 Consulting</a></div> |
411 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/migration/">Migration to MySQL</a></div> |
412 | - <div class="item"><a href="http://www.percona.com/drizzle-consulting/">Drizzle Consulting</a></div> |
413 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/sphinx/">Sphinx Consulting</a></div> |
414 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/drbd/">DRBD Consulting</a></div> |
415 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/memcached/">Memcached Consulting</a></div> |
416 | - |
417 | - <div class="item"><a href="http://www.percona.com/mysql-consulting/other-services/">Other Consulting Services</a></div> |
418 | - </div> |
419 | - <div class="navi-dropdown-footer"><!-- //--></div> |
420 | - </div> |
421 | - <div class="navi-dropdown" id="navi-dropdown-support"> |
422 | - <div class="navi-dropdown-header-l"><!-- //--></div> |
423 | - <div class="navi-dropdown-content"> |
424 | - <div class="item"><a href="http://www.percona.com/mysql-support/">MySQL Support Overview</a></div> |
425 | - <div class="item"><a href="http://www.percona.com/prices/mysql-support/">MySQL Support Prices</a></div> |
426 | - <div class="item"><a href="http://www.percona.com/mysql-support/policies/">MySQL Support Policies</a></div> |
427 | - <div class="item"><a href="http://www.percona.com/mysql-support/consulting-vs-support/">Consulting vs. Support</a></div> |
428 | - <div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div> |
429 | - |
430 | - </div> |
431 | - <div class="navi-dropdown-footer"><!-- //--></div> |
432 | - </div> |
433 | - <div class="navi-dropdown" id="navi-dropdown-training"> |
434 | - <div class="navi-dropdown-header-l"><!-- //--></div> |
435 | - <div class="navi-dropdown-content"> |
436 | - <div class="item"><a href="http://www.percona.com/training/">MySQL Training Overview</a></div> |
437 | - <div class="item"><a href="http://www.percona.com/prices/training/">MySQL Training Prices</a></div> |
438 | - <div class="item"><a href="http://www.percona.com/training/classes/dba/">MySQL DBA Training</a></div> |
439 | - <div class="item"><a href="http://www.percona.com/training/classes/developers/">MySQL Developer Training</a></div> |
440 | - <div class="item"><a href="http://www.percona.com/training/classes/operations/">MySQL Operations Training</a></div> |
441 | - <div class="item"><a href="http://www.percona.com/training/classes/innodb/">InnoDB & XtraDB Training</a></div> |
442 | - |
443 | - <div class="item"><a href="http://www.percona.com/training/classes/custom-onsite/">Custom Onsite Training</a></div> |
444 | - </div> |
445 | - <div class="navi-dropdown-footer"><!-- //--></div> |
446 | - </div> |
447 | - <div class="navi-dropdown" id="navi-dropdown-development"> |
448 | - <div class="navi-dropdown-header-l"><!-- //--></div> |
449 | - <div class="navi-dropdown-content"> |
450 | - <div class="item"><a href="http://www.percona.com/development/mysql/">MySQL Development Overview</a></div> |
451 | - <div class="item"><a href="http://www.percona.com/development/prices/">Custom Development Prices</a></div> |
452 | - <div class="item"><a href="http://www.percona.com/development/maintenance/">MySQL Support Overview</a></div> |
453 | - <div class="item"><a href="http://www.percona.com/development/benchmarking/">Custom Product Evaluation</a></div> |
454 | - <div class="item"><a href="http://www.percona.com/development/maatkit/">Custom Maatkit Development</a></div> |
455 | - |
456 | - <div class="item"><a href="http://www.percona.com/development/custom-tools/">Custom Tools Development</a></div> |
457 | - </div> |
458 | - <div class="navi-dropdown-footer"><!-- //--></div> |
459 | - </div> |
460 | - <div class="navi-dropdown" id="navi-dropdown-software"> |
461 | - <div class="navi-dropdown-header-l"><!-- //--></div> |
462 | - <div class="navi-dropdown-content"> |
463 | - <div class="item"><a href="http://www.percona.com/software/">Percona Software for MySQL</a></div> |
464 | - <div class="item"><a href="http://www.percona.com/software/percona-server/">Percona Server with XtraDB</a></div> |
465 | - <div class="item"><a href="http://www.percona.com/software/percona-xtradb-cluster/">Percona XtraDB Cluster</a></div> |
466 | - <div class="item"><a href="http://www.percona.com/software/percona-xtrabackup/">Percona XtraBackup</a></div> |
467 | - <div class="item"><a href="http://www.percona.com/software/mysql-innodb-data-recovery-tools/">Data Recovery Toolkit</a></div> |
468 | - |
469 | - <div class="item"><a href="http://www.percona.com/software/percona-xtradb/">Percona XtraDB</a></div> |
470 | - <div class="item"><a href="http://www.percona.com/software/percona-toolkit/">Percona Toolkit</a></div> |
471 | - <div class="item"><a href="http://www.percona.com/prices/software/">Software Prices</a></div> |
472 | - <div class="item"><a href="http://www.percona.com/downloads/">Downloads</a></div> |
473 | - <div class="item"><a href="http://www.percona.com/software/repositories/">Repositories</a></div> |
474 | - <div class="item"><a href="http://www.percona.com/software/documentation/">Documentation</a></div> |
475 | - <div class="item"><a href="http://forum.percona.com">Forum</a></div> |
476 | - <div class="item"><a href="http://groups.google.com/group/percona-discussion">Google Discussion</a></div> |
477 | - <div class="item"><a href="https://launchpad.net/percona-server">Launchpad</a></div> |
478 | - |
479 | - </div> |
480 | - <div class="navi-dropdown-footer"><!-- //--></div> |
481 | - </div> |
482 | - <div class="navi-dropdown" id="navi-dropdown-events"> |
483 | - <div class="navi-dropdown-header-r"><!-- //--></div> |
484 | - <div class="navi-dropdown-content"> |
485 | - <div class="item"><a href="http://www.percona.com/live/mysql-conference-2012/">MySQL Conference & Expo 2012</a></div> |
486 | - <div class="item"><a href="http://www.percona.com/live/">Previous Percona Live Events</a></div> |
487 | - </div> |
488 | - <div class="navi-dropdown-footer"><!-- //--></div> |
489 | - </div> |
490 | - |
491 | - <div class="navi-dropdown" id="navi-dropdown-contact"> |
492 | - <div class="navi-dropdown-header-r"><!-- //--></div> |
493 | - <div class="navi-dropdown-content"> |
494 | - <div class="item"><a href="http://www.percona.com/contact/24x7-emergency/">24×7 Emergency</a></div> |
495 | - <div class="item"><a href="http://www.percona.com/contact/sales/">Sales & General Inquiries</a></div> |
496 | - <div class="item"><a href="http://www.percona.com/contact/billing/">Billing Inquiries</a></div> |
497 | - <div class="item"><a href="https://customers.percona.com">Customer Portal Login</a></div> |
498 | - <div class="item"><a href="http://www.percona.com/contact/phone-directory/">Phone Directory</a></div> |
499 | - <div class="item"><a href="http://www.percona.com/subscribe/">Subscribe to Newsletter</a></div> |
500 | - |
501 | - </div> |
502 | - <div class="navi-dropdown-footer"><!-- //--></div> |
503 | - </div> |
504 | - <div id="search-dropdown" class="search-dropdown"> |
505 | - <div class="search-dropdown-header"><!-- //--></div> |
506 | - <div class="search-dropdown-content"> |
507 | - <div class="search-info">Search Percona.com:</div> |
508 | - <form method="get" action="http://search.percona.com/search/" id="search-form"> |
509 | - <div class="form"><input type="text" id="search-input" name="q" maxlength="100"></div> |
510 | - </form> |
511 | - </div> |
512 | - <div class="search-dropdown-footer"><!-- //--></div> |
513 | - </div> |
514 | -</div> |
515 | -<div id="stats"> |
516 | -<!-- GA //--> |
517 | - <script src="http://www.percona.com/static/js/urchin.js" type="text/javascript"></script> |
518 | - <script type="text/javascript"> |
519 | - _uacct = "UA-343802-3"; |
520 | - urchinTracker(); |
521 | - </script> |
522 | -<!-- /GA //--> |
523 | -<!-- NAVI //--> |
524 | -<script type="text/javascript">//<![CDATA[ |
525 | -var navi = [{id:"about-us", direction: "l"},{id:"mysql-consulting", direction: "l"},{id:"support", direction: "l"},{id:"training", direction: "l"},{id:"development", direction: "l"},{id:"software", direction: "l"},{id:"events", direction: "r"},{id:"contact", direction: "r"}]; |
526 | -for(var i = 0, c = navi.length; i < c; i++) { |
527 | -window.jQuery('#navilink-a-' + navi[i].id).bind('mouseover',{id: navi[i].id, direction:navi[i].direction}, function(e) { NAVI.Open(e.data.id, e.data.direction); } ); |
528 | -} |
529 | -window.jQuery('#search-form').bind('submit', function() { window.location.href = jQuery('#search-form').attr('action') + jQuery('#search-input').val(); return false; }); |
530 | -//]]></script> |
531 | -<!-- /NAVI //--> |
532 | -<script type="text/javascript"> |
533 | -//<![CDATA[ |
534 | -Percona.host = 'www.percona.com'; |
535 | -Percona.getRecentServerVersion('#recentServerVersion'); |
536 | -//]]> |
537 | -</script> |
538 | -</div> |
539 | - </body> |
540 | -</html> |
541 | - |
542 | - |
543 | - |
544 | -{% if theme_collapsiblesidebar|tobool %} |
545 | -{% set script_files = script_files + ['_static/sidebar.js'] %} |
546 | -{% endif %} |
547 | |
548 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html' |
549 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html 2011-10-25 10:51:19 +0000 |
550 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/searchbox.html 1970-01-01 00:00:00 +0000 |
551 | @@ -1,22 +0,0 @@ |
552 | -{# |
553 | - basic/searchbox.html |
554 | - ~~~~~~~~~~~~~~~~~~~~ |
555 | - |
556 | - Sphinx sidebar template: quick search box. |
557 | - |
558 | - :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. |
559 | - :license: BSD, see LICENSE for details. |
560 | -#} |
561 | -{%- if pagename != "search" %} |
562 | -<div id="searchbox" style="display: none; padding: 3px;"> |
563 | - <h3>{{ _('Quick search') }}</h3> |
564 | - <form class="search" action="{{ pathto('search') }}" method="get"> |
565 | - <input type="text" name="q" size="18" /> |
566 | - <input type="submit" value="{{ _('Go') }}" /> |
567 | - <input type="hidden" name="check_keywords" value="yes" /> |
568 | - <input type="hidden" name="area" value="default" /> |
569 | - </form> |
570 | - |
571 | -</div> |
572 | -<script type="text/javascript">$('#searchbox').show(0);</script> |
573 | -{%- endif %} |
574 | |
575 | === removed directory 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static' |
576 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t' |
577 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t 2011-10-25 10:51:19 +0000 |
578 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/default.css_t 1970-01-01 00:00:00 +0000 |
579 | @@ -1,469 +0,0 @@ |
580 | -/* |
581 | - * default.css_t |
582 | - * ~~~~~~~~~~~~~ |
583 | - * |
584 | - * Sphinx stylesheet -- default theme. |
585 | - * |
586 | - * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. |
587 | - * :license: BSD, see LICENSE for details. |
588 | - * |
589 | - */ |
590 | - |
591 | -@import url("basic.css"); |
592 | - |
593 | -/* -- page layout ----------------------------------------------------------- */ |
594 | - |
595 | -body { |
596 | - font-family: Arial,Helvetica,sans-serif; |
597 | - font-size: 14px; |
598 | - background-color: #fff; |
599 | - color: #333333; |
600 | - line-height: 20px; |
601 | - margin: 0; |
602 | - padding: 0; |
603 | - |
604 | -} |
605 | - |
606 | -div.document { |
607 | - background-color: #fff; |
608 | - margin: 0 auto; |
609 | - overflow: hidden; |
610 | - padding: 30px 0; |
611 | - width: 960px; |
612 | -} |
613 | - |
614 | -div.documentwrapper { |
615 | - /* float: left; */ |
616 | - /* width: 100%; */ |
617 | - |
618 | -} |
619 | - |
620 | -div.bodywrapper { |
621 | - margin: 10 0 0 0px; |
622 | - width: 660px; |
623 | - float:right; |
624 | -} |
625 | - |
626 | -div.body { |
627 | - background-color: #fff; |
628 | - color: #333333; |
629 | - padding: 0 0 20px; |
630 | -} |
631 | - |
632 | -{%- if theme_rightsidebar|tobool %} |
633 | -div.bodywrapper { |
634 | - margin: 0 {{ theme_sidebarwidth }}px 0 0; |
635 | -} |
636 | -{%- endif %} |
637 | - |
638 | -div.footer { |
639 | - /* color: {{ theme_footertextcolor }}; */ |
640 | - /* width: 100%; */ |
641 | - /* padding: 9px 0 9px 0; */ |
642 | - /* text-align: center; */ |
643 | - /* font-size: 75%; */ |
644 | - font: 80% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif; |
645 | - background: none repeat scroll 0 0 #333333; |
646 | - border-top: 2px solid #D95200; |
647 | - overflow: hidden; |
648 | -} |
649 | - |
650 | -div.footer a { |
651 | - color: {{ theme_footertextcolor }}; |
652 | - text-decoration: underline; |
653 | -} |
654 | - |
655 | -div.related { |
656 | - background-color: #ccc; |
657 | - line-height: 30px; |
658 | - color: #333; |
659 | - background: none repeat scroll 0 0 #F8F8F8; |
660 | - border: 1px solid #E0E0E0; |
661 | - clear: both; |
662 | - padding: 10px; |
663 | - width: 635px; |
664 | - margin-bottom: 5px; |
665 | -} |
666 | - |
667 | -div.related a { |
668 | - color: #999; |
669 | -} |
670 | - |
671 | -div.sphinxsidebar { |
672 | - margin-left: 0px; |
673 | - margin-right: 30px; |
674 | - color: #eee; |
675 | - font-family: Arial,Helvetica,sans-serif; |
676 | - width: 260px; |
677 | - {%- if theme_stickysidebar|tobool %} |
678 | - top: 30px; |
679 | - bottom: 0; |
680 | - margin: 0; |
681 | - position: fixed; |
682 | - overflow: auto; |
683 | - height: auto; |
684 | - {%- endif %} |
685 | - {%- if theme_rightsidebar|tobool %} |
686 | - float: right; |
687 | - {%- if theme_stickysidebar|tobool %} |
688 | - right: 0; |
689 | - {%- endif %} |
690 | - {%- endif %} |
691 | -} |
692 | - |
693 | -{%- if theme_stickysidebar|tobool %} |
694 | -/* this is nice, but it it leads to hidden headings when jumping |
695 | - to an anchor */ |
696 | -/* |
697 | -div.related { |
698 | - position: fixed; |
699 | -} |
700 | - |
701 | -div.documentwrapper { |
702 | - margin-top: 30px; |
703 | -} |
704 | -*/ |
705 | -{%- endif %} |
706 | - |
707 | -div.sphinxsidebar h3 { |
708 | - /* font-family: {{ theme_headfont }}; */ |
709 | - color: #999; |
710 | - font-size: 18px; |
711 | - line-height: 15px; |
712 | - font-weight: 400; |
713 | - margin-left: 5px; |
714 | - padding: 0; |
715 | -} |
716 | - |
717 | -div.sphinxsidebar h3 a { |
718 | - color: #333; |
719 | -} |
720 | - |
721 | -div.sphinxsidebar a:hover { |
722 | - /* color: #333; */ |
723 | -} |
724 | - |
725 | -div.sphinxsidebar h4 { |
726 | - /* font-family: {{ theme_headfont }}; */ |
727 | - color: #666; |
728 | - font-size: 18px; |
729 | - font-weight: normal; |
730 | - margin: 5px 0 0 5px; |
731 | - padding: 0; |
732 | -} |
733 | - |
734 | -div.sphinxsidebar p { |
735 | - color: #333; |
736 | - margin-bottom: 5px; |
737 | - margin-left: 5px; |
738 | -} |
739 | - |
740 | -div.sphinxsidebar p.topless { |
741 | - margin: 5px 10px 10px 10px; |
742 | -} |
743 | - |
744 | -div.sphinxsidebar ul { |
745 | - margin: 10px; |
746 | - padding-left: 5px; |
747 | - color: #333; |
748 | -} |
749 | - |
750 | -div.sphinxsidebar a { |
751 | - color: #D12907; |
752 | -} |
753 | - |
754 | -div.sphinxsidebar input { |
755 | - border: 1px solid #999; |
756 | - font-family: sans-serif; |
757 | - font-size: 1em; |
758 | -} |
759 | - |
760 | -{% if theme_collapsiblesidebar|tobool %} |
761 | -/* for collapsible sidebar */ |
762 | -div#sidebarbutton { |
763 | - background-color: {{ theme_sidebarbtncolor }}; |
764 | -} |
765 | -{% endif %} |
766 | - |
767 | -/* -- hyperlink styles ------------------------------------------------------ */ |
768 | - |
769 | -a { |
770 | - color: #D12907; |
771 | - text-decoration: underline; |
772 | - border: medium none; |
773 | - cursor: pointer; |
774 | -} |
775 | - |
776 | -a:visited { |
777 | - color: #D12907; |
778 | - text-decoration: underline; |
779 | -} |
780 | - |
781 | -a:hover { |
782 | - color: #D12907; |
783 | - text-decoration: underline; |
784 | -} |
785 | - |
786 | -{% if theme_externalrefs|tobool %} |
787 | -a.external { |
788 | - text-decoration: none; |
789 | - border-bottom: 1px dashed {{ theme_linkcolor }}; |
790 | -} |
791 | - |
792 | -a.external:hover { |
793 | - text-decoration: none; |
794 | - border-bottom: none; |
795 | -} |
796 | - |
797 | -a.external:visited { |
798 | - text-decoration: none; |
799 | - border-bottom: 1px dashed {{ theme_visitedlinkcolor }}; |
800 | -} |
801 | -{% endif %} |
802 | - |
803 | -/* -- body styles ----------------------------------------------------------- */ |
804 | - |
805 | -div.body h1, |
806 | -div.body h2, |
807 | -div.body h3, |
808 | -div.body h4, |
809 | -div.body h5, |
810 | -div.body h6 { |
811 | - font-family: Arial,Helvetica,sans-serif; |
812 | - background-color: #fff; |
813 | - font-weight: 400; |
814 | - |
815 | - /* border-bottom: 1px solid #ccc; */ |
816 | - /* margin: 20px -20px 10px -20px; */ |
817 | - /* padding: 0; */ |
818 | - /* padding: 3px 0 3px 10px; */ |
819 | - text-decoration: none !important; |
820 | - |
821 | - border-bottom: 1px solid #E0E0E0; |
822 | - font-size: 20px; |
823 | - line-height: 20px; |
824 | - margin: 30px 0 15px; |
825 | - padding: 0 0 3px; |
826 | - color: #000; |
827 | -} |
828 | - |
829 | -div.body h1 { |
830 | - font-size: 32px; |
831 | - color: #D12907; |
832 | - line-height: 40px; |
833 | - margin: 10px 0 20px 0; |
834 | - text-decoration: none !important; |
835 | - border-bottom: none; |
836 | - margin-top: 35px; |
837 | -} |
838 | - |
839 | -div.body h2 { font-size: 150%; } |
840 | -div.body h3 { font-size: 140%; } |
841 | -div.body h4 { font-size: 120%; } |
842 | -div.body h5 { font-size: 110%; } |
843 | -div.body h6 { font-size: 100%; } |
844 | - |
845 | -a.headerlink { |
846 | - color: {{ theme_headlinkcolor }}; |
847 | - font-size: 0.8em; |
848 | - padding: 0 4px 0 4px; |
849 | - text-decoration: none; |
850 | -} |
851 | - |
852 | -a.headerlink:hover { |
853 | - background-color: {{ theme_headlinkcolor }}; |
854 | - color: white; |
855 | -} |
856 | - |
857 | -div.body dd, div.body li { |
858 | - text-align: justify; |
859 | -} |
860 | - |
861 | -div.body dt { |
862 | - list-style-type: square; |
863 | - /* margin: 8px 0 8px 30px; */ |
864 | - padding: 0 4px 0 5px; |
865 | - |
866 | -} |
867 | - |
868 | -div.body p { |
869 | - text-align: justify; |
870 | -/* line-height: 130%;*/ |
871 | - margin: 10px 0; |
872 | -} |
873 | - |
874 | -/* div.body ul, */ |
875 | -div.body li { |
876 | - list-style-type: square; |
877 | - margin: 8px 0 8px 30px; |
878 | - padding: 0 4px 0 5px; |
879 | -} |
880 | - |
881 | -.reference em { |
882 | - font-style: normal; |
883 | -} |
884 | - |
885 | -.std-term { |
886 | - font-style: normal; |
887 | - font-weight: 400; |
888 | - color: #FF7400 |
889 | -} |
890 | - |
891 | -div.admonition p.admonition-title + p { |
892 | - display: inline; |
893 | -} |
894 | - |
895 | -div.admonition p { |
896 | - margin-bottom: 5px; |
897 | -} |
898 | - |
899 | -div.admonition pre { |
900 | - margin-bottom: 5px; |
901 | -} |
902 | - |
903 | -div.admonition ul, div.admonition ol { |
904 | - margin-bottom: 5px; |
905 | -} |
906 | - |
907 | -div.note { |
908 | - background-color: #eee; |
909 | - border: 1px solid #ccc; |
910 | -} |
911 | - |
912 | -div.seealso { |
913 | - background-color: #ffc; |
914 | - border: 1px solid #ff6; |
915 | -} |
916 | - |
917 | -div.topic { |
918 | - background-color: #eee; |
919 | -} |
920 | - |
921 | -div.warning { |
922 | - background-color: #ffe4e4; |
923 | - border: 1px solid #f66; |
924 | -} |
925 | - |
926 | -p.admonition-title { |
927 | - display: inline; |
928 | -} |
929 | - |
930 | -p.admonition-title:after { |
931 | - content: ":"; |
932 | -} |
933 | - |
934 | -pre { |
935 | - padding: 10px; |
936 | - background-color: #F0E6D9/* {{ theme_codebgcolor }} */; |
937 | - color: {{ theme_codetextcolor }}; |
938 | - line-height: 120%; |
939 | - border: 1px dashed #ED9821; |
940 | - font-size: 80%; |
941 | - overflow: auto; |
942 | - /* border-left: none; */ |
943 | - /* border-right: none; */ |
944 | -} |
945 | - |
946 | -tt { |
947 | -/* background-color: #ecf0f3; |
948 | - padding: 0 1px 0 1px; |
949 | - font-size: 0.95em;*/ |
950 | - font-weight: 400; |
951 | -} |
952 | - |
953 | -div.body td { |
954 | - text-align: none; |
955 | -} |
956 | - |
957 | -table.docutils th { |
958 | - background-color: #DEE7EC; |
959 | - border: 1px solid #8CACBB; |
960 | - padding: 3px; |
961 | - text-align: center; |
962 | - font-style: normal; |
963 | - font-weight: 400; |
964 | -} |
965 | - |
966 | -table.docutils td { |
967 | - border: 1px solid #8CACBB; |
968 | - padding: 3px; |
969 | - line-height: 16px; |
970 | - vertical-align: middle; |
971 | -} |
972 | - |
973 | -.warning tt { |
974 | - background: #efc2c2; |
975 | -} |
976 | - |
977 | -.note tt { |
978 | - background: #d6d6d6; |
979 | -} |
980 | - |
981 | -.viewcode-back { |
982 | - font-family: {{ theme_bodyfont }}; |
983 | -} |
984 | - |
985 | -div.viewcode-block:target { |
986 | - background-color: #f4debf; |
987 | - border-top: 1px solid #ac9; |
988 | - border-bottom: 1px solid #ac9; |
989 | -} |
990 | - |
991 | -.file-bugs { |
992 | - background: none repeat scroll 0 0 #E8E8E8; |
993 | - border: 1px solid #E0E0E0; |
994 | - clear: both; |
995 | - color: #333333; |
996 | - padding: 10px; |
997 | - text-align: center; |
998 | - font-size: 90%; |
999 | -} |
1000 | - |
1001 | -div.footer .footer { |
1002 | - margin: 0 auto; |
1003 | - overflow: hidden; |
1004 | - padding: 10px 0; |
1005 | - width: 960px; |
1006 | - border-top: none; |
1007 | -} |
1008 | - |
1009 | -div.footer .footer .logo { |
1010 | - float: left; |
1011 | - overflow: hidden; |
1012 | - padding: 17px 0 0; |
1013 | -} |
1014 | - |
1015 | -div.footer .footer .text { |
1016 | - color: #E0E0E0; |
1017 | - float: right; |
1018 | - font-family: Arial,Helvetica,sans-serif; |
1019 | - font-size: 11px; |
1020 | - line-height: 15px; |
1021 | - overflow: hidden; |
1022 | - text-align: right; |
1023 | -} |
1024 | - |
1025 | -div.license { |
1026 | - font-size: 80%; |
1027 | - /* padding: 0.5em; */ |
1028 | - text-align: center; |
1029 | - margin: 13px 0 -15px; |
1030 | -} |
1031 | - |
1032 | -#sidenavi.noborder { |
1033 | - border-right: medium none; |
1034 | - border-top: medium none; |
1035 | - margin: 0; |
1036 | -} |
1037 | - |
1038 | -#sidenavi { |
1039 | - color: #333333; |
1040 | - /* float: left; */ |
1041 | - font-family: Arial,Helvetica,sans-serif; |
1042 | - font-size: 18px; |
1043 | - line-height: 25px; |
1044 | - overflow: hidden; |
1045 | - padding: 10px 0 8px 0px; |
1046 | - width: 255px; |
1047 | -} |
1048 | - |
1049 | |
1050 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/email-small.png' |
1051 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/email-small.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/email-small.png 1970-01-01 00:00:00 +0000 differ |
1052 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js' |
1053 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js 2011-10-25 10:51:19 +0000 |
1054 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/jquery.min.js 1970-01-01 00:00:00 +0000 |
1055 | @@ -1,154 +0,0 @@ |
1056 | -/*! |
1057 | - * jQuery JavaScript Library v1.4.2 |
1058 | - * http://jquery.com/ |
1059 | - * |
1060 | - * Copyright 2010, John Resig |
1061 | - * Dual licensed under the MIT or GPL Version 2 licenses. |
1062 | - * http://jquery.org/license |
1063 | - * |
1064 | - * Includes Sizzle.js |
1065 | - * http://sizzlejs.com/ |
1066 | - * Copyright 2010, The Dojo Foundation |
1067 | - * Released under the MIT, BSD, and GPL Licenses. |
1068 | - * |
1069 | - * Date: Sat Feb 13 22:33:48 2010 -0500 |
1070 | - */ |
1071 | -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i? |
1072 | -e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r= |
1073 | -j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g, |
1074 | -"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e= |
1075 | -true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, |
1076 | -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& |
1077 | -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, |
1078 | -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== |
1079 | -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, |
1080 | -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)|| |
1081 | -c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded", |
1082 | -L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype, |
1083 | -"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+ |
1084 | -a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f], |
1085 | -d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]=== |
1086 | -a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&& |
1087 | -!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari= |
1088 | -true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>"; |
1089 | -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, |
1090 | -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= |
1091 | -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= |
1092 | -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, |
1093 | -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; |
1094 | -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, |
1095 | -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== |
1096 | -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, |
1097 | -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ", |
1098 | -i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ", |
1099 | -" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className= |
1100 | -this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i= |
1101 | -e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= |
1102 | -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); |
1103 | -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, |
1104 | -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); |
1105 | -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), |
1106 | -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!= |
1107 | -null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type= |
1108 | -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& |
1109 | -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; |
1110 | -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), |
1111 | -fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop|| |
1112 | -d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this, |
1113 | -"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent= |
1114 | -a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y, |
1115 | -isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit= |
1116 | -{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}}; |
1117 | -if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", |
1118 | -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, |
1119 | -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, |
1120 | -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&& |
1121 | -!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}}, |
1122 | -toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector, |
1123 | -u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "), |
1124 | -function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q]; |
1125 | -if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, |
1126 | -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); |
1127 | -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| |
1128 | -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[]; |
1129 | -for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length- |
1130 | -1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, |
1131 | -CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}}, |
1132 | -relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]= |
1133 | -l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[]; |
1134 | -h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, |
1135 | -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, |
1136 | -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, |
1137 | -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, |
1138 | -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= |
1139 | -h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m= |
1140 | -m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== |
1141 | -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, |
1142 | -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition|| |
1143 | -!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m= |
1144 | -h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& |
1145 | -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>"; |
1146 | -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); |
1147 | -(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: |
1148 | -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/, |
1149 | -gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length; |
1150 | -c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= |
1151 | -{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== |
1152 | -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", |
1153 | -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? |
1154 | -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== |
1155 | -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)? |
1156 | -a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= |
1157 | -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, |
1158 | -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, |
1159 | -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, |
1160 | -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); |
1161 | -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, |
1162 | -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&& |
1163 | -this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]|| |
1164 | -u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length=== |
1165 | -1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); |
1166 | -return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", |
1167 | -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= |
1168 | -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? |
1169 | -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= |
1170 | -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= |
1171 | -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, |
1172 | -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= |
1173 | -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= |
1174 | -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== |
1175 | -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, |
1176 | -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), |
1177 | -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, |
1178 | -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& |
1179 | -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? |
1180 | -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== |
1181 | -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= |
1182 | -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", |
1183 | -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| |
1184 | -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); |
1185 | -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== |
1186 | -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== |
1187 | -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; |
1188 | -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay"); |
1189 | -this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a], |
1190 | -"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)}, |
1191 | -animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing= |
1192 | -j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]); |
1193 | -this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== |
1194 | -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| |
1195 | -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; |
1196 | -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= |
1197 | -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, |
1198 | -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length|| |
1199 | -c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement? |
1200 | -function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b= |
1201 | -this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle; |
1202 | -k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&& |
1203 | -f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>"; |
1204 | -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); |
1205 | -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, |
1206 | -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- |
1207 | -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": |
1208 | -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in |
1209 | -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); |
1210 | |
1211 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css' |
1212 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css 2012-03-26 17:43:02 +0000 |
1213 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.css 1970-01-01 00:00:00 +0000 |
1214 | @@ -1,271 +0,0 @@ |
1215 | -@charset "utf-8"; |
1216 | -/** |
1217 | - * Support ribbon |
1218 | - */ |
1219 | -#support-ribbon.vertical |
1220 | -{ |
1221 | - position: fixed; |
1222 | - right:-3px; |
1223 | - top:145px; |
1224 | - color: #ffffff; |
1225 | - width: 153px; |
1226 | - height: 130px; |
1227 | - z-index: 1; |
1228 | -} |
1229 | -#support-ribbon.vertical #support-suboptions { |
1230 | - display: block; |
1231 | - position:relative; |
1232 | - right:0px; |
1233 | - top: 0px; |
1234 | - width:155px; |
1235 | - border-bottom: 0; |
1236 | - z-index: -10; |
1237 | - |
1238 | -} |
1239 | -#support-ribbon.vertical #support-suboptions a { |
1240 | - margin-bottom:5px; |
1241 | - display: block; |
1242 | - opacity: 0.9; |
1243 | - text-align: center; |
1244 | - color: #fff; |
1245 | - height: 33px; |
1246 | - line-height:33px; |
1247 | -} |
1248 | -#support-suboptions a:hover { |
1249 | - opacity: 1; |
1250 | -} |
1251 | -#support-suboptions a span { display:none;} |
1252 | -/** |
1253 | -horizontal ribbon |
1254 | -*/ |
1255 | -#support-ribbon.horizontal |
1256 | -{ |
1257 | - position: fixed; |
1258 | - bottom:0; |
1259 | - left:0; |
1260 | - color: #ffffff; |
1261 | - height: 38px; |
1262 | - z-index: 1; |
1263 | -} |
1264 | - #support-ribbon.horizontal #support-suboptions { |
1265 | - |
1266 | - position:relative; |
1267 | - top: 0px; |
1268 | - border-bottom: 0; |
1269 | - z-index: -10; |
1270 | - margin:auto; |
1271 | -} |
1272 | -#support-ribbon.horizontal #support-suboptions li { |
1273 | - float: left; |
1274 | - list-style-type: none; |
1275 | -} |
1276 | -#support-ribbon.horizontal #support-suboptions li a { |
1277 | - margin-bottom:5px; |
1278 | - display: block; |
1279 | - opacity: 0.9; |
1280 | - text-align: center; |
1281 | - color: #fff; |
1282 | - height: 38px; |
1283 | - line-height:38px; |
1284 | - width: 145px; |
1285 | - margin-right:5px; |
1286 | -} |
1287 | - |
1288 | -html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-weight:inherit;font-size:100%;}legend{color:#000;}del,ins{text-decoration:none;}body,html{height:100%;margin:0;padding:0}form{display:inline}a{border:none;cursor:pointer}img{border:none}div,img{behavior:url(/static/css/iepngfix.htc)}em{font-style:italic;}del{text-decoration:line-through;}.hidden{display:none}#header{background:#333;height:95px;overflow:hidden;zoom:1}#header .header{height:95px;margin:0 auto;overflow:hidden;width:960px;zoom:1}#header .header .logo{float:left;overflow:hidden;padding:20px 0;width:240px;zoom:1}#header .header .logo{overflow:hidden;zoom:1;float:left;width:240px;padding:20px 0px;}#header .header .right{overflow:hidden;zoom:1;float:left;width:720px;height:35px;padding:30px 0px;}#header .header .right .searchlink{overflow:hidden;zoom:1;width:35px;height:35px;float:right;padding:0px 0px 0px 10px;}#header .header .right .navicontainer{overflow:hidden;zoom:1;float:right;height:35px;background:#ffffff url(ui-navi-l.png) top left no-repeat;}#header .header .right .navi{overflow:hidden;zoom:1;height:27px;padding:4px 10px;background:url(ui-navi-r.png) top right no-repeat;}#header .header .right .navicontainer .navi span{overflow:hidden;zoom:1;height:27px;float:left;margin:0px;}#header .header .right .navicontainer .navi span:hover{background:#f0f0f0 url(ui-navi-hover-l.png) top left no-repeat;}#header .header .right .navicontainer .navi span.selected,#header .header .right .navicontainer .navi span.selected:hover{background:#d5390b url(ui-navi-sel-l.png) top left no-repeat;}#header .header .right .navicontainer .navi span a,#header .header .right .navicontainer .navi span a:visited{display:block;padding:6px 10px 4px 10px;height:17px;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:14px;color:#000000;text-decoration:none;}#header .header .right .navicontainer .navi span a:hover{background:url(ui-navi-hover-r.png) top right no-repeat;}#header .header .right .navicontainer .navi span.selected a.selected,#header .header .right .navicontainer .navi span.selected a.selected:visited,#header .header .right .navicontainer .navi span.selected a.selected:hover{background:url(ui-navi-sel-r.png) top right no-repeat;color:#ffffff;}#slogan{overflow:hidden;zoom:1;height:125px;background:#d24300 urk(ui-orange-front.png) bottom center no-repeat;text-align:center;}#stripe{overflow:hidden;zoom:1;height:20px;background:#d24300 url(ui-orange-content.png) top center no-repeat;}#footer{overflow:hidden;zoom:1;background:#333333;border-top:2px #d95200 solid;}#footer .footer{overflow:hidden;zoom:1;width:960px;margin:0px auto;padding:10px 0px;}#footer .footer .logo{overflow:hidden;zoom:1;float:left;padding:17px 0px 0px 0px;}#footer .footer .text{overflow:hidden;zoom:1;float:right;text-align:right;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:15px;color:#e0e0e0;}#footer .footer .text a,#footer .footer .text a:visited{color:#e0e0e0;text-decoration:none;}#footer .footer .text a:hover{color:#ffffff;text-decoration:underline;}div.navi-dropdown{display:none;position:absolute;overflow:hidden;zoom:1;width:255px;z-index:900;}div.navi-dropdown .navi-dropdown-header-l{overflow:hidden;zoom:1;width:255px;height:20px;background:url(ui-dropdown-header-l.png) top left no-repeat;}div.navi-dropdown .navi-dropdown-header-r{overflow:hidden;zoom:1;width:255px;height:20px;background:url(ui-dropdown-header-r.png) top left no-repeat;}div.navi-dropdown .navi-dropdown-content{overflow:hidden;zoom:1;width:225px;padding:0px 15px 5px 15px;background:#ffffff url(ui-dropdown-bg.png) repeat-y;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:20px;color:#333333;}div.navi-dropdown .navi-dropdown-content .item{padding:3px 0px 1px 0px;}div.navi-dropdown .navi-dropdown-content a,div.navi-dropdown .navi-dropdown-content a:visited{display:block;color:#333333;text-decoration:none;}div.navi-dropdown .navi-dropdown-content a:hover{color:#d12907;text-decoration:underline;}div.navi-dropdown .navi-dropdown-footer{overflow:hidden;zoom:1;width:255px;height:10px;background:url(ui-dropdown-footer.png) top left no-repeat;}div.search-dropdown{display:none;position:absolute;overflow:hidden;zoom:1;width:255px;}div.search-dropdown .search-dropdown-header{overflow:hidden;zoom:1;width:255px;height:20px;background:url(ui-dropdown-header-search.png) top left no-repeat;}div.search-dropdown .search-dropdown-content{overflow:hidden;zoom:1;width:225px;padding:0px 15px 5px 15px;background:#ffffff url(ui-dropdown-bg.png) repeat-y;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:20px;color:#333333;}div.search-dropdown .search-dropdown-content .form{padding-top:2px;}div.search-dropdown .search-dropdown-content .form input{border:1px #c0c0c0 solid;padding:4px;width:210px;outline:none;}div.search-dropdown .search-dropdown-content .form input:focus{border:1px #707070 solid;outline:none;}div.search-dropdown .search-dropdown-footer{overflow:hidden;zoom:1;width:255px;height:10px;background:url(ui-dropdown-footer.png) top left no-repeat;}#sidenavi{overflow:hidden;zoom:1;float:left;width:260px;border-top:1px #e0e0e0 solid;border-right:1px #e0e0e0 solid;margin:0px 30px 0px 0px;padding:0px 0px 20px 0px;font-family:Arial,Helvetica,sans-serif;font-size:18px;line-height:25px;color:#333333;}#sidenavi.noborder{border-top:none;border-right:none;margin:0px 31px 0px 0px;}#sidenavi .sidebanner{border-left:1px #e0e0e0 solid;border-bottom:1px #e0e0e0 solid;text-align:center;padding:15px 10px;}#sidenavi.noborder .sidebanner{border-top:1px #e0e0e0 solid;border-right:1px #e0e0e0 solid;}#sidenavi .sidebanner .header{padding:0px 0px 10px 0px;line-height:18px;text-align:center;}#sidenavi .sidebanner .numbers{padding:0px 0px 0px 58px;background:url(phone.png) 5px center no-repeat;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;text-align:left;}#sidenavi #sidefloater{padding-top:10px;}#sidenavi .item{padding:10px 10px 8px 10px;}#sidenavi > .item.selected{background:url(ui-leftnavi-sel.png) top left no-repeat;}#sidenavi a,#sidenavi a:visited{display:block;color:#333333;text-decoration:none;}#sidenavi a:hover{color:#d12907;text-decoration:none;}#sidenavi > .item.selected > a,#sidenavi > .item.selected > a:visited{color:#d12907;text-decoration:none;}#sidenavi .sidesubnavi{overflow:hidden;zoom:1;font-family:Arial,Helvetica,sans-serif;font-size:13px;line-height:17px;color:#333333;}#sidenavi .sidesubnavi .subitem{padding:7px 10px 0px 10px;}#sidenavi .sidesubnavi .subitem.selected a,#sidenavi .sidesubnavi .subitem.selected a:visited{color:#d12907;text-decoration:none;}#contentcontainer{overflow:hidden;zoom:1;width:960px;padding:30px 0px;margin:0px auto;}#content{overflow:hidden;zoom:1;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:20px;color:#333333;}#content p{margin:10px 0px;}#content a,#content a:visited{color:#d12907;text-decoration:underline;}#content a:hover{color:#712000;text-decoration:underline;}#content h1{font-family:Arial,Helvetica,sans-serif;font-size:32px;line-height:40px;margin:5px 0px 20px 0px;color:#d12907;}#content h2{font-family:Arial,Helvetica,sans-serif;font-size:20px;line-height:20px;padding:0px 0px 3px 0px;margin:30px 0px 15px 0px;color:#000000;border-bottom:1px #e0e0e0 solid;}#content h3{font-family:Arial,Helvetica,sans-serif;font-weight:bold;font-size:16px;line-height:22px;margin:20px 0px 10px 0px;color:#000000;}#content h4{font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:14px;font-weight:bold;padding:5px 0px 0px 0px;margin:-16px 0px 20px 0px;color:#000000;border-top:1px #e0e0e0 solid;}#content h4 a,#content h4 a:visited{color:#000000;text-decoration:none;}#content h4 a:hover{color:#d12907;text-decoration:none;}#content dl dt{font-weight:bold;margin-top:10px;margin-bottom:10px;}#content dl dd{padding:0px 0px 0px 30px;}#content ul{list-style-type:square;padding:0px 0px 0px 30px;}#content ul li{list-style-type:square;margin:8px 0px;}#content ol{list-style-type:decimal;padding:0px 0px 0px 30px;}#content ol li{list-style-type:decimal;margin:8px 0px;}#content div.pagecontent{overflow:hidden;zoom:1;}div.contentbox{border:1px #e0e0e0 solid;}div.contentbox div.title{font-size:16px;line-height:20px;font-weight:bold;padding:8px 15px 2px 15px;background:url(ui-leftnavi-sel.png) repeat-x;}div.contentbox div.content{padding:15px;}div.frontpage-p{overflow:hidden;zoom:1;width:960px;margin:0px;margin-bottom:20px;padding:0px;}div.frontpage-p div.frontpage-p-container{overflow:hidden;zoom:1;width:960px;height:200px;padding-bottom:30px;z-index:100;}div.frontpage-p a.nivo-imageLink{position:absolute;top:0px;left:0px;width:960px;height:200px;border:0;padding:0;margin:0;z-index:20;display:none;}div.frontpage-p div.frontpage-p-container div.nivo-directionNav{width:1px;height:1px;display:none !important;z-index:18 !important;}div.frontpage-p div.frontpage-p-container div.nivo-controlNav{position:absolute;top:200px;width:960px;text-align:center;font-size:28px;line-height:25px;}div.frontpage-p div.frontpage-p-container div.nivo-controlNav a{padding:0px 3px;text-decoration:none !important;color:#919191 !important;}div.frontpage-p div.frontpage-p-container div.nivo-controlNav a.active{color:#d12907 !important;}div.frontpage-p div.frontpage-p-selector{overflow:hidden;zoom:1;height:20px;text-align:center;}div.frontpage-main{overflow:hidden;zoom:1;width:960px;margin:20px 0px;padding:0px;}div.frontpage-main div.frontpage-left{overflow:hidden;zoom:1;width:645px;float:left;padding:0px;}div.frontpage-boxes{overflow:hidden;zoom:1;width:645px;margin:25px 0px 0px 0px;padding:0px;}div.frontpage-boxes div.frontpage-boxes-selector{overflow:hidden;zoom:1;width:645px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item{overflow:hidden;zoom:1;width:160px;float:left;margin-left:-1px;border-top:1px #cccccc solid;border-left:1px #cccccc solid;border-right:1px #cccccc solid;border-bottom:1px #cccccc solid;text-align:center;margin-top:10px;padding:0px 0px 0px 0px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item:first-child{margin-left:0px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item.selected{background:url(ui-tab-bg.png) repeat-x;margin-top:0px;border-bottom:none;padding:5px 0px 6px 0px;}div.frontpage-boxes div.frontpage-boxes-selector div.frontpage-boxes-selector-item a{display:block;font-size:20px;line-height:20px;color:#444444 !important;text-decoration:none !important;padding:9px 0px 8px 0px;}div.frontpage-boxes div.frontpage-boxes-container{overflow:hidden;zoom:1;width:603px;height:150px;padding:20px;border-left:1px #cccccc solid;border-right:1px #cccccc solid;border-bottom:1px #cccccc solid;}div.frontpage-boxes div.frontpage-boxes-container div.frontpage-box img{padding:0px 15px 15px 5px;}div.frontpage-main div.frontpage-right{overflow:hidden;zoom:1;width:295px;float:right;margin-left:20px;padding:0px;}div.frontpage-block{overflow:hidden;zoom:1;border:1px #cccccc solid;width:288px;margin:0 0 20px 5px;}div.frontpage-block div.header{text-align:left;padding:15px 15px 0px 15px;background:url(ui-tab-bg.png) repeat-x;font-family:Arial,Helvetica,sans-serif;font-size:20px;line-height:20px;}div.frontpage-block div.content{overflow:hidden;zoom:1;padding:10px 15px 15px 15px;}div.frontpage-block div.content div.call-us{font-size:12px;line-height:17px;}div.frontpage-block div.content div.training{padding:20px;overflow:hidden;zoom:1;font-size:12px;line-height:17px;}div.frontpage-block div.content div.training ul.training-short-list{list-style-type:none !important;margin:0 !important;padding:0 !important;}div.frontpage-block div.content div.training ul.training-short-list li{list-style-type:none !important;}div.frontpage-block div.content div.more{overflow:hidden;zoom:1;text-align:right;padding:15px 0px 0px 0px;font-size:12px;line-height:17px;}.our-team-page h2{clear:both;}div.our-team-item{overflow:hidden;zoom:1;width:162px;margin-left:5px;height:230px;float:left;}div.our-team-item .img img{border:1px #e0e0e0 solid;padding:2px;}table.phonetable{margin-top:1em;border-collapse:collapse;}.phonetable{margin-left:2em;}table.phonetable th,table.phonetable tr{text-align:center;}table.phonetable th{border:1px #e0e0e0 solid;background:#f8f8f8;padding:7px;font-weight:bold;}table.phonetable td{border:1px #e0e0e0 solid;padding:7px;}table.phonetable .label{text-align:left;}table.phonetable td.label{padding-left:2em;}.form-item{clear:both;margin-top:1em;position:relative;}.form-item label{display:block;font-weight:bold;position:absolute;top:0;left:0;width:13em;}.form-required{color:#fa0;font-weight:bold;}.form-item .description{color:#888;font-size:0.85em;line-height:150%;position:relative;left:14em;}#edit-submitbutton{position:relative;left:12em;margin:1em 0;}.form-item input[type=text],.form-item select,.form-item textarea{border:1px solid #CCC;width:493px;position:relative;top:0;left:12em;}.form-item textarea{height:12em;padding:3px;}.form-item-spacer{padding-top:1em;}.form-item #captcha{position:relative;top:0;left:12em;}#edit-submitted-captcha{margin-top:0.5em;width:154px;}fieldset.form-item-set{border:1px solid #ccc;display:block;margin:12px 0;padding:12px;}fieldset.form-item-set legend{border:none;display:block;padding:0 2px;}div.error{background:#fff;border:solid 1px #c52020;color:#C52020;padding:5px;}div.messages{margin:5px 20px;font-size:11px;}div.messages ul,div.messages ul li{list-style-image:none;list-style-type:none;}div.messages ul li{padding:0 0 0.2em 0;}.form-item .error{background-color :#fdd;}#emergency-contacts .node-field-name{text-align:right;font-weight:bold;padding-right:1em;}#emergency-contacts .node-field-value-phone{font-weight:bold;color:#137F00;}#emergency-contacts .node-field-help{font-weight:bold;}#compact_footer{width:auto !important;}#compact_contentcontainer{overflow:hidden;zoom:1;width:auto;padding:30px 0px;margin:0px 20px;}.custlogo img{padding:20px;border:1px solid white;}.custlogo img:hover{border:1px solid gray;}table.formtable{border-collapse:collapse;}table.formtable th{font-weight:normal;white-space:nowrap;padding:4px 20px 4px 0px;}table.formtable td{padding:4px 0px 4px 0px;}table.formtable td input[type='text'],table.formtable td select{border:1px #e0e0e0 solid;padding:4px;width:400px;}table.formtable td.submit{padding:10px 0px 0px 0px;text-align:center;}table.datatable{margin-top:1em;border-collapse:collapse;}.datatable{margin-left:2em;}table.datatable th,table.datatable tr{text-align:center;}table.datatable th{border:1px #e0e0e0 solid;background:#f8f8f8;padding:7px;font-weight:bold;}table.datatable td{border:1px #e0e0e0 solid;padding:7px;}table.datatable .label{text-align:left;}table.datatable td.label{padding-left:2em;}.frontpage-sidebar .header{padding:0px 0px 10px 0px;font-size:18px;font-weight:normal;text-align:center;}.frontpage-sidebar .header.link{padding:13px 0px 10px 4px;text-align:left;}.frontpage-sidebar .header a,.frontpage-sidebar .header a:visited{color:#333333 !important;text-decoration:none !important;}.frontpage-sidebar .header a:hover{color:#d12907 !important;text-decoration:none !important;}.frontpage-sidebar .header.bloglink{font-size:16px;padding:0px 0px 10px 10px;text-align:center;}.frontpage-sidebar .header.blogheader{font-weight:normal;text-align:center;font-size:15px;padding:13px 10px 10px 0px;}.frontpage-sidebar .header a.email{padding:13px 10px 10px 40px;background:url(email-small.png) left center no-repeat;}.frontpage-sidebar .call-us .numbers{padding:0px 0px 0px 38px;background:url(phone-small.png) 2px center no-repeat;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:18px;text-align:left;}.frontpage-sidebar .eventum a,.frontpage-sidebar .eventum a:visited{padding:0px 2px 0px 55px;font-size:12px;line-height:18px;text-align:left;background:url(support-small.png) left center no-repeat;display:block;color:#333333 !important;text-decoration:none !important;}.frontpage-sidebar .eventum a:hover{color:#d12907 !important;text-decoration:underline !important;}div.presentation{border-top:1px #e0e0e0 dotted;padding:15px 0px;}div.presentation:first-child{margin-top:0;border:none;}div.presentation table.presentation{border-collapse:collapse;}div.presentation table.presentation td div.bordered-image-screenshot{border:1px #e0e0e0 solid;background:#f8f8f8;padding:5px;}div.presentation table.presentation td.presentations-descr{padding-left:15px;}div.presentation table.presentation td.presentations-descr h4{font-size:18px;font-weight:bold;}.customer-vote{width:412px;text-align:justify;}strong{font-weight:bold;}html,body{height:100%;}#stickywrapper{position:relative;min-height:100%;}* html #stickywrapper{height:100%;}#stickycontent{padding-bottom:102px;}#stickyfooter{position:relative;margin:-97px auto 0 auto;}a.links{font-style:oblique;text-decoration:underline;}span.subpart{font-weight:bold;}div.software-info-container{overflow:hidden;zoom:1;float:right;padding:0px 0px 25px 25px;}table.software-info-container{width:240px;border-collapse:collapse;}table.software-info-container td{border:1px #e0e0e0 solid;padding:10px 10px 10px 10px;}table.software-info-container td.latest{padding:10px 10px 10px 62px;background:url(software-latest.png) 15px center no-repeat;min-height:32px;font-size:16px;line-height:24px;}table.software-info-container td.download a{font-weight:bold;}table.software-info-container td.download{padding:15px 62px 15px 20px;background:url(software-download.png) 195px center no-repeat;min-height:32px;font-size:18px;line-height:24px;}table.software-info-container td.links{text-align:left;padding:4px 10px 4px 20px;}table.software-info-container td.links div{margin:10px 0px;}.inv{display:none;}table.downloadstable{margin-top:20px;border-collapse:collapse;}table.downloadstable th{border:1px #e0e0e0 solid;background:#f8f8f8;padding:7px;font-weight:bold;}table.downloadstable td{border:1px #e0e0e0 solid;padding:7px;}table.downloadstable td.file{width:90%;text-align:left;}table.downloadstable td.modified{width:5%;text-align:center;white-space:nowrap;}table.downloadstable td.size{width:5%;text-align:right;white-space:nowrap;}div.downloads-maintenance-promo,div.downloads-warning{border:1px #e0e0e0 solid;padding:15px 20px 15px 150px;margin:30px 0px;background:url(shield.png) 35px center no-repeat;}div.downloads-maintenance-promo > .close-button{float:right;clear:right;margin-top:-10px;margin-right:-15px;cursor:pointer;cursor:hand;}div.downloads-warning{background:url(warning.png) 35px center no-repeat;}div.downloads-version{border-top:1px #e0e0e0 solid;margin-top:-10px;padding-top:10px;text-align:right;font-size:14px;line-height:14px;font-weight:bold;}div.downloads-anchors{font-size:12px;line-height:15px;margin:20px 0px;}div.downloads-backtotop{font-size:12px;line-height:15px;padding-top:8px;}.downloadsignupdialog .ui-dialog-titlebar{display:none;}#downloadsignup h2{font-family:Arial,Helvetica,sans-serif;font-size:22px;line-height:22px;margin:10px 0px 20px 0px;color:#d12907;}#downloadsignup .intro{margin:10px 0px 15px 0px;}#downloadsignup .form .field{overflow:hidden;zoom:1;margin:10px 0px;}#downloadsignup .form .field .label{overflow:hidden;zoom:1;width:150px;float:left;padding-top:5px;}#downloadsignup .form .field .element{overflow:hidden;zoom:1;width:410px;float:left;}#downloadsignup .form .field .element input,#downloadsignup .form .field .element select{width:400px;border:1px #cccccc solid;padding:3px;outline:none;}#downloadsignup .form .field .element input:focus,#downloadsignup .form .field .element select:focus{border:1px #333333 solid;background:#f8f8f8;outline:none;}#downloadsignup .form .field .radiolist{overflow:hidden;zoom:1;display:block;padding:0;margin:0;}#downloadsignup .form .field table.radiolist{width:100%;}#downloadsignup .form .field .radiolist td{width:25%;}#downloadsignup .form .field div.radiolist label{display:block;min-width:55px;float:left;zoom:1;padding:8px 10px 2px 24px !important;text-indent:-24px;overflow:auto;}#downloadsignup .form .field table.radiolist label{padding:8px 15px 2px 0px !important;zoom:1;display:block;}#downloadsignup .form .field .radiolist label input{margin:0px 7px 0px 3px !important;}.schedule td{padding:3px;border:1px solid #eeeeee;padding-left:10px;font-size:16px;}.tdmini{font-weight:bold;font-size:10px !important;}.tdbreak{background-color:#ffeeee;text-align:center;}.trhead td{background-color:#d12907;color:#ffffff;font-weight:bold;}.speaker{font-size:10px;}table.left-headers th{font-weight:bold;text-align:right;padding:5px 12px;vertical-align:top;border-right:1px solid black;}table.left-headers td{padding:5px 12px;}.training-list tr th{font-weight:bold;}.training-list tr td{padding-right:15px;}a.interwiki{background:transparent url(/docs/wiki/lib/images/interwiki.png) 0px 1px no-repeat;padding-left:16px;}a.iw_wp{background-image:url(/docs/wiki/lib/images/interwiki/wp.gif)}a.iw_wpfr{background-image:url(/docs/wiki/lib/images/interwiki/wpfr.gif)}a.iw_wpde{background-image:url(/docs/wiki/lib/images/interwiki/wpde.gif)}a.iw_wpes{background-image:url(/docs/wiki/lib/images/interwiki/wpes.gif)}a.iw_wppl{background-image:url(/docs/wiki/lib/images/interwiki/wppl.gif)}a.iw_wpjp{background-image:url(/docs/wiki/lib/images/interwiki/wpjp.gif)}a.iw_wpmeta{background-image:url(/docs/wiki/lib/images/interwiki/wpmeta.gif)}a.iw_doku{background-image:url(/docs/wiki/lib/images/interwiki/doku.gif)}a.iw_dokubug{background-image:url(/docs/wiki/lib/images/interwiki/dokubug.gif)}a.iw_amazon{background-image:url(/docs/wiki/lib/images/interwiki/amazon.gif)}a.iw_amazon_de{background-image:url(/docs/wiki/lib/images/interwiki/amazon.de.gif)}a.iw_amazon_uk{background-image:url(/docs/wiki/lib/images/interwiki/amazon.uk.gif)}a.iw_phpfn{background-image:url(/docs/wiki/lib/images/interwiki/phpfn.gif)}a.iw_coral{background-image:url(/docs/wiki/lib/images/interwiki/coral.gif)}a.iw_sb{background-image:url(/docs/wiki/lib/images/interwiki/sb.gif)}a.iw_google{background-image:url(/docs/wiki/lib/images/interwiki/google.gif)}a.iw_meatball{background-image:url(/docs/wiki/lib/images/interwiki/meatball.gif)}a.iw_wiki{background-image:url(/docs/wiki/lib/images/interwiki/wiki.gif)}a.mediafile{background:transparent url(/docs/wiki/lib/images/fileicons/file.png) 0px 1px no-repeat;padding-left:18px;padding-bottom:1px;}a.mf_txt{background-image:url(/docs/wiki/lib/images/fileicons/txt.png)}a.mf_sxi{background-image:url(/docs/wiki/lib/images/fileicons/sxi.png)}a.mf_tgz{background-image:url(/docs/wiki/lib/images/fileicons/tgz.png)}a.mf_wav{background-image:url(/docs/wiki/lib/images/fileicons/wav.png)}a.mf_jpg{background-image:url(/docs/wiki/lib/images/fileicons/jpg.png)}a.mf_sxd{background-image:url(/docs/wiki/lib/images/fileicons/sxd.png)}a.mf_js{background-image:url(/docs/wiki/lib/images/fileicons/js.png)}a.mf_ps{background-image:url(/docs/wiki/lib/images/fileicons/ps.png)}a.mf_conf{background-image:url(/docs/wiki/lib/images/fileicons/conf.png)}a.mf_swf{background-image:url(/docs/wiki/lib/images/fileicons/swf.png)}a.mf_xml{background-image:url(/docs/wiki/lib/images/fileicons/xml.png)}a.mf_py{background-image:url(/docs/wiki/lib/images/fileicons/py.png)}a.mf_cpp{background-image:url(/docs/wiki/lib/images/fileicons/cpp.png)}a.mf_css{background-image:url(/docs/wiki/lib/images/fileicons/css.png)}a.mf_jpeg{background-image:url(/docs/wiki/lib/images/fileicons/jpeg.png)}a.mf_odi{background-image:url(/docs/wiki/lib/images/fileicons/odi.png)}a.mf_pptx{background-image:url(/docs/wiki/lib/images/fileicons/pptx.png)}a.mf_doc{background-image:url(/docs/wiki/lib/images/fileicons/doc.png)}a.mf_bz2{background-image:url(/docs/wiki/lib/images/fileicons/bz2.png)}a.mf_png{background-image:url(/docs/wiki/lib/images/fileicons/png.png)}a.mf_ogg{background-image:url(/docs/wiki/lib/images/fileicons/ogg.png)}a.mf_xls{background-image:url(/docs/wiki/lib/images/fileicons/xls.png)}a.mf_tar{background-image:url(/docs/wiki/lib/images/fileicons/tar.png)}a.mf_pl{background-image:url(/docs/wiki/lib/images/fileicons/pl.png)}a.mf_mp3{background-image:url(/docs/wiki/lib/images/fileicons/mp3.png)}a.mf_pdf{background-image:url(/docs/wiki/lib/images/fileicons/pdf.png)}a.mf_audio{background-image:url(/docs/wiki/lib/images/fileicons/audio.png)}a.mf_rtf{background-image:url(/docs/wiki/lib/images/fileicons/rtf.png)}a.mf_java{background-image:url(/docs/wiki/lib/images/fileicons/java.png)}a.mf_cs{background-image:url(/docs/wiki/lib/images/fileicons/cs.png)}a.mf_odt{background-image:url(/docs/wiki/lib/images/fileicons/odt.png)}a.mf_c{background-image:url(/docs/wiki/lib/images/fileicons/c.png)}a.mf_rpm{background-image:url(/docs/wiki/lib/images/fileicons/rpm.png)}a.mf_docx{background-image:url(/docs/wiki/lib/images/fileicons/docx.png)}a.mf_ppt{background-image:url(/docs/wiki/lib/images/fileicons/ppt.png)}a.mf_odp{background-image:url(/docs/wiki/lib/images/fileicons/odp.png)}a.mf_html{background-image:url(/docs/wiki/lib/images/fileicons/html.png)}a.mf_gz{background-image:url(/docs/wiki/lib/images/fileicons/gz.png)}a.mf_zip{background-image:url(/docs/wiki/lib/images/fileicons/zip.png)}a.mf_gif{background-image:url(/docs/wiki/lib/images/fileicons/gif.png)}a.mf_htm{background-image:url(/docs/wiki/lib/images/fileicons/htm.png)}a.mf_sql{background-image:url(/docs/wiki/lib/images/fileicons/sql.png)}a.mf_rar{background-image:url(/docs/wiki/lib/images/fileicons/rar.png)}a.mf_rb{background-image:url(/docs/wiki/lib/images/fileicons/rb.png)}a.mf_csv{background-image:url(/docs/wiki/lib/images/fileicons/csv.png)}a.mf_odc{background-image:url(/docs/wiki/lib/images/fileicons/odc.png)}a.mf_odf{background-image:url(/docs/wiki/lib/images/fileicons/odf.png)}a.mf_deb{background-image:url(/docs/wiki/lib/images/fileicons/deb.png)}a.mf_ods{background-image:url(/docs/wiki/lib/images/fileicons/ods.png)}a.mf_xlsx{background-image:url(/docs/wiki/lib/images/fileicons/xlsx.png)}a.mf_lua{background-image:url(/docs/wiki/lib/images/fileicons/lua.png)}a.mf_sxc{background-image:url(/docs/wiki/lib/images/fileicons/sxc.png)}a.mf_odg{background-image:url(/docs/wiki/lib/images/fileicons/odg.png)}a.mf_7z{background-image:url(/docs/wiki/lib/images/fileicons/7z.png)}a.mf_sxw{background-image:url(/docs/wiki/lib/images/fileicons/sxw.png)}a.mf_php{background-image:url(/docs/wiki/lib/images/fileicons/php.png)}div.clearer{clear:both;line-height:0;height:0;overflow:hidden;}div.no{display:inline;margin:0;padding:0;}.hidden{display:none;}div.error{background:#fcc url(/docs/wiki/lib/styles/../images/error.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #faa;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}div.info{background:#ccf url(/docs/wiki/lib/styles/../images/info.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #aaf;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}div.success{background:#cfc url(/docs/wiki/lib/styles/../images/success.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #afa;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}div.notify{background:#ffc url(/docs/wiki/lib/styles/../images/notify.png) 0.5em 0px no-repeat;color:#000;border-bottom:1px solid #ffa;font-size:90%;margin:0;padding-left:3em;overflow:hidden;}.medialeft{float:left;}.mediaright{float:right;}.mediacenter{display:block;margin-left:auto;margin-right:auto;}.leftalign{text-align:left;}.centeralign{text-align:center;}.rightalign{text-align:right;}em.u{font-style:normal;text-decoration:underline;}em em.u{font-style:italic;}.code .br0{color:#6c6;}.code .co0{color:#808080;font-style:italic;}.code .co1{color:#808080;font-style:italic;}.code .co2{color:#808080;font-style:italic;}.code .co3{color:#808080;}.code .coMULTI{color:#808080;font-style:italic;}.code .es0{color:#009;font-weight:bold;}.code .kw1{color:#b1b100;}.code .kw2{color:#000;font-weight:bold;}.code .kw3{color:#006;}.code .kw4{color:#933;}.code .kw5{color:#00f;}.code .me1{color:#060;}.code .me2{color:#060;}.code .nu0{color:#c6c;}.code .re0{color:#00f;}.code .re1{color:#00f;}.code .re2{color:#00f;}.code .re3{color:#f33;font-weight:bold;}.code .re4{color:#099;}.code .st0{color:#f00;}.code .sy0{color:#6c6;}div#acl_manager div#acl__tree{font-size:90%;width:25%;height:300px;float:left;overflow:auto;border:1px solid #8cacbb;text-align:left;}div#acl_manager div#acl__tree a.cur{background-color:#ff9;font-weight:bold;}div#acl_manager div#acl__tree ul{list-style-type:none;margin:0;padding:0;}div#acl_manager div#acl__tree li{padding-left:1em;}div#acl_manager div#acl__tree ul img{margin-right:0.25em;cursor:pointer;}div#acl_manager div#acl__detail{width:73%;height:300px;float:right;overflow:auto;}div#acl_manager div#acl__detail fieldset{width:90%;}div#acl_manager div#acl__detail div#acl__user{border:1px solid #8cacbb;padding:0.5em;margin-bottom:0.6em;}div#acl_manager table.inline{width:100%;margin:0;}div#acl_manager .aclgroup{background:transparent url(/docs/wiki/lib/plugins/acl/pix/group.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager .acluser{background:transparent url(/docs/wiki/lib/plugins/acl/pix/user.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager .aclpage{background:transparent url(/docs/wiki/lib/plugins/acl/pix/page.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager .aclns{background:transparent url(/docs/wiki/lib/plugins/acl/pix/ns.png) 0px 1px no-repeat;padding:1px 0px 1px 18px;}div#acl_manager label.disabled{color:#666!important;}#acl_manager label{text-align:left;font-weight:normal;display:inline;}#acl_manager table{margin-left:10%;width:80%;}#acl_manager table tr{background-color:inherit;}#acl_manager table tr:hover{background-color:#dee7ec;}div.toolbar #tool__bar_table button.selected{background:#fff url(/docs/wiki/lib/plugins/edittable/images/buttonshadow_toggled.png) repeat-x bottom;}div.toolbar #tool__bar_table button.disabled{background:#fff url(/docs/wiki/lib/plugins/edittable/images/buttonshadow_toggled2.png) repeat-x bottom;opacity:0.4;}div.toolbar #tool__bar_table button.separator{margin-left:0.5em;}div.toolbar #tool__bar_table{margin-bottom:0.5em;}#dw__editform #edit__wrap{margin-top:1.5em;overflow:auto;border:1px solid #8cacbb;}div.dokuwiki table.edit{margin:-1px;}div.dokuwiki table.edit th,div.dokuwiki table.edit td{min-width:5em;}div.dokuwiki table.edit input{border:none;background:transparent;font:inherit;width:100%;}html>body div.dokuwiki table.edit th,html>body div.dokuwiki table.edit td{background-image:url(/docs/wiki/lib/plugins/edittable/images/inputshadow.png);background-repeat:repeat-x;background-position:top;}div.dokuwiki table.edit td.handle{color:#666;background-color:#f5f5f5;padding:0;vertical-align:bottom;position:relative;}div.dokuwiki table.edit td.rowhandle{width:3em;}div.dokuwiki table.edit td.handle{cursor:move;}div.dokuwiki table.edit td.curhandle{background-color:#dee7ec;}div.dokuwiki table.edit td.disabledhandle{background-image:none;background-color:#c0c0c0;cursor:no-drop;}html>body div.dokuwiki table.edit td.handle{background-image:url(/docs/wiki/lib/plugins/edittable/images/buttonshadow.png);background-repeat:repeat-x;background-position:bottom;}#table__dragmarker{display:block;height:100%;width:100%;position:relative;}#table__dragmarker .dragmarker_topright{position:absolute;top:-0.5em;right:0px;}#table__dragmarker .dragmarker_bottomright{position:absolute;top:0.5em;right:0px;}#table__dragmarker .dragmarker_bottomleft{position:absolute;top:0.5em;left:0px;}.handle .handle_dropdown{float:right;margin-top:3px;}.handle .handle_dropdown img{padding:4px 2px 1px;cursor:pointer;}#dw__editform .handle .handle_dropdown div{position:absolute;z-index:25;}#dw__editform .handle .handle_dropdown div ul{background:#fff none repeat scroll 0 0;border:1px solid;list-style-image:none;list-style-position:outside;list-style-type:none;opacity:0.9;padding:0.3em;margin:0;cursor:auto;font-size:0.9em;}#dw__editform .handle .handle_dropdown div ul li{width:100%;text-align:left;}#dw__editform .handle .handle_dropdown div ul li a{width:100%;display:block;cursor:pointer;}#dw__editform .handle .handle_dropdown div ul li a:hover{background:#dee7ec;}div.dokuwiki div.editbutton_table{margin-top:-1em;}div.dokuwiki div.editbutton_table form input.button{float:none;margin-left:0.6em;padding:0 0.3em;background-image:none;border-top:none;border-bottom-right-radius:0.5em;-moz-border-radius-bottomright:0.5em;-webkit-border-bottom-right-radius:0.5em;border-bottom-left-radius:0.5em;-moz-border-radius-bottomleft:0.5em;-webkit-border-bottom-left-radius:0.5em;}div.dokuwiki div.section_highlight table{background-color:#dee7ec;}div.dokuwiki div.table.section_highlight{background-color:transparent !important;}.noteredirect{margin:1em;margin-left:auto;margin-right:auto;width:70% !important;min-height:18px;clear:both;text-align:justify;vertical-align:middle;border-collapse:collapse;padding:7px 10px 5px 32px;background-position:10px 50%;background-repeat:no-repeat;-moz-border-radius:10px;-khtml-border-radius:10px;border-radius:10px;background-color:#B5E0FF;background-image:url(/docs/wiki/lib/plugins/pageredirect/images/important_small.png);}#user__manager tr.disabled{color:#6f6f6f;background:#e4e4e4;}#user__manager tr.user_info{vertical-align:top;}#user__manager div.edit_user{width:46%;float:left;}#user__manager table{margin-bottom:1em;}#user__manager input.button[disabled]{color:#ccc!important;border-color:#ccc!important;}#plugin__manager h2{margin-left:0;}#plugin__manager form{display:block;margin:0;padding:0;}#plugin__manager legend{display:none;}#plugin__manager fieldset{width:auto;}#plugin__manager .button{margin:0;}#plugin__manager p,#plugin__manager label{text-align:left;}#plugin__manager .hidden{display:none;}#plugin__manager .new{background:#dee7ec;}#plugin__manager input[disabled]{color:#ccc;border-color:#ccc;}#plugin__manager .pm_menu,#plugin__manager .pm_info{margin-left:0;text-align:left;}#plugin__manager .pm_menu{float:left;width:48%;}#plugin__manager .pm_info{float:right;width:50%;}#plugin__manager .common fieldset{margin:0;padding:0 0 1.0em 0;text-align:left;border:none;}#plugin__manager .common label{padding:0 0 0.5em 0;}#plugin__manager .common input.edit{width:24em;margin:0.5em;}#plugin__manager .plugins fieldset{color:#000;background:#fff;text-align:right;border-top:none;border-right:none;border-left:none;}#plugin__manager .plugins fieldset.protected{background:#fdd;color:#000;}#plugin__manager .plugins fieldset.disabled{background:#e0e0e0;color:#a8a8a8;}#plugin__manager .plugins .legend{color:#000;background:inherit;display:block;margin:0;padding:0;font-size:1em;line-height:1.4em;font-weight:normal;text-align:left;float:left;padding:0;clear:none;}#plugin__manager .plugins .button{font-size:95%;}#plugin__manager .plugins fieldset.buttons{border:none;}#plugin__manager .plugins fieldset.buttons .button{float:left;}#plugin__manager .pm_info h3{margin-left:0;}#plugin__manager .pm_info dl{margin:1em 0;padding:0;}#plugin__manager .pm_info dt{width:6em;float:left;clear:left;margin:0;padding:0;}#plugin__manager .pm_info dd{margin:0 0 0 7em;padding:0;background:none;}#plugin__manager .plugins .enable{float:left;width:auto;margin-right:0.5em;}.dokuwiki #plugin__captcha_wrapper img{margin:1px;vertical-align:bottom;border:1px solid #8cacbb;}#config__manager div.success,#config__manager div.error,#config__manager div.info{background-position:0.5em;padding:0.5em;text-align:center;}#config__manager fieldset{margin:1em;width:auto;margin-bottom:2em;background-color:#dee7ec;color:#000;padding:0 1em;}#config__manager legend{font-size:1.25em;}#config__manager form{}#config__manager table{margin:1em 0;width:100%;}#config__manager fieldset td{text-align:left;}#config__manager fieldset td.value{width:31em;}#config__manager td.label{padding:0.8em 0 0.6em 1em;vertical-align:top;}#config__manager td.label label{clear:left;display:block;}#config__manager td.label img{padding:0 10px;vertical-align:middle;float:right;}#config__manager td.label span.outkey{font-size:70%;margin-top:-1.7em;margin-left:-1em;display:block;background-color:#fff;color:#666;float:left;padding:0 0.1em;position:relative;z-index:1;}#config__manager td input.edit{width:30em;}#config__manager td .input{width:30.8em;}#config__manager td select.edit{}#config__manager td textarea.edit{width:27.5em;height:4em;}#config__manager tr .input,#config__manager tr input,#config__manager tr textarea,#config__manager tr select{background-color:#fff;color:#000;}#config__manager tr.default .input,#config__manager tr.default input,#config__manager tr.default textarea,#config__manager tr.default select,#config__manager .selectiondefault{background-color:#cdf;color:#000;}#config__manager tr.protected .input,#config__manager tr.protected input,#config__manager tr.protected textarea,#config__manager tr.protected select,#config__manager tr.protected .selection{background-color:#fcc!important;color:#000 !important;}#config__manager td.error{background-color:red;color:#000;}#config__manager .selection{width:14.8em;float:left;margin:0 0.3em 2px 0;}#config__manager .selection label{float:right;width:14em;font-size:90%;}* html #config__manager .selection label{padding-top:2px;}#config__manager .selection input.checkbox{padding-left:0.7em;}#config__manager .other{clear:both;padding-top:0.5em;}#config__manager .other label{padding-left:2px;font-size:90%;}div.noteclassic,div.noteimportant,div.notewarning,div.notetip{margin:2em;margin-left:auto;margin-right:auto;width:70% !important;min-height:40px;clear:both;text-align:justify;vertical-align:middle;border-collapse:collapse;padding:15px 20px 15px 80px;background-position:20px 50%;background-repeat:no-repeat;-moz-border-radius:20px;-khtml-border-radius:20px;border-radius:20px;}div.noteclassic{background-color:#eef;background-image:url(/docs/wiki/lib/plugins/note/images/note.png);}div.noteimportant{background-color:#ffc;background-image:url(/docs/wiki/lib/plugins/note/images/important.png);}div.notewarning{background-color:#fdd;background-image:url(/docs/wiki/lib/plugins/note/images/warning.png);}div.notetip{background-color:#dfd;background-image:url(/docs/wiki/lib/plugins/note/images/tip.png);}.dtree{font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;font-size:11px;color:#000;white-space:nowrap;line-height:normal;}.dtree img{border:0px;vertical-align:top;}.dtree a{color:#090;text-decoration:none;}.dtree a.node,.dtree a.nodeSel a.navSel{white-space:nowrap;padding:1px 2px 1px 2px;}.dtree a.nodeSel{background-color:#dee7ec;}.dtree a.navSel{background-color:#ff9;}.indexmenu_nojs{display:block;}div.li a.indexmenu_idx{color:#f30 !important;text-decoration:none !important;font-weight:bold;}div.li a.indexmenu_idx_head{font-weight:bold;}div.dokuwiki div.indexmenu_list_themes{clear:both;border-top:2px solid #8cacbb;padding-left:1em;}.dtree a.nodeFdUrl:hover,.dtree a.nodeSel:hover,a.navSel:hover,.dtree a.nodeUrl:hover{color:#090;text-decoration:underline;background-color:#dee7ec;}.dtree a.node:hover{text-decoration:none;}.dtree .indexmenu_tocbullet{position:absolute;background:transparent url(/docs/wiki/lib/plugins/indexmenu/images/toc_bullet.gif) no-repeat scroll;vertical-align:middle;width:11px;height:11px;}.dtree .indexmenu_larrow{position:absolute;filter:alpha(opacity=60);-moz-opacity:.60;opacity:.60;background:transparent url(/docs/wiki/lib/plugins/indexmenu/images/larrow.gif) repeat-y scroll;padding-left:22px;z-index:100;}.indexmenu_toc{font-size:80%;line-height:1.2em;white-space:normal;overflow:hidden;width:200px !important;z-index:100 !important;word-wrap:break-word;}.indexmenu_toc .indexmenu_toc_inside{border:1px solid #8cacbb;background-color:#fff;text-align:left;padding:0.5em 0 0.7em 0;max-height:300px;height:expression( this.scrollHeight > 300 ? "300px":"auto" );overflow:auto;}.dtree .indexmenu_rarrow{position:absolute;background:white url(/docs/wiki/lib/plugins/indexmenu/images/rarrow.gif) no-repeat scroll;width:11px;height:15px;}.indexmenu_rmenu{position:absolute;z-index:100;background-color:#fff;border:1px solid black;font-size:80%;line-height:100%;padding-bottom:5px;}.indexmenu_rmenuhead{background:#CFC url(/docs/wiki/lib/plugins/indexmenu/images/close.gif) no-repeat scroll;border-bottom:1px solid #000;color:#000;font-size:90%;margin:0pt;text-align:left;padding:1px 15px;vertical-align:middle;overflow:hidden;width:80px;}.indexmenu_rmenu ul,.indexmenu_rmenu li{list-style-type:none !important;list-style-image:none !important;color:#000 !important;margin:2px !important;text-align:center;}.indexmenu_rmenu a:hover{background-color:#000 !important;color:#fff !important;}.indexmenu_opts{font-size:80%;}.dtree .emptynode{background:transparent url(/docs/wiki/lib/plugins/indexmenu/images/empty.gif) no-repeat scroll;display:inline;padding:1px 8px;width:16px;height:16px;vertical-align:top;zoom:1;}div.dokuwiki .header{padding:3px 0 0 2px;}div.dokuwiki .pagename{float:left;font-size:200%;font-weight:bolder;color:#dee7ec;text-align:left;vertical-align:middle;}div.dokuwiki .pagename a{color:#436976 !important;text-decoration:none !important;}div.dokuwiki .logo{float:right;font-size:220%;font-weight:bolder;text-align:right;vertical-align:middle;}div.dokuwiki .logo a{color:#dee7ec !important;text-decoration:none !important;font-variant:small-caps;letter-spacing:2pt;}div.dokuwiki .bar{border:1px #e0e0e0 solid;background:#f8f8f8;padding:10px;clear:both;}div.dokuwiki .bar-left{float:left;}div.dokuwiki .bar-right{float:right;text-align:right;}div.dokuwiki #bar__bottom{margin-bottom:3px;}div.dokuwiki .bar-tools{display:none;border-left:1px #e0e0e0 solid;border-right:1px #e0e0e0 solid;border-bottom:1px #e0e0e0 solid;background:#f8f8f8;padding:10px;clear:both;}div.dokuwiki div.meta{clear:both;margin:20px 0px 0px 0px;color:#638c9c;font-size:70%;}div.dokuwiki div.meta div.user{float:left;}div.dokuwiki div.meta div.doc{text-align:right;}*{padding:0;margin:0;}body{font:80% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif;background-color:#fff;color:#000;}div.dokuwiki div.page{text-align:justify;}div.dokuwiki table{font-size:100%;}div.dokuwiki tr,div.dokuwiki td,div.dokuwiki th{}div.dokuwiki img{border:0;}div.dokuwiki p,div.dokuwiki blockquote,div.dokuwiki table,div.dokuwiki pre{margin:0 0 1.0em 0;}div.dokuwiki hr{border:0px;border-top:1px solid #8cacbb;text-align:center;height:0px;}div.dokuwiki div.nothing{text-align:center;margin:2em;}div.dokuwiki form{border:none;display:inline;}div.dokuwiki label.block{display:block;text-align:right;font-weight:bold;}div.dokuwiki label.simple{display:block;text-align:left;font-weight:normal;}div.dokuwiki label.block input.edit{width:50%;}div.dokuwiki fieldset{width:300px;text-align:center;border:1px solid #8cacbb;padding:0.5em;margin:auto;}div.dokuwiki textarea.edit{font-family:monospace;font-size:14px;color:#000;background-color:#fff;border:1px solid #8cacbb;padding:0.3em 0 0 0.3em;width:100%;}html>body div.dokuwiki textarea.edit{background:#fff url(/docs/wiki/lib/tpl/default/images/inputshadow.png) repeat-x top;}div.dokuwiki input.edit,div.dokuwiki select.edit{font-size:100%;border:1px solid #8cacbb;color:#000;background-color:#fff;vertical-align:middle;margin:1px;padding:0.20em 0.3em;display:inline;}html>body div.dokuwiki input.edit,html>body div.dokuwiki select.edit{background:#fff url(/docs/wiki/lib/tpl/default/images/inputshadow.png) repeat-x top;}div.dokuwiki select.edit{padding:0.1em 0;}div.dokuwiki input.missing{font-size:100%;border:1px solid #8cacbb;color:#000;background-color:#fcc;vertical-align:middle;margin:1px;padding:0.20em 0.3em;display:inline;}div.dokuwiki textarea.edit[disabled],div.dokuwiki textarea.edit[readonly],div.dokuwiki input.edit[disabled],div.dokuwiki input.edit[readonly],div.dokuwiki input.button[disabled],div.dokuwiki select.edit[disabled]{background-color:#f5f5f5!important;color:#666!important;}div.dokuwiki div.toolbar,div.dokuwiki div#wiki__editbar{margin:2px 0;text-align:left;}div.dokuwiki div#size__ctl{float:right;width:60px;height:2.7em;}div.dokuwiki #size__ctl img{cursor:pointer;}div.dokuwiki div#wiki__editbar div.editButtons{float:left;padding:0 1.0em 0.7em 0;}div.dokuwiki div#wiki__editbar div.summary{float:left;}div.dokuwiki .nowrap{white-space:nowrap;}div.dokuwiki div#draft__status{float:right;color:#638c9c;}div.dokuwiki div.license{padding:0.5em;font-size:90%;text-align:center;}div.dokuwiki form#dw__editform div.license{clear:left;font-size:90%;}div.dokuwiki input.button,div.dokuwiki button.button{border:1px solid #8cacbb;color:#000;background-color:#fff;vertical-align:middle;text-decoration:none;font-size:100%;cursor:pointer;margin:1px;padding:0.125em 0.4em;}html>body div.dokuwiki input.button,html>body div.dokuwiki button.button{background:#fff url(/docs/wiki/lib/tpl/default/images/buttonshadow.png) repeat-x bottom;}* html div.dokuwiki input.button,* html div.dokuwiki button.button{height:1.8em;}div.dokuwiki div.secedit input.button{border:1px solid #8cacbb;color:#000;background-color:#fff;vertical-align:middle;text-decoration:none;margin:0;padding:0;font-size:10px;cursor:pointer;float:right;display:inline;}div.dokuwiki div.pagenav{margin:1em 0 0 0;}div.dokuwiki div.pagenav-prev{text-align:right;float:left;width:49%}div.dokuwiki div.pagenav-next{text-align:left;float:right;width:49%}div.dokuwiki a:link,div.dokuwiki a:visited{color:#436976;text-decoration:none;}div.dokuwiki a:hover,div.dokuwiki a:active{color:#000;text-decoration:underline;}div.dokuwiki h1 a{text-decoration:none !important;}div.dokuwiki h2 a,div.dokuwiki h3 a,div.dokuwiki h4 a,div.dokuwiki h5 a,div.dokuwiki a.nolink{color:#000 !important;text-decoration:none !important;}div.dokuwiki a.interwiki{}div.dokuwiki a.media{}div.dokuwiki a.mail{background:transparent url(/docs/wiki/lib/tpl/default/images/mail_icon.gif) 0px 1px no-repeat;padding:1px 0px 1px 16px;}div.dokuwiki a.wikilink2{text-decoration:none !important;border-bottom:dashed 1px #f30 !important;}div.dokuwiki div.preview{background-color:#f5f5f5;margin:0 0 0 2em;padding:4px;border:1px dashed #000;}div.dokuwiki div.breadcrumbs{background:url(http://s0.percona.com/ui-tab-bg.png) -14px left repeat-x;color:#999;font-size:11px;font-style:italic;padding:7px 0 15px 12px;}div.dokuwiki div.breadcrumbs a,div.dokuwiki div.breadcrumbs a:visited{color:#999 !important;border-color:#999 !important;}div.dokuwiki div.breadcrumbs a:hover{color:#d12907 !important;border-color:#d12907 !important;}div.dokuwiki span.user{color:#ccc;font-size:90%;}div.dokuwiki li.minor{color:#666;font-style:italic;}div.dokuwiki img.media{margin:3px;}div.dokuwiki img.medialeft{border:0;float:left;margin:0 1.5em 0 0;}div.dokuwiki img.mediaright{border:0;float:right;margin:0 0 0 1.5em;}div.dokuwiki img.mediacenter{border:0;display:block;margin:0 auto;}div.dokuwiki img.middle{vertical-align:middle;}div.dokuwiki acronym{cursor:help;border-bottom:1px dotted #000;}div.dokuwiki li.open{list-style-image:url(/docs/wiki/lib/tpl/default/images/open.gif);}div.dokuwiki li.closed{list-style-image:url(/docs/wiki/lib/tpl/default/images/closed.gif);}div.dokuwiki blockquote{border-left:2px solid #8cacbb;padding-left:3px;}div.dokuwiki pre{font-size:80%;padding:10px;border:1px dashed #8cacbb;color:#000;overflow:auto;}div.dokuwiki pre.pre{background-color:#f7f9fa;}div.dokuwiki pre.code{background-color:#f7f9fa;}div.dokuwiki pre.file{background-color:#dee7ec;}div.dokuwiki dl.file,div.dokuwiki dl.code{margin-top:2em;margin-bottom:2.5em;}div.dokuwiki dl.file dt,div.dokuwiki dl.code dt{border:1px dashed #8cacbb;display:inline;padding:0.1em 1em;margin-left:2em;}div.dokuwiki dl.code dt a,div.dokuwiki dl.file dt a{color:#000;}div.dokuwiki dl.code dt{background-color:#f7f9fa;border-bottom:1px solid #f7f9fa;}div.dokuwiki dl.file dt{background-color:#dee7ec;border-bottom:1px solid #dee7ec;}div.dokuwiki table.inline{background-color:#fff;border-spacing:0px;border-collapse:collapse;}div.dokuwiki table.inline th{padding:3px;border:1px solid #8cacbb;background-color:#dee7ec;}div.dokuwiki table.inline td{padding:3px;border:1px solid #8cacbb;}#toc{width:258px;font-size:12px;line-height:16px;clear:both;border:1px #e0e0e0 solid;background:#fff url(http://s1.percona.com/ui-tab-bg.png) top left repeat-x;}#toc div.tocheader{text-align:left;font-weight:bold;padding:7px 10px;margin-bottom:2px;font-size:16px;}#toc div.tocheader a,#toc div.tocheader a:visited{color:#000 !important;text-decoration:none !important;}#toc div.tocheader a:hover{color:#d12907 !important;text-decoration:none !important;}#toc span.toc_open,#toc span.toc_close{float:right;display:block;margin:0.4em 3px 0 0;}#toc span.toc_open span,#toc span.toc_close span{display:none;}#toc span.toc_open{margin-top:0.4em;border-top:0.4em solid #000;}#toc span.toc_close{margin-top:0;border-bottom:0.4em solid #000;}#toc #toc__inside{text-align:left;padding:1px 15px 15px 13px;}#toc ul.toc{list-style-type:none;padding-left:0px !important;margin:0;}#toc ul.toc ul{padding-left:15px !important;}#toc ul.toc li{margin:5px 0px !important;}#toc ul.toc li.clear{padding-left:0;}#toc a.toc:link,#toc a.toc:visited{color:#d12907;text-decoration:underline;}#toc a.toc:hover,#toc a.toc:active{color:#712000;text-decoration:underline;}div.dokuwiki table.diff{background-color:#fff;width:100%;}div.dokuwiki td.diff-blockheader{font-weight:bold;}div.dokuwiki table.diff th{border-bottom:1px solid #8cacbb;font-size:110%;width:50%;font-weight:normal;text-align:left;}div.dokuwiki table.diff th a{font-weight:bold;}div.dokuwiki table.diff th span.user{color:#000;font-size:80%;}div.dokuwiki table.diff th span.sum{font-size:80%;font-weight:bold;}div.dokuwiki table.diff th.minor{font-style:italic;}div.dokuwiki table.diff td{font-family:monospace;font-size:100%;}div.dokuwiki td.diff-addedline{background-color:#dfd;}div.dokuwiki td.diff-deletedline{background-color:#ffb;}div.dokuwiki td.diff-context{background-color:#f5f5f5;}div.dokuwiki table.diff td.diff-addedline strong,div.dokuwiki table.diff td.diff-deletedline strong{color:red;}div.dokuwiki div.footnotes{clear:both;border-top:1px solid #8cacbb;padding-left:1em;margin-top:1em;}div.dokuwiki div.fn{font-size:90%;}div.dokuwiki a.fn_bot{font-weight:bold;}div.insitu-footnote{font-size:80%;line-height:1.2em;border:1px solid #8cacbb;background-color:#f7f9fa;text-align:left;padding:4px;max-width:40%;}* html .insitu-footnote pre.code,* html .insitu-footnote pre.file{padding-bottom:18px;}div.dokuwiki .search_result{margin-bottom:6px;padding:0 10px 0 30px;}div.dokuwiki .search_snippet{color:#ccc;font-size:12px;margin-left:20px;}div.dokuwiki .search_sep{color:#000;}div.dokuwiki .search_hit{color:#000;background-color:#ff9;}div.dokuwiki strong.search_hit{font-weight:normal;}div.dokuwiki div.search_quickresult{margin:0 0 15px 30px;padding:0 10px 10px 0;border-bottom:1px dashed #8cacbb;}div.dokuwiki div.search_quickresult h3{margin:0 0 1.0em 0;font-size:1em;font-weight:bold;}div.dokuwiki ul.search_quickhits{margin:0 0 0.5em 1.0em;}div.dokuwiki ul.search_quickhits li{margin:0 1.0em 0 1.0em;float:left;width:30%;}div.dokuwiki div.section_highlight{background-color:#dee7ec;}div.footerinc{text-align:center;}.footerinc a img{opacity:0.5;border:0;}.footerinc a:hover img{opacity:1;}div.dokuwiki div.ajax_qsearch{position:absolute;right:237px;;width:200px;opacity:0.9;display:none;font-size:80%;line-height:1.2em;border:1px solid #8cacbb;background-color:#f7f9fa;text-align:left;padding:4px;}button.toolbutton{background-color:#fff;padding:0px;margin:0 1px 0 0;border:1px solid #8cacbb;cursor:pointer;}html>body button.toolbutton{background:#fff url(/docs/wiki/lib/tpl/default/images/buttonshadow.png) repeat-x bottom;}div.picker{width:250px;border:1px solid #8cacbb;background-color:#dee7ec;}div.pk_hl{width:125px;}button.pickerbutton{padding:0px;margin:0 1px 1px 0;border:0;background-color:transparent;font-size:80%;cursor:pointer;}div.dokuwiki div.img_big{float:left;margin-right:0.5em;}div.dokuwiki dl.img_tags dt{font-weight:bold;background-color:#dee7ec;}div.dokuwiki dl.img_tags dd{background-color:#f5f5f5;}div.dokuwiki div.imagemeta{color:#666;font-size:70%;line-height:95%;}div.dokuwiki div.imagemeta img.thumb{float:left;margin-right:0.1em;}div.dokuwiki h4{border-top:none !important;margin:20px 0px 20px 0px !important;}#media__manager{height:100%;overflow:hidden;}#media__left{width:30%;border-right:solid 1px #8cacbb;height:100%;overflow:auto;position:absolute;left:0;}#media__right{width:69.7%;height:100%;overflow:auto;position:absolute;right:0;}#media__manager h1{margin:0;padding:0;margin-bottom:0.5em;}#media__tree img{float:left;padding:0.5em 0.3em 0 0;}#media__tree ul{list-style-type:none;list-style-image:none;margin-left:1.5em;}#media__tree li{clear:left;list-style-type:none;list-style-image:none;}*+html #media__tree li,* html #media__tree li{border:1px solid #fff;}#media__opts{padding-left:1em;margin-bottom:0.5em;}#media__opts input{float:left;display:block;margin-top:4px;position:absolute;}*+html #media__opts input,* html #media__opts input{position:static;}#media__opts label{display:block;float:left;margin-left:20px;margin-bottom:4px;}*+html #media__opts label,* html #media__opts label{margin-left:10px;}#media__opts br{clear:left;}#media__content img.load{margin:1em auto;}#media__content #scroll__here{border:1px dashed #8cacbb;}#media__content .odd{background-color:#f7f9fa;padding:0.4em;}#media__content .even{padding:0.4em;}#media__content a.mediafile{margin-right:1.5em;font-weight:bold;}#media__content div.detail{padding:0.3em 0 0.3em 2em;}#media__content div.detail div.thumb{float:left;width:130px;text-align:center;margin-right:0.4em;}#media__content img.btn{vertical-align:text-bottom;}#media__content div.example{color:#666;margin-left:1em;}#media__content div.upload{font-size:90%;padding:0 0.5em 0.5em 0.5em;}#media__content form#dw__upload,#media__content div#dw__flashupload{display:block;border-bottom:solid 1px #8cacbb;padding:0 0.5em 1em 0.5em;}#media__content form#dw__upload fieldset{padding:0;margin:0;border:none;width:auto;}#media__content form#dw__upload p{text-align:left;padding:0.25em 0;margin:0;line-height:1.0em;}#media__content form#dw__upload label.check{float:none;width:auto;margin-left:11.5em;}#media__content form.meta{display:block;padding:0 0 1em 0;}#media__content form.meta label{display:block;width:25%;float:left;font-weight:bold;margin-left:1em;clear:left;}#media__content form.meta .edit{font:100% "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif;float:left;width:70%;padding-right:0;padding-left:0.2em;margin:2px;}#media__content form.meta textarea.edit{height:8em;}#media__content form.meta div.metafield{clear:left;}#media__content form.meta div.buttons{clear:left;margin-left:20%;padding-left:1em;}#media__popup{background-color:#fff;display:none;border:1px solid #8cacbb;position:absolute;width:270px;}#media__popup h1{text-align:center;font-weight:normal;background-color:#dee7ec;height:16px;margin-bottom:5px;font-size:12px;border-bottom:0;}#media__popup p{display:block;line-height:14pt;margin:0.5em;}#media_nolink{padding:4px 0;}#media__popup label{float:left;width:9em;}#media__popup .button{margin-left:auto;margin-right:auto;}#media__popup .btnlbl{text-align:center;}#media__popup .btnlbl input{margin:0 1em;}#media__closeimg{float:right;}#media__linkopts label,#media__nolnk{width:80px;float:left;margin-left:10px;}#media__linkopts label{line-height:20px;}#media__nolnk,#media__linkopts label.long{margin-bottom:8px;line-height:12px;}#media__linkopts label.long{width:150px;float:none;}#media__linkopts br{clear:both;}#media__linkopts select{width:60px;margin-left:10px;}#media__linkopts input.edit{width:50px;margin-left:10px;}#media__linkopts #media__title{width:150px;}#admin__version{clear:left;float:right;color:#666;}.dokuwiki ul.admin_tasks{font-size:115%;float:left;width:40%;list-style-type:none;}.dokuwiki ul.admin_tasks li{line-height:22px;padding-left:35px;margin:1em 0;background:transparent none no-repeat scroll 0 0;text-align:left;}.dokuwiki ul.admin_tasks li div.li{font-weight:bold;}.dokuwiki ul.admin_tasks li.admin_acl{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/acl.png);}.dokuwiki ul.admin_tasks li.admin_usermanager{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/usermanager.png);}.dokuwiki ul.admin_tasks li.admin_plugin{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/plugin.png);}.dokuwiki ul.admin_tasks li.admin_config{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/config.png);}.dokuwiki ul.admin_tasks li.admin_revert{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/revert.png);}.dokuwiki ul.admin_tasks li.admin_popularity{background-image:url(/docs/wiki/lib/tpl/default/../../images/admin/popularity.png);}#link__wiz{position:absolute;display:block;z-index:99;width:300px;height:250px;padding:0;margin:0;overflow:hidden;border:1px solid #8cacbb;background-color:#f5f5f5;text-align:center;}#link__wiz_header{background-color:#dee7ec;height:16px;margin-bottom:5px;}#link__wiz_close{cursor:pointer;margin:0;}#link__wiz_result{background-color:#fff;width:293px;height:193px;overflow:auto;border:1px solid #8cacbb;margin:3px auto;text-align:left;}#link__wiz_result div.type_u{padding:3px 3px 3px 22px;background:transparent url(/docs/wiki/lib/tpl/default/../../images/up.png) 3px 3px no-repeat;}#link__wiz_result div.type_f{padding:3px 3px 3px 22px;background:transparent url(/docs/wiki/lib/tpl/default/../../images/page.png) 3px 3px no-repeat;}#link__wiz_result div.type_d{padding:3px 3px 3px 22px;background:transparent url(/docs/wiki/lib/tpl/default/../../images/ns.png) 3px 3px no-repeat;}#link__wiz_result div.even{background-color:#f5f5f5;}#link__wiz_result div.selected{background-color:#dee7ec;}#link__wiz_result span{display:block;color:#666;}.ondrag{cursor:move;opacity:0.8;}form#subscribe__form{display:block;width:300px;text-align:center;}form#subscribe__form fieldset{text-align:left;margin:0.5em 0;}form#subscribe__form label{display:block;margin:0 0.5em 0.5em;} |
1289 | - |
1290 | - |
1291 | - |
1292 | -/*** |
1293 | - * side style buttons |
1294 | -*/ |
1295 | -.a-btn-container { |
1296 | - overflow:hidden; |
1297 | - border-radius:4px; |
1298 | -} |
1299 | -.a-btn, .a-btn-green, .a-btn-red{ |
1300 | - |
1301 | - width: 245px; |
1302 | - background:#f2aa2e; |
1303 | - background:-webkit-gradient(linear,left top,left bottom,color-stop(##f2aa2e,0),color-stop(##c7401e,1)); |
1304 | - background:-webkit-linear-gradient(top, #f2aa2e 0%, #c7401e 100%); |
1305 | - background:-moz-linear-gradient(top, #f2aa2e 0%, #c7401e 100%); |
1306 | - background:-o-linear-gradient(top, #f2aa2e 0%, #c7401e 100%); |
1307 | - background:linear-gradient(top, #f2aa2e 0%, #c7401e 100%); |
1308 | - filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#f2aa2e', endColorstr='#c7401e',GradientType=0 ); |
1309 | - border:1px solid #f5b74e; |
1310 | - border-color:#f5b74e #e5a73e #d6982f; |
1311 | - -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395; |
1312 | - -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395; |
1313 | - box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fee395; |
1314 | - padding:0px; |
1315 | - height:65px; |
1316 | - display:inline-block; |
1317 | - position:relative; |
1318 | - -webkit-border-radius:4px; |
1319 | - -moz-border-radius:4px; |
1320 | - border-radius:4px; |
1321 | - float:left; |
1322 | - overflow:hidden; |
1323 | - -webkit-transition:all 0.3s linear; |
1324 | - -moz-transition:all 0.3s linear; |
1325 | - -o-transition:all 0.3s linear; |
1326 | - transition:all 0.3s linear; |
1327 | - text-decoration: none !important; |
1328 | -} |
1329 | -.a-btn-green{ |
1330 | - background:#a1de78; |
1331 | - background:-webkit-gradient(linear,left top,left bottom,color-stop(##a1de78,0),color-stop(##a1de78,1)); |
1332 | - background:-webkit-linear-gradient(top, #00e05a 0%, #006127 100%); |
1333 | - background:-moz-linear-gradient(center top , #00e05a 0%, #006127 130%); |
1334 | - background:-o-linear-gradient(top, #00e05a 0%, #006127 100%); |
1335 | - background:linear-gradient(top, #00e05a 0%, #006127 100%); |
1336 | - filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00e05a', endColorstr='#444444',GradientType=0 ); |
1337 | - border:1px solid #f5b74e; |
1338 | - border-color:#00ba4b #009A00 #007A31; |
1339 | - -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F; |
1340 | - -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F; |
1341 | - box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #00ED5F; |
1342 | -} |
1343 | - |
1344 | -.a-btn-red{ |
1345 | - background:#e31300; |
1346 | - background:-webkit-gradient(linear,left top,left bottom,color-stop(##e31300,0),color-stop(##6b0900,1)); |
1347 | - background:-webkit-linear-gradient(top, #e31300 0%, #6b0900 100%); |
1348 | - background:-moz-linear-gradient(center top , #e31300 0%, #6b0900 130%); |
1349 | - background:-o-linear-gradient(top, #e31300 0%, #6b0900 100%); |
1350 | - background:linear-gradient(top, #e31300 0%, #6b0900 100%); |
1351 | - filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#e31300', endColorstr='#444444',GradientType=0 ); |
1352 | - border:1px solid #ff2d19; |
1353 | - border-color:#e85345 #b00f00 #63241e; |
1354 | - -webkit-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c; |
1355 | - -moz-box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c; |
1356 | - box-shadow:0 1px 1px #d3d3d3, inset 0 1px 0 #fa430c; |
1357 | -} |
1358 | - |
1359 | - |
1360 | -.a-btn-text{ |
1361 | - padding-left:15px; |
1362 | - padding-top:10px; |
1363 | - display:block; |
1364 | - font-size:18px; |
1365 | - white-space:nowrap; |
1366 | - color: #f5f1ea; |
1367 | - text-shadow:0 1px 0 #000; |
1368 | - -webkit-transition:all 0.3s linear; |
1369 | - -moz-transition:all 0.3s linear; |
1370 | - -o-transition:all 0.3s linear; |
1371 | - transition:all 0.3s linear; |
1372 | - |
1373 | -} |
1374 | -.a-btn-green .a-btn-text { |
1375 | - color: #fff; |
1376 | -} |
1377 | - |
1378 | -.a-btn-slide-text, .a-btn-fixed-slide-text { |
1379 | - position:absolute; |
1380 | - top:35px; |
1381 | - left:0px; |
1382 | - width:auto; |
1383 | - right:52px; |
1384 | - height:0px; |
1385 | - background:#fff; |
1386 | - color:#996633; |
1387 | - font-size:13px; |
1388 | - white-space:nowrap; |
1389 | - font-family:Georgia, serif; |
1390 | - font-style:italic; |
1391 | - text-indent:15px; |
1392 | - overflow:hidden; |
1393 | - line-height:30px; |
1394 | - -webkit-box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset; |
1395 | - -moz-box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset; |
1396 | - box-shadow:-1px 0px 1px rgba(255,255,255,0.4), 1px 1px 1px rgba(0,0,0,0.5) inset; |
1397 | - -webkit-transition:height 0.3s linear; |
1398 | - -moz-transition:height 0.3s linear; |
1399 | - -o-transition:height 0.3s linear; |
1400 | - transition:height 0.3s linear; |
1401 | -} |
1402 | -.a-btn-fixed-slide-text{ |
1403 | - height: 30px; |
1404 | -} |
1405 | - |
1406 | -.a-btn-icon-right{ |
1407 | - position:absolute; |
1408 | - |
1409 | - right:0px; |
1410 | - top:0px; |
1411 | - height:100%; |
1412 | - width:52px; |
1413 | - border-left:1px solid #f5b74e; |
1414 | - -webkit-box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset; |
1415 | - -moz-box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset; |
1416 | - box-shadow:1px 0px 1px rgba(255,255,255,0.4) inset; |
1417 | -} |
1418 | -.a-btn-red .a-btn-icon-right { |
1419 | - border-left: 1px solid #fa430c; |
1420 | -} |
1421 | -.a-btn-icon-right span{ |
1422 | - width:38px; |
1423 | - height:38px; |
1424 | - |
1425 | - position:absolute; |
1426 | - left:50%; |
1427 | - top:50%; |
1428 | - margin:-20px 0px 0px -20px; |
1429 | - background:transparent url(/static/images/software-download-white-brdr.png) no-repeat 50% 55%; |
1430 | - -webkit-transition:all 0.3s linear; |
1431 | - -moz-transition:all 0.3s linear; |
1432 | - -o-transition:all 0.3s linear; |
1433 | - transition:all 0.3s linear; |
1434 | - |
1435 | -} |
1436 | -.a-btn-green .a-btn-icon-right span { |
1437 | - background:transparent url(/static/images/software-download-white-brdr-green3.png) no-repeat 50% 55%; |
1438 | -} |
1439 | -.a-btn-red .a-btn-icon-right span { |
1440 | - |
1441 | - background:transparent url(/static/images/software-download-white-brdr-red.png) no-repeat 50% 55%; |
1442 | -} |
1443 | -.a-btn:hover{ |
1444 | - height:65px; |
1445 | - -webkit-box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4); |
1446 | - -moz-box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4); |
1447 | - box-shadow:0px 1px 1px rgba(255,255,255,0.8) inset, 1px 1px 5px rgba(0,0,0,0.4); |
1448 | -} |
1449 | -.a-btn:hover .a-btn-text{ |
1450 | - |
1451 | - text-shadow:0 1px 0 #000; |
1452 | - color:#fff; |
1453 | -} |
1454 | -.a-btn:hover .a-btn-slide-text:hover{ |
1455 | - height:30px; |
1456 | -} |
1457 | -.a-btn:hover .a-btn-icon-right span{ |
1458 | - opacity:1; |
1459 | - /** |
1460 | - -webkit-transform:rotate(-45deg); |
1461 | - -moz-transform:rotate(-45deg); |
1462 | - -ms-transform:rotate(-45deg); |
1463 | - -o-transform:rotate(-45deg); |
1464 | - transform:rotate(-45deg); |
1465 | - */ |
1466 | -} |
1467 | -.a-btn:active{ |
1468 | - position:relative; |
1469 | - top:1px; |
1470 | - background:#fec354; |
1471 | - background:-webkit-gradient(linear,left top,left bottom,color-stop(#fec354,0),color-stop(#fecd61,1)); |
1472 | - background:-webkit-linear-gradient(top, #fec354 0%, #fecd61 100%); |
1473 | - background:-moz-linear-gradient(top, #fec354 0%, #fecd61 100%); |
1474 | - background:-o-linear-gradient(top, #fec354 0%, #fecd61 100%); |
1475 | - background:linear-gradient(top, #fec354 0%, #fecd61 100%); |
1476 | - filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fec354', endColorstr='#fecd61',GradientType=0 ); |
1477 | - border-color:#d29a3a #cc9436 #c89133; |
1478 | - text-shadow:0 1px 0 #fee1a0; |
1479 | - -webkit-box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e; |
1480 | - -moz-box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e; |
1481 | - box-shadow:0 1px 1px #d4d4d4, inset 0 1px 0 #fed17e; |
1482 | -} |
1483 | -.body .section blockquote { |
1484 | - margin-left: 25px; |
1485 | -} |
1486 | |
1487 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js' |
1488 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js 2012-03-26 17:43:02 +0000 |
1489 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/percona.com.js 1970-01-01 00:00:00 +0000 |
1490 | @@ -1,269 +0,0 @@ |
1491 | -window.jQuery(function($) { |
1492 | - |
1493 | - |
1494 | - |
1495 | -function setCookie(c_name, value, expiredays) |
1496 | -{ |
1497 | - var exdate = new Date(); |
1498 | - exdate.setDate(exdate.getDate() + expiredays); |
1499 | - document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";path=/;expires=" + exdate.toUTCString()); |
1500 | -} |
1501 | - |
1502 | -function getCookie(c_name) |
1503 | -{ |
1504 | - if (document.cookie.length > 0) |
1505 | - { |
1506 | - c_start = document.cookie.indexOf(c_name + "="); |
1507 | - if (c_start != -1) |
1508 | - { |
1509 | - c_start = c_start + c_name.length+1; |
1510 | - c_end = document.cookie.indexOf(";",c_start); |
1511 | - if (c_end == -1) |
1512 | - { |
1513 | - c_end = document.cookie.length; |
1514 | - } |
1515 | - return unescape(document.cookie.substring(c_start, c_end)); |
1516 | - } |
1517 | - } |
1518 | - return ""; |
1519 | -} |
1520 | - |
1521 | - |
1522 | -NAVI = new Object(); |
1523 | - |
1524 | -NAVI.CloseTimer = null; |
1525 | - |
1526 | -NAVI.Open = function ( menu_tag, dir ) |
1527 | -{ |
1528 | - NAVI_CancelTimer(); |
1529 | - NAVI_Close(); |
1530 | - SEARCH_CancelTimer(); |
1531 | - SEARCH_Close(); |
1532 | - if ('h' == dir) |
1533 | - { |
1534 | - return; |
1535 | - } |
1536 | - var pos = $("#navilink-span-"+menu_tag).offset(); |
1537 | - if (dir=='r') |
1538 | - { |
1539 | - $("#navi-dropdown-"+menu_tag).css( { "position": "absolute", "left": (pos.left + ($("#navilink-span-"+menu_tag).width()) + 2 - ($("#navi-dropdown-"+menu_tag).width())) + "px", "top": (pos.top + 32) + "px" } ); |
1540 | - } |
1541 | - else |
1542 | - { |
1543 | - $("#navi-dropdown-"+menu_tag).css( { "position": "absolute", "left": (pos.left) + "px", "top": (pos.top + 32) + "px" } ); |
1544 | - } |
1545 | - $("#navi-dropdown-"+menu_tag).show(); |
1546 | - $("#navilink-span-"+menu_tag).bind('mouseover',NAVI_CancelTimer); |
1547 | - $("#navilink-span-"+menu_tag).bind('mouseout',NAVI_Timer); |
1548 | - $("#navi-dropdown-"+menu_tag).bind('mouseover',NAVI_CancelTimer); |
1549 | - $("#navi-dropdown-"+menu_tag).bind('mouseout',NAVI_Timer); |
1550 | -}; |
1551 | - |
1552 | -function NAVI_Close() |
1553 | -{ |
1554 | - $(".navi-dropdown").hide(); |
1555 | - $("#menu div").unbind('mouseover'); |
1556 | - $(".dropdown").unbind('mouseover'); |
1557 | - $(".dropdown").unbind('mouseout'); |
1558 | - |
1559 | - $("#search-dropdown").hide(); |
1560 | - $("#searchlink-anchor").unbind('mouseover'); |
1561 | - $("#searchlink-anchor").unbind('mouseout'); |
1562 | - $("#search-dropdown").unbind('mouseover'); |
1563 | - $("#search-dropdown").unbind('mouseout'); |
1564 | -} |
1565 | - |
1566 | -function NAVI_CancelTimer() |
1567 | -{ |
1568 | - if (NAVI.CloseTimer!=null) |
1569 | - { |
1570 | - window.clearTimeout(NAVI.CloseTimer); |
1571 | - NAVI.CloseTimer = null; |
1572 | - } |
1573 | -} |
1574 | - |
1575 | -function NAVI_Timer() |
1576 | -{ |
1577 | - if (NAVI.CloseTimer==null) |
1578 | - { |
1579 | - NAVI.CloseTimer = window.setTimeout(NAVI_Close, 300); |
1580 | - } |
1581 | -} |
1582 | - |
1583 | - |
1584 | -SUBNAVI = new Object(); |
1585 | - |
1586 | -SUBNAVI.Open = function ( menu_tag ) |
1587 | -{ |
1588 | - if ($("#sidesubnavi-" + menu_tag + ':hidden').length) |
1589 | - { |
1590 | - $(".sidesubnavi").hide(); |
1591 | - $("#sidesubnavi-"+menu_tag).show(); |
1592 | - return false; |
1593 | - } else { |
1594 | - return true; |
1595 | - } |
1596 | -}; |
1597 | - |
1598 | - |
1599 | -SEARCH = new Object(); |
1600 | - |
1601 | -SEARCH.CloseTimer = null; |
1602 | - |
1603 | -SEARCH.Open = function() |
1604 | -{ |
1605 | - NAVI_CancelTimer(); |
1606 | - NAVI_Close(); |
1607 | - SEARCH_CancelTimer(); |
1608 | - SEARCH_Close(); |
1609 | - var pos = $("#searchlink-anchor").offset(); |
1610 | - $("#search-dropdown").css( { "position": "absolute", "left": (pos.left - ($("#search-dropdown").width()) + 40) + "px", "top": (pos.top + 36) + "px" } ); |
1611 | - $("#search-dropdown").show(); |
1612 | - $("#searchlink-anchor").bind('mouseover',NAVI_CancelTimer); |
1613 | - $("#searchlink-anchor").bind('mouseout',NAVI_Timer); |
1614 | - $("#search-dropdown").bind('mouseover',NAVI_CancelTimer); |
1615 | - $("#search-dropdown").bind('mouseout',NAVI_Timer); |
1616 | - $("#search-input")[0].focus(); |
1617 | -}; |
1618 | - |
1619 | -function SEARCH_Close() |
1620 | -{ |
1621 | - $(".navi-dropdown").hide(); |
1622 | - $("#menu div").unbind('mouseover'); |
1623 | - $(".dropdown").unbind('mouseover'); |
1624 | - $(".dropdown").unbind('mouseout'); |
1625 | - |
1626 | - $("#search-dropdown").hide(); |
1627 | - $("#searchlink-anchor").unbind('mouseover'); |
1628 | - $("#searchlink-anchor").unbind('mouseout'); |
1629 | - $("#search-dropdown").unbind('mouseover'); |
1630 | - $("#search-dropdown").unbind('mouseout'); |
1631 | -} |
1632 | - |
1633 | - |
1634 | -function SEARCH_CancelTimer() |
1635 | -{ |
1636 | - if (SEARCH.CloseTimer!=null) |
1637 | - { |
1638 | - window.clearTimeout(SEARCH.CloseTimer); |
1639 | - SEARCH.CloseTimer = null; |
1640 | - } |
1641 | -} |
1642 | - |
1643 | -function SEARCH_Timer() |
1644 | -{ |
1645 | - if (SEARCH.CloseTimer==null) |
1646 | - { |
1647 | - SEARCH.CloseTimer = window.setTimeout(SEARCH_Close, 300); |
1648 | - } |
1649 | -} |
1650 | - |
1651 | -menuImg1 = new Image(); menuImg1.src = 'http://s1.percona.com/ui-dropdown-header-l.png'; |
1652 | -menuImg2 = new Image(); menuImg2.src = 'http://s2.percona.com/ui-dropdown-header-r.png'; |
1653 | -menuImg3 = new Image(); menuImg3.src = 'http://s3.percona.com/ui-dropdown-header-search.png'; |
1654 | -menuImg4 = new Image(); menuImg4.src = 'http://s0.percona.com/ui-dropdown-bg.png'; |
1655 | -menuImg5 = new Image(); menuImg5.src = 'http://s1.percona.com/ui-dropdown-footer.png'; |
1656 | - |
1657 | - |
1658 | -}); |
1659 | - |
1660 | - |
1661 | -var Percona = { |
1662 | - ssl: false, |
1663 | - host: 'www.percona.com' |
1664 | -}; |
1665 | -/** |
1666 | - * @param string selector jQuery selector string |
1667 | - */ |
1668 | -Percona.getRecentServerVersion = function(selector) |
1669 | -{ |
1670 | - if ('string' != typeof(selector)) |
1671 | - { |
1672 | - alert('Percona.getRecentServerVersion: missed or wrong selector!'); |
1673 | - } |
1674 | - /* Localize jQuery variable */ |
1675 | - var jQuery; |
1676 | - /******** Load jQuery if not present *********/ |
1677 | - if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.4.2') |
1678 | - { |
1679 | - var script_tag = document.createElement('script'); |
1680 | - script_tag.setAttribute("type","text/javascript"); |
1681 | - script_tag.setAttribute('src', 'http' + (Percona.ssl ? 's' : '') + ':/' + '/ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'); |
1682 | - script_tag.onload = scriptLoadHandler; |
1683 | - script_tag.onreadystatechange = function () /* Same thing but for IE */ |
1684 | - { |
1685 | - if (this.readyState == 'complete' || this.readyState == 'loaded') |
1686 | - { |
1687 | - scriptLoadHandler(); |
1688 | - } |
1689 | - }; |
1690 | - /* Try to find the head, otherwise default to the documentElement */ |
1691 | - (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag); |
1692 | - } else { |
1693 | - /* The jQuery version on the window is the one we want to use */ |
1694 | - jQuery = window.jQuery; |
1695 | - main(); |
1696 | - } |
1697 | - var scriptLoadHandler_counter = 0; |
1698 | - /******** Called once jQuery has loaded ******/ |
1699 | - function scriptLoadHandler() |
1700 | - { |
1701 | - if (++scriptLoadHandler_counter > 1) |
1702 | - { |
1703 | - return; |
1704 | - } |
1705 | - /* Restore $ and window.jQuery to their previous values and store the |
1706 | - new jQuery in our local jQuery variable */ |
1707 | - jQuery = window.jQuery.noConflict(true); |
1708 | - /* Call our main function */ |
1709 | - main(jQuery); |
1710 | - } |
1711 | - /******** Our main function ********/ |
1712 | - function main($) |
1713 | - { |
1714 | - var fillRecentServerVersion = function($) |
1715 | - { |
1716 | - if ($(selector).get(0)) |
1717 | - { |
1718 | - $.get('http' + (Percona.ssl ? 's' : '') + ':/' + '/' + Percona.host + '/ajax/server-version/?callback=?', {}, function(json) |
1719 | - { |
1720 | - if ('object' == typeof(json) && 'string' == typeof(json.recentServerVersion)) |
1721 | - { |
1722 | - $(selector).text(' ' + json.recentServerVersion); |
1723 | - } |
1724 | - }, 'jsonp'); |
1725 | - } |
1726 | - }; |
1727 | - $(document).ready(function() |
1728 | - { |
1729 | - fillRecentServerVersion(jQuery); |
1730 | - }); |
1731 | - } |
1732 | -}; |
1733 | - |
1734 | -$(document).ready(function(){ |
1735 | - $(window).bind("resize", resizeWindow); |
1736 | - resizeWindow(); |
1737 | - function resizeWindow() { |
1738 | - var win_w = $(window).width(); |
1739 | - var ribon = $("#support-ribbon"); |
1740 | - if(win_w < 1265){ |
1741 | - if(/mobile/i.test(navigator.userAgent)){ |
1742 | - ribon.hide(); |
1743 | - }else{ |
1744 | - if(ribon.hasClass("vertical")){ |
1745 | - ribon.removeClass("vertical"); |
1746 | - ribon.addClass("horizontal"); |
1747 | - } |
1748 | - ribon.css({"left":'50%', "margin-left": '-'+(ribon.width() / 2)+'px'}); |
1749 | - } |
1750 | - }else{ |
1751 | - if(ribon.hasClass("horizontal")){ |
1752 | - ribon.addClass("vertical"); |
1753 | - ribon.removeClass("horizontal"); |
1754 | - ribon.removeAttr("style"); |
1755 | - } |
1756 | - |
1757 | - } |
1758 | - } |
1759 | -}); |
1760 | \ No newline at end of file |
1761 | |
1762 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone-small.png' |
1763 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone-small.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone-small.png 1970-01-01 00:00:00 +0000 differ |
1764 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone.png' |
1765 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/phone.png 1970-01-01 00:00:00 +0000 differ |
1766 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/shield.png' |
1767 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/shield.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/shield.png 1970-01-01 00:00:00 +0000 differ |
1768 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js' |
1769 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js 2011-10-25 10:51:19 +0000 |
1770 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/sidebar.js 1970-01-01 00:00:00 +0000 |
1771 | @@ -1,151 +0,0 @@ |
1772 | -/* |
1773 | - * sidebar.js |
1774 | - * ~~~~~~~~~~ |
1775 | - * |
1776 | - * This script makes the Sphinx sidebar collapsible. |
1777 | - * |
1778 | - * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds |
1779 | - * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton |
1780 | - * used to collapse and expand the sidebar. |
1781 | - * |
1782 | - * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden |
1783 | - * and the width of the sidebar and the margin-left of the document |
1784 | - * are decreased. When the sidebar is expanded the opposite happens. |
1785 | - * This script saves a per-browser/per-session cookie used to |
1786 | - * remember the position of the sidebar among the pages. |
1787 | - * Once the browser is closed the cookie is deleted and the position |
1788 | - * reset to the default (expanded). |
1789 | - * |
1790 | - * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. |
1791 | - * :license: BSD, see LICENSE for details. |
1792 | - * |
1793 | - */ |
1794 | - |
1795 | -$(function() { |
1796 | - // global elements used by the functions. |
1797 | - // the 'sidebarbutton' element is defined as global after its |
1798 | - // creation, in the add_sidebar_button function |
1799 | - var bodywrapper = $('.bodywrapper'); |
1800 | - var sidebar = $('.sphinxsidebar'); |
1801 | - var sidebarwrapper = $('.sphinxsidebarwrapper'); |
1802 | - |
1803 | - // for some reason, the document has no sidebar; do not run into errors |
1804 | - if (!sidebar.length) return; |
1805 | - |
1806 | - // original margin-left of the bodywrapper and width of the sidebar |
1807 | - // with the sidebar expanded |
1808 | - var bw_margin_expanded = bodywrapper.css('margin-left'); |
1809 | - var ssb_width_expanded = sidebar.width(); |
1810 | - |
1811 | - // margin-left of the bodywrapper and width of the sidebar |
1812 | - // with the sidebar collapsed |
1813 | - var bw_margin_collapsed = '.8em'; |
1814 | - var ssb_width_collapsed = '.8em'; |
1815 | - |
1816 | - // colors used by the current theme |
1817 | - var dark_color = $('.related').css('background-color'); |
1818 | - var light_color = $('.document').css('background-color'); |
1819 | - |
1820 | - function sidebar_is_collapsed() { |
1821 | - return sidebarwrapper.is(':not(:visible)'); |
1822 | - } |
1823 | - |
1824 | - function toggle_sidebar() { |
1825 | - if (sidebar_is_collapsed()) |
1826 | - expand_sidebar(); |
1827 | - else |
1828 | - collapse_sidebar(); |
1829 | - } |
1830 | - |
1831 | - function collapse_sidebar() { |
1832 | - sidebarwrapper.hide(); |
1833 | - sidebar.css('width', ssb_width_collapsed); |
1834 | - bodywrapper.css('margin-left', bw_margin_collapsed); |
1835 | - sidebarbutton.css({ |
1836 | - 'margin-left': '0', |
1837 | - 'height': bodywrapper.height() |
1838 | - }); |
1839 | - sidebarbutton.find('span').text('»'); |
1840 | - sidebarbutton.attr('title', _('Expand sidebar')); |
1841 | - document.cookie = 'sidebar=collapsed'; |
1842 | - } |
1843 | - |
1844 | - function expand_sidebar() { |
1845 | - bodywrapper.css('margin-left', bw_margin_expanded); |
1846 | - sidebar.css('width', ssb_width_expanded); |
1847 | - sidebarwrapper.show(); |
1848 | - sidebarbutton.css({ |
1849 | - 'margin-left': ssb_width_expanded-12, |
1850 | - 'height': bodywrapper.height() |
1851 | - }); |
1852 | - sidebarbutton.find('span').text('«'); |
1853 | - sidebarbutton.attr('title', _('Collapse sidebar')); |
1854 | - document.cookie = 'sidebar=expanded'; |
1855 | - } |
1856 | - |
1857 | - function add_sidebar_button() { |
1858 | - sidebarwrapper.css({ |
1859 | - 'float': 'left', |
1860 | - 'margin-right': '0', |
1861 | - 'width': ssb_width_expanded - 28 |
1862 | - }); |
1863 | - // create the button |
1864 | - sidebar.append( |
1865 | - '<div id="sidebarbutton"><span>«</span></div>' |
1866 | - ); |
1867 | - var sidebarbutton = $('#sidebarbutton'); |
1868 | - light_color = sidebarbutton.css('background-color'); |
1869 | - // find the height of the viewport to center the '<<' in the page |
1870 | - var viewport_height; |
1871 | - if (window.innerHeight) |
1872 | - viewport_height = window.innerHeight; |
1873 | - else |
1874 | - viewport_height = $(window).height(); |
1875 | - sidebarbutton.find('span').css({ |
1876 | - 'display': 'block', |
1877 | - 'margin-top': (viewport_height - sidebar.position().top - 20) / 2 |
1878 | - }); |
1879 | - |
1880 | - sidebarbutton.click(toggle_sidebar); |
1881 | - sidebarbutton.attr('title', _('Collapse sidebar')); |
1882 | - sidebarbutton.css({ |
1883 | - 'color': '#FFFFFF', |
1884 | - 'border-left': '1px solid ' + dark_color, |
1885 | - 'font-size': '1.2em', |
1886 | - 'cursor': 'pointer', |
1887 | - 'height': bodywrapper.height(), |
1888 | - 'padding-top': '1px', |
1889 | - 'margin-left': ssb_width_expanded - 12 |
1890 | - }); |
1891 | - |
1892 | - sidebarbutton.hover( |
1893 | - function () { |
1894 | - $(this).css('background-color', dark_color); |
1895 | - }, |
1896 | - function () { |
1897 | - $(this).css('background-color', light_color); |
1898 | - } |
1899 | - ); |
1900 | - } |
1901 | - |
1902 | - function set_position_from_cookie() { |
1903 | - if (!document.cookie) |
1904 | - return; |
1905 | - var items = document.cookie.split(';'); |
1906 | - for(var k=0; k<items.length; k++) { |
1907 | - var key_val = items[k].split('='); |
1908 | - var key = key_val[0]; |
1909 | - if (key == 'sidebar') { |
1910 | - var value = key_val[1]; |
1911 | - if ((value == 'collapsed') && (!sidebar_is_collapsed())) |
1912 | - collapse_sidebar(); |
1913 | - else if ((value == 'expanded') && (sidebar_is_collapsed())) |
1914 | - expand_sidebar(); |
1915 | - } |
1916 | - } |
1917 | - } |
1918 | - |
1919 | - add_sidebar_button(); |
1920 | - var sidebarbutton = $('#sidebarbutton'); |
1921 | - set_position_from_cookie(); |
1922 | -}); |
1923 | |
1924 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-download.png' |
1925 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-download.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-download.png 1970-01-01 00:00:00 +0000 differ |
1926 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-latest.png' |
1927 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-latest.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/software-latest.png 1970-01-01 00:00:00 +0000 differ |
1928 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/support-small.png' |
1929 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/support-small.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/support-small.png 1970-01-01 00:00:00 +0000 differ |
1930 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-bg.png' |
1931 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-bg.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-bg.png 1970-01-01 00:00:00 +0000 differ |
1932 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-footer.png' |
1933 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-footer.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-footer.png 1970-01-01 00:00:00 +0000 differ |
1934 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-l.png' |
1935 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-l.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-l.png 1970-01-01 00:00:00 +0000 differ |
1936 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-r.png' |
1937 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-r.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-r.png 1970-01-01 00:00:00 +0000 differ |
1938 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-search.png' |
1939 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-search.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-dropdown-header-search.png 1970-01-01 00:00:00 +0000 differ |
1940 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-footer-logo.png' |
1941 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-footer-logo.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-footer-logo.png 1970-01-01 00:00:00 +0000 differ |
1942 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-leftnavi-sel.png' |
1943 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-leftnavi-sel.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-leftnavi-sel.png 1970-01-01 00:00:00 +0000 differ |
1944 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-logo.png' |
1945 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-logo.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-logo.png 1970-01-01 00:00:00 +0000 differ |
1946 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-l.png' |
1947 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-l.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-l.png 1970-01-01 00:00:00 +0000 differ |
1948 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-r.png' |
1949 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-r.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-hover-r.png 1970-01-01 00:00:00 +0000 differ |
1950 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-l.png' |
1951 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-l.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-l.png 1970-01-01 00:00:00 +0000 differ |
1952 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-r.png' |
1953 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-r.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-r.png 1970-01-01 00:00:00 +0000 differ |
1954 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-l.png' |
1955 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-l.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-l.png 1970-01-01 00:00:00 +0000 differ |
1956 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-r.png' |
1957 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-r.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-navi-sel-r.png 1970-01-01 00:00:00 +0000 differ |
1958 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-content.png' |
1959 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-content.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-content.png 1970-01-01 00:00:00 +0000 differ |
1960 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-front.png' |
1961 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-front.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-orange-front.png 1970-01-01 00:00:00 +0000 differ |
1962 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-search.png' |
1963 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-search.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-search.png 1970-01-01 00:00:00 +0000 differ |
1964 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-tab-bg.png' |
1965 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-tab-bg.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/ui-tab-bg.png 1970-01-01 00:00:00 +0000 differ |
1966 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/warning.png' |
1967 | Binary files Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/warning.png 2011-10-25 10:51:19 +0000 and Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/static/warning.png 1970-01-01 00:00:00 +0000 differ |
1968 | === removed file 'Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf' |
1969 | --- Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf 2011-10-25 10:51:19 +0000 |
1970 | +++ Percona-Server/plugin/percona-pam-for-mysql/doc/source/percona-theme/theme.conf 1970-01-01 00:00:00 +0000 |
1971 | @@ -1,32 +0,0 @@ |
1972 | -[theme] |
1973 | -inherit = default |
1974 | -stylesheet = default.css |
1975 | -pygments_style = sphinx |
1976 | - |
1977 | -[options] |
1978 | -rightsidebar = false |
1979 | -stickysidebar = false |
1980 | -collapsiblesidebar = false |
1981 | -externalrefs = false |
1982 | - |
1983 | -footerbgcolor = #11303d |
1984 | -footertextcolor = #ffffff |
1985 | -sidebarbgcolor = #1c4e63 |
1986 | -sidebarbtncolor = #3c6e83 |
1987 | -sidebartextcolor = #ffffff |
1988 | -sidebarlinkcolor = #98dbcc |
1989 | -relbarbgcolor = #133f52 |
1990 | -relbartextcolor = #ffffff |
1991 | -relbarlinkcolor = #ffffff |
1992 | -bgcolor = #ffffff |
1993 | -textcolor = #000000 |
1994 | -headbgcolor = #f2f2f2 |
1995 | -headtextcolor = #20435c |
1996 | -headlinkcolor = #c60f0f |
1997 | -linkcolor = #355f7c |
1998 | -visitedlinkcolor = #355f7c |
1999 | -codebgcolor = #eeffcc |
2000 | -codetextcolor = #333333 |
2001 | - |
2002 | -bodyfont = sans-serif |
2003 | -headfont = 'Arial', 'Helvetica' sans-serif |
2004 | |
2005 | === modified file 'Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h' |
2006 | --- Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h 2012-02-13 06:19:11 +0000 |
2007 | +++ Percona-Server/plugin/percona-pam-for-mysql/src/auth_pam_common.h 2012-06-27 07:03:19 +0000 |
2008 | @@ -31,7 +31,11 @@ |
2009 | |
2010 | #include <security/pam_appl.h> |
2011 | #include <security/pam_modules.h> |
2012 | +#if HAVE_SECURITY_PAM_MISC_H |
2013 | #include <security/pam_misc.h> |
2014 | +#elif HAVE_SECURITY_OPENPAM_H |
2015 | +#include <security/openpam.h> |
2016 | +#endif |
2017 | |
2018 | #include <mysql/plugin.h> |
2019 | #include <mysql/plugin_auth.h> |
2020 | |
2021 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/test' |
2022 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh' |
2023 | --- Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh 1970-01-01 00:00:00 +0000 |
2024 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/bootstrap.sh 2012-06-27 07:03:19 +0000 |
2025 | @@ -0,0 +1,122 @@ |
2026 | +#!/bin/bash |
2027 | + |
2028 | +set -e |
2029 | + |
2030 | +function usage() |
2031 | +{ |
2032 | + cat <<EOF |
2033 | +Usage: |
2034 | +$0 xtrabackup_target [installation_directory] |
2035 | +$0 path_to_server_tarball [installation_directory] |
2036 | + |
2037 | +Prepares a server binary directory to be used by run.sh when running XtraBackup |
2038 | +tests. |
2039 | + |
2040 | +If the argument is one of the build targets passed to build.sh |
2041 | +(i.e. innodb51_builtin innodb51 innodb55 xtradb51 xtradb55) then the |
2042 | +appropriate Linux tarball is downloaded from a pre-defined location and |
2043 | +unpacked into the specified installation directory ('./server' by default). |
2044 | + |
2045 | +Otherwise the argument is assumed to be a path to a server binary tarball. |
2046 | +EOF |
2047 | +} |
2048 | + |
2049 | +if [ -z "$1" ] |
2050 | +then |
2051 | + usage |
2052 | +fi |
2053 | + |
2054 | +arch="`uname -m`" |
2055 | +if [ "$arch" = "i386" ] |
2056 | +then |
2057 | + arch="i686" |
2058 | +fi |
2059 | + |
2060 | +case "$1" in |
2061 | + innodb51_builtin | innodb51) |
2062 | + url="http://s3.amazonaws.com/percona.com/downloads/community" |
2063 | + tarball="mysql-5.1.49-linux-$arch-glibc23.tar.gz" |
2064 | + ;; |
2065 | + innodb55) |
2066 | + url="http://s3.amazonaws.com/percona.com/downloads/community" |
2067 | + tarball="mysql-5.5.16-linux2.6-$arch.tar.gz" |
2068 | + ;; |
2069 | + xtradb51) |
2070 | + url="http://www.percona.com/redir/downloads/Percona-Server-5.1/Percona-Server-5.1.60-13.1/binary/linux/$arch" |
2071 | + tarball="Percona-Server-5.1.60-rel13.1-413.Linux.$arch.tar.gz" |
2072 | + ;; |
2073 | + xtradb55) |
2074 | + url="http://s3.amazonaws.com/percona.com/downloads/Percona-Server-5.5/Percona-Server-5.5.11-20.2/Linux/binary" |
2075 | + tarball="Percona-Server-5.5.11-rel20.2-116.Linux.$arch.tar.gz" |
2076 | + ;; |
2077 | + galera55) |
2078 | + galera=1 |
2079 | + ;; |
2080 | + *) |
2081 | + if ! test -r "$1" |
2082 | + then |
2083 | + echo "$1 does not exist" |
2084 | + exit 1 |
2085 | + fi |
2086 | + tarball="$1" |
2087 | + ;; |
2088 | +esac |
2089 | + |
2090 | +if test -n "$2" |
2091 | +then |
2092 | + destdir="$2" |
2093 | +else |
2094 | + destdir="./server" |
2095 | +fi |
2096 | + |
2097 | +if test -d "$destdir" |
2098 | +then |
2099 | + rm -rf "$destdir" |
2100 | +fi |
2101 | +mkdir "$destdir" |
2102 | + |
2103 | +if test ! $galera |
2104 | +then |
2105 | + if test -n "$url" |
2106 | + then |
2107 | + echo "Downloading $tarball" |
2108 | + wget -qc "$url/$tarball" |
2109 | + fi |
2110 | + |
2111 | + echo "Unpacking $tarball into $destdir" |
2112 | + tar zxf $tarball -C $destdir |
2113 | + sourcedir="$destdir/`ls $destdir`" |
2114 | + if test -n "$sourcedir" |
2115 | + then |
2116 | + mv $sourcedir/* $destdir |
2117 | + rm -rf $sourcedir |
2118 | + fi |
2119 | +else |
2120 | + if test ! -d galerabuild |
2121 | + then |
2122 | + bzr init-repo galerabuild |
2123 | + fi |
2124 | + cd galerabuild |
2125 | + |
2126 | + rm -rf percona-xtradb-cluster |
2127 | + bzr branch lp:percona-xtradb-cluster percona-xtradb-cluster |
2128 | + rm -rf galera2x |
2129 | + bzr branch lp:galera/2.x galera2x |
2130 | + cd percona-xtradb-cluster |
2131 | + cmake -DENABLE_DTRACE=0 -DWITH_WSREP:BOOL="1" -DCMAKE_INSTALL_PREFIX="../../server" |
2132 | + |
2133 | + if test -f /proc/cpuinfo |
2134 | + then |
2135 | + MAKE_J=`grep '^processor' /proc/cpuinfo | wc -l` |
2136 | + else |
2137 | + MAKE_J=4 |
2138 | + fi |
2139 | + |
2140 | + make -j$MAKE_J |
2141 | + make install |
2142 | + |
2143 | + cd ../galera2x |
2144 | + ./scripts/build.sh |
2145 | + cp libgalera_smm.so ../../server/ |
2146 | + cd .. |
2147 | +fi |
2148 | |
2149 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp' |
2150 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs' |
2151 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/_build' |
2152 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/_static' |
2153 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/_templates' |
2154 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py' |
2155 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py 1970-01-01 00:00:00 +0000 |
2156 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/conf.py 2012-06-27 07:03:19 +0000 |
2157 | @@ -0,0 +1,216 @@ |
2158 | +# -*- coding: utf-8 -*- |
2159 | +# |
2160 | +# kewpie documentation build configuration file, created by |
2161 | +# sphinx-quickstart on Mon Dec 5 12:35:13 2011. |
2162 | +# |
2163 | +# This file is execfile()d with the current directory set to its containing dir. |
2164 | +# |
2165 | +# Note that not all possible configuration values are present in this |
2166 | +# autogenerated file. |
2167 | +# |
2168 | +# All configuration values have a default; values that are commented out |
2169 | +# serve to show the default. |
2170 | + |
2171 | +import sys, os |
2172 | + |
2173 | +# If extensions (or modules to document with autodoc) are in another directory, |
2174 | +# add these directories to sys.path here. If the directory is relative to the |
2175 | +# documentation root, use os.path.abspath to make it absolute, like shown here. |
2176 | +#sys.path.insert(0, os.path.abspath('.')) |
2177 | + |
2178 | +# -- General configuration ----------------------------------------------------- |
2179 | + |
2180 | +# If your documentation needs a minimal Sphinx version, state it here. |
2181 | +#needs_sphinx = '1.0' |
2182 | + |
2183 | +# Add any Sphinx extension module names here, as strings. They can be extensions |
2184 | +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. |
2185 | +extensions = ['sphinx.ext.autodoc'] |
2186 | + |
2187 | +# Add any paths that contain templates here, relative to this directory. |
2188 | +templates_path = ['_templates'] |
2189 | + |
2190 | +# The suffix of source filenames. |
2191 | +source_suffix = '.rst' |
2192 | + |
2193 | +# The encoding of source files. |
2194 | +#source_encoding = 'utf-8-sig' |
2195 | + |
2196 | +# The master toctree document. |
2197 | +master_doc = 'index' |
2198 | + |
2199 | +# General information about the project. |
2200 | +project = u'kewpie' |
2201 | +copyright = u'2011, pcrews' |
2202 | + |
2203 | +# The version info for the project you're documenting, acts as replacement for |
2204 | +# |version| and |release|, also used in various other places throughout the |
2205 | +# built documents. |
2206 | +# |
2207 | +# The short X.Y version. |
2208 | +version = '1.2.1' |
2209 | +# The full version, including alpha/beta/rc tags. |
2210 | +release = '1.2.1' |
2211 | + |
2212 | +# The language for content autogenerated by Sphinx. Refer to documentation |
2213 | +# for a list of supported languages. |
2214 | +#language = None |
2215 | + |
2216 | +# There are two options for replacing |today|: either, you set today to some |
2217 | +# non-false value, then it is used: |
2218 | +#today = '' |
2219 | +# Else, today_fmt is used as the format for a strftime call. |
2220 | +#today_fmt = '%B %d, %Y' |
2221 | + |
2222 | +# List of patterns, relative to source directory, that match files and |
2223 | +# directories to ignore when looking for source files. |
2224 | +exclude_patterns = ['_build'] |
2225 | + |
2226 | +# The reST default role (used for this markup: `text`) to use for all documents. |
2227 | +#default_role = None |
2228 | + |
2229 | +# If true, '()' will be appended to :func: etc. cross-reference text. |
2230 | +#add_function_parentheses = True |
2231 | + |
2232 | +# If true, the current module name will be prepended to all description |
2233 | +# unit titles (such as .. function::). |
2234 | +#add_module_names = True |
2235 | + |
2236 | +# If true, sectionauthor and moduleauthor directives will be shown in the |
2237 | +# output. They are ignored by default. |
2238 | +#show_authors = False |
2239 | + |
2240 | +# The name of the Pygments (syntax highlighting) style to use. |
2241 | +pygments_style = 'sphinx' |
2242 | + |
2243 | +# A list of ignored prefixes for module index sorting. |
2244 | +#modindex_common_prefix = [] |
2245 | + |
2246 | + |
2247 | +# -- Options for HTML output --------------------------------------------------- |
2248 | + |
2249 | +# The theme to use for HTML and HTML Help pages. See the documentation for |
2250 | +# a list of builtin themes. |
2251 | +html_theme = 'default' |
2252 | + |
2253 | +# Theme options are theme-specific and customize the look and feel of a theme |
2254 | +# further. For a list of options available for each theme, see the |
2255 | +# documentation. |
2256 | +#html_theme_options = {} |
2257 | + |
2258 | +# Add any paths that contain custom themes here, relative to this directory. |
2259 | +#html_theme_path = [] |
2260 | + |
2261 | +# The name for this set of Sphinx documents. If None, it defaults to |
2262 | +# "<project> v<release> documentation". |
2263 | +#html_title = None |
2264 | + |
2265 | +# A shorter title for the navigation bar. Default is the same as html_title. |
2266 | +#html_short_title = None |
2267 | + |
2268 | +# The name of an image file (relative to this directory) to place at the top |
2269 | +# of the sidebar. |
2270 | +#html_logo = None |
2271 | + |
2272 | +# The name of an image file (within the static path) to use as favicon of the |
2273 | +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 |
2274 | +# pixels large. |
2275 | +#html_favicon = None |
2276 | + |
2277 | +# Add any paths that contain custom static files (such as style sheets) here, |
2278 | +# relative to this directory. They are copied after the builtin static files, |
2279 | +# so a file named "default.css" will overwrite the builtin "default.css". |
2280 | +html_static_path = ['_static'] |
2281 | + |
2282 | +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, |
2283 | +# using the given strftime format. |
2284 | +#html_last_updated_fmt = '%b %d, %Y' |
2285 | + |
2286 | +# If true, SmartyPants will be used to convert quotes and dashes to |
2287 | +# typographically correct entities. |
2288 | +#html_use_smartypants = True |
2289 | + |
2290 | +# Custom sidebar templates, maps document names to template names. |
2291 | +#html_sidebars = {} |
2292 | + |
2293 | +# Additional templates that should be rendered to pages, maps page names to |
2294 | +# template names. |
2295 | +#html_additional_pages = {} |
2296 | + |
2297 | +# If false, no module index is generated. |
2298 | +#html_domain_indices = True |
2299 | + |
2300 | +# If false, no index is generated. |
2301 | +#html_use_index = True |
2302 | + |
2303 | +# If true, the index is split into individual pages for each letter. |
2304 | +#html_split_index = False |
2305 | + |
2306 | +# If true, links to the reST sources are added to the pages. |
2307 | +#html_show_sourcelink = True |
2308 | + |
2309 | +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. |
2310 | +#html_show_sphinx = True |
2311 | + |
2312 | +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. |
2313 | +#html_show_copyright = True |
2314 | + |
2315 | +# If true, an OpenSearch description file will be output, and all pages will |
2316 | +# contain a <link> tag referring to it. The value of this option must be the |
2317 | +# base URL from which the finished HTML is served. |
2318 | +#html_use_opensearch = '' |
2319 | + |
2320 | +# This is the file name suffix for HTML files (e.g. ".xhtml"). |
2321 | +#html_file_suffix = None |
2322 | + |
2323 | +# Output file base name for HTML help builder. |
2324 | +htmlhelp_basename = 'kewpiedoc' |
2325 | + |
2326 | + |
2327 | +# -- Options for LaTeX output -------------------------------------------------- |
2328 | + |
2329 | +# The paper size ('letter' or 'a4'). |
2330 | +#latex_paper_size = 'letter' |
2331 | + |
2332 | +# The font size ('10pt', '11pt' or '12pt'). |
2333 | +#latex_font_size = '10pt' |
2334 | + |
2335 | +# Grouping the document tree into LaTeX files. List of tuples |
2336 | +# (source start file, target name, title, author, documentclass [howto/manual]). |
2337 | +latex_documents = [ |
2338 | + ('index', 'kewpie.tex', u'kewpie Documentation', |
2339 | + u'pcrews', 'manual'), |
2340 | +] |
2341 | + |
2342 | +# The name of an image file (relative to this directory) to place at the top of |
2343 | +# the title page. |
2344 | +#latex_logo = None |
2345 | + |
2346 | +# For "manual" documents, if this is true, then toplevel headings are parts, |
2347 | +# not chapters. |
2348 | +#latex_use_parts = False |
2349 | + |
2350 | +# If true, show page references after internal links. |
2351 | +#latex_show_pagerefs = False |
2352 | + |
2353 | +# If true, show URL addresses after external links. |
2354 | +#latex_show_urls = False |
2355 | + |
2356 | +# Additional stuff for the LaTeX preamble. |
2357 | +#latex_preamble = '' |
2358 | + |
2359 | +# Documents to append as an appendix to all manuals. |
2360 | +#latex_appendices = [] |
2361 | + |
2362 | +# If false, no module index is generated. |
2363 | +#latex_domain_indices = True |
2364 | + |
2365 | + |
2366 | +# -- Options for manual page output -------------------------------------------- |
2367 | + |
2368 | +# One entry per manual page. List of tuples |
2369 | +# (source start file, name, description, authors, manual section). |
2370 | +man_pages = [ |
2371 | + ('index', 'kewpie', u'kewpie Documentation', |
2372 | + [u'pcrews'], 1) |
2373 | +] |
2374 | |
2375 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst' |
2376 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst 1970-01-01 00:00:00 +0000 |
2377 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/dbqp.rst 2012-06-27 07:03:19 +0000 |
2378 | @@ -0,0 +1,21 @@ |
2379 | +********************************** |
2380 | +dbqp |
2381 | +********************************** |
2382 | + |
2383 | +Synopsis |
2384 | +======== |
2385 | +Database Quality Platform. Versatile, pluggable test runner for MySQL-based databases |
2386 | + |
2387 | +**./kewpie** [ *OPTIONS* ] [ TESTCASE ] |
2388 | + |
2389 | +Description |
2390 | +=========== |
2391 | + |
2392 | +:program:`kewpie.py` is intended to provide a standardized |
2393 | +platform to facilitate testing MySQL databases. Currently a number of MySQL variants are supported and include: |
2394 | +* Drizzle |
2395 | +* MySQL |
2396 | +* Percona Server |
2397 | +* MySQL using Galera replication |
2398 | + |
2399 | +NOTE: dbqp has been renamed to kewpie and you should refer to this page for documentation: :doc:`kewpie` |
2400 | |
2401 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst' |
2402 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst 1970-01-01 00:00:00 +0000 |
2403 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/index.rst 2012-06-27 07:03:19 +0000 |
2404 | @@ -0,0 +1,34 @@ |
2405 | +.. kewpie documentation master file, created by |
2406 | + sphinx-quickstart on Mon Dec 5 12:35:13 2011. |
2407 | + You can adapt this file completely to your liking, but it should at least |
2408 | + contain the root `toctree` directive. |
2409 | + |
2410 | +Welcome to kewpie's documentation! |
2411 | +=================================== |
2412 | + |
2413 | +kewpie ((database) Quality Platform) is designed to facilitate testing of MySQL-based database systems. Its aim is to provide a pluggable system that can run a variety of testing tools via standard helper code (server allocation and management / test result reporting / etc) |
2414 | + |
2415 | +Introduction: |
2416 | +------------- |
2417 | +.. toctree:: |
2418 | + :maxdepth: 2 |
2419 | + |
2420 | +Testing: |
2421 | +-------- |
2422 | +.. toctree:: |
2423 | + :maxdepth: 2 |
2424 | + |
2425 | + kewpie.rst |
2426 | + writing_tests.rst |
2427 | + randgen.rst |
2428 | + test-run.rst |
2429 | + sql-bench.rst |
2430 | + sysbench.rst |
2431 | + writing_tests.rst |
2432 | + |
2433 | +Indices and tables |
2434 | +================== |
2435 | + |
2436 | +* :ref:`genindex` |
2437 | +* :ref:`search` |
2438 | + |
2439 | |
2440 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst' |
2441 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst 1970-01-01 00:00:00 +0000 |
2442 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/kewpie.rst 2012-06-27 07:03:19 +0000 |
2443 | @@ -0,0 +1,498 @@ |
2444 | +********************************** |
2445 | +kewpie |
2446 | +********************************** |
2447 | + |
2448 | +Synopsis |
2449 | +======== |
2450 | +Database Quality Platform. Versatile, pluggable test runner for MySQL-based databases |
2451 | + |
2452 | +**./kewpie** [ *OPTIONS* ] [ TESTCASE ] |
2453 | + |
2454 | +Description |
2455 | +=========== |
2456 | + |
2457 | +:program:`kewpie.py` is intended to provide a standardized |
2458 | +platform to facilitate testing MySQL databases. Currently a number of MySQL variants are supported and include: |
2459 | +* Drizzle |
2460 | +* MySQL |
2461 | +* Percona Server |
2462 | +* MySQL using Galera replication |
2463 | + |
2464 | +Designed as a response to the sometimes painfully diverse ecosystem of testing tools, the intent is to provide a system that standardizes common testing tasks while providing a variety of ways to analyze the behavior of database systems. |
2465 | + |
2466 | +Long experience with MySQL testing has shown that a number of tasks are common to all tests: |
2467 | +* Allocation and management of test servers |
2468 | +* Test collection and management |
2469 | +* Reporting of test results |
2470 | + |
2471 | +Kewpie combines this with the flexibity of Python's unittest framework. By allowing users to write tests as Python modules, we have great flexibility in how we start and set up servers, what we do to them, and how we assess their performance of our test tasks. Some of the tasks kewpie test cases cover: |
2472 | +* randgen tests |
2473 | +* running sql-bench comprehensive tests |
2474 | +* running sql-bench crashme |
2475 | +* running sysbench |
2476 | +* running drizzle-test-run test cases |
2477 | +* more direct tests using python code and helper libraries |
2478 | + |
2479 | +Provided test suites |
2480 | +======================= |
2481 | + |
2482 | +* MySQL / Percona Server / Galera tests: |
2483 | + |
2484 | + * randgen_basic - basic randgen tests of the server (optimizer stress, etc) |
2485 | + * randgen_bugs - holder suite for failing tests |
2486 | + * crashme - sql-bench's crashme suite (may take some time to run) |
2487 | + * sqlbench - sql-bench comprehensive suite. (may take ~45 min. to execute) |
2488 | + * cluster_basic - small, atomic tests of replication functionality. Tests are written in such a way as to be portable across server types (!) |
2489 | + * cluster_bugs - holder suite for failing tests |
2490 | + * cluster_randgen - tests of replication functionality using the random query generator and relevant test loads |
2491 | + * xtrabackup_basic - tests of the Percona Xtrabackup tool |
2492 | + * xtrabackup_bugs - hoder suite for failing tests |
2493 | + |
2494 | +* Drizzle tests: |
2495 | + |
2496 | + * randgen_basic - basic tests of the server (optimizer stress, etc) |
2497 | + * The following all use the same transaction tests, but validate different functionality: |
2498 | + |
2499 | + * randgen_trxLog - tests the file-based replication log |
2500 | + * randgen_innoTrxLog - tests the innodb-table-based replication log |
2501 | + * randgen_slavePlugin - tests the functionality of the replication / slave plugin |
2502 | + |
2503 | + * crashme - sql-bench's crashme suite (may take some time to run) |
2504 | + * sqlbench - sql-bench comprehensive suite. (may take ~45 min. to execute) |
2505 | + |
2506 | + |
2507 | +Running tests |
2508 | +========================= |
2509 | + |
2510 | +There are several different ways to run tests using :program:`kewpie.py`. |
2511 | + |
2512 | +It should be noted that unless :option:`--force` is used, the program will |
2513 | +stop execution upon encountering the first failing test. |
2514 | +:option:`--force` is recommended if you are running several tests - it will |
2515 | +allow you to view all successes and failures in one run. |
2516 | + |
2517 | +Running individual tests |
2518 | +------------------------ |
2519 | +If one only wants to run a few, specific tests, they may do so this way:: |
2520 | + |
2521 | + ./kewpie.py [OPTIONS] test1 [test2 ... testN] |
2522 | + |
2523 | +Running all tests within a suite |
2524 | +-------------------------------- |
2525 | +Many of the tests supplied with Drizzle are organized into suites. |
2526 | + |
2527 | +The tests within drizzle/tests/t are considered the 'main' suite. |
2528 | +Other suites are located in either drizzle/tests/suite or within the various |
2529 | +directories in drizzle/plugin. Tests for a specific plugin should live in |
2530 | +the plugin's directory - drizzle/plugin/example_plugin/tests |
2531 | + |
2532 | +To run the tests in a specific suite:: |
2533 | + |
2534 | + ./kewpie.py [OPTIONS] --suite=SUITENAME |
2535 | + |
2536 | +Running specific tests within a suite |
2537 | +-------------------------------------- |
2538 | +To run a specific set of tests within a suite:: |
2539 | + |
2540 | + ./kewpie.py [OPTIONS] --suite=SUITENAME TEST1 [TEST2..TESTN] |
2541 | + |
2542 | +Calling tests using <suitename>.<testname> currently does not work. |
2543 | +One must specify the test suite via the :option:`--suite` option. |
2544 | + |
2545 | + |
2546 | +Running all available tests |
2547 | +--------------------------- |
2548 | +Currently, the quickest way to execute all tests in all suites is |
2549 | +to use 'make test-kewpie' from the drizzle root. |
2550 | + |
2551 | +Otherwise, one should simply name all suites:: |
2552 | + |
2553 | + ./kewpie.py [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN |
2554 | + |
2555 | +Interpreting test results |
2556 | +========================= |
2557 | +The output of the test runner is quite simple. Every test should pass. |
2558 | +In the event of a test failure, please take the time to file a bug here: |
2559 | +*https://bugs.launchpad.net/drizzle* |
2560 | + |
2561 | +During a run, the program will provide the user with: |
2562 | + * test name (suite + name) |
2563 | + * test status (pass/fail/skipped) |
2564 | + * time spent executing each test |
2565 | + |
2566 | +At the end of a run, the program will provide the user with a listing of: |
2567 | + * how many tests were run |
2568 | + * counts and percentages of total exectuted for all test statuses |
2569 | + * a listing of failing, skipped, or disabled tests |
2570 | + * total time spent executing the tests |
2571 | + |
2572 | +Example output:: |
2573 | + |
2574 | + <snip> |
2575 | + 30 Jan 2011 16:26:31 : main.small_tmp_table [ pass ] 38 |
2576 | + 30 Jan 2011 16:26:31 : main.snowman [ pass ] 42 |
2577 | + 30 Jan 2011 16:26:31 : main.statement_boundaries [ pass ] 47 |
2578 | + 30 Jan 2011 16:26:31 : main.status [ pass ] 51 |
2579 | + 30 Jan 2011 16:26:31 : main.strict [ pass ] 138 |
2580 | + 30 Jan 2011 16:26:43 : main.subselect [ fail ] 12361 |
2581 | + 30 Jan 2011 16:26:43 : --- drizzle/tests/r/subselect.result 2011-01-30 16:23:54.975776148 -0500 |
2582 | + 30 Jan 2011 16:26:43 : +++ drizzle/tests/r/subselect.reject 2011-01-30 16:26:43.835519303 -0500 |
2583 | + 30 Jan 2011 16:26:43 : @@ -5,7 +5,7 @@ |
2584 | + 30 Jan 2011 16:26:43 : 2 |
2585 | + 30 Jan 2011 16:26:43 : explain extended select (select 2); |
2586 | + 30 Jan 2011 16:26:43 : id select_type table type possible_keys key key_len ref rows filtered Extra |
2587 | + 30 Jan 2011 16:26:43 : -9 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used |
2588 | + 30 Jan 2011 16:26:43 : +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used |
2589 | + <snip> |
2590 | + 30 Jan 2011 16:30:20 : ================================================================================ |
2591 | + 30 Jan 2011 16:30:20 INFO: Test execution complete in 314 seconds |
2592 | + 30 Jan 2011 16:30:20 INFO: Summary report: |
2593 | + 30 Jan 2011 16:30:20 INFO: Executed 552/552 test cases, 100.00 percent |
2594 | + 30 Jan 2011 16:30:20 INFO: STATUS: FAIL, 1/552 test cases, 0.18 percent executed |
2595 | + 30 Jan 2011 16:30:20 INFO: STATUS: PASS, 551/552 test cases, 99.82 percent executed |
2596 | + 30 Jan 2011 16:30:20 INFO: FAIL tests: main.subselect |
2597 | + 30 Jan 2011 16:30:20 INFO: Spent 308 / 314 seconds on: TEST(s) |
2598 | + 30 Jan 2011 16:30:20 INFO: Test execution complete |
2599 | + 30 Jan 2011 16:30:20 INFO: Stopping all running servers... |
2600 | + |
2601 | + |
2602 | +Additional uses |
2603 | +=============== |
2604 | +Starting a server for manual testing |
2605 | +------------------------------------ |
2606 | + |
2607 | +:program:`kewpie.py` allows a user to get a Drizzle server up and running |
2608 | +quickly. This can be useful for fast ad-hoc testing. |
2609 | + |
2610 | +To do so call:: |
2611 | + |
2612 | + ./kewpie.py --start-and-exit [*OPTIONS*] |
2613 | + |
2614 | +This will start a Drizzle server that you can connect to and query |
2615 | + |
2616 | +Starting a server against a pre-populated DATADIR |
2617 | +-------------------------------------------------- |
2618 | + |
2619 | +Using :option:`--start-dirty` prevents :program:`kewpie.py` from attempting |
2620 | +to initialize (clean) the datadir. This can be useful if you want to use |
2621 | +an already-populated datadir for testing. |
2622 | + |
2623 | +NOTE: This feature is still being tested, use caution with your data!!! |
2624 | + |
2625 | +Cleanup mode |
2626 | +------------- |
2627 | +A cleanup mode is provided for user convenience. This simply shuts down |
2628 | +any servers whose pid files are detected in the kewpie workdir. It is mainly |
2629 | +intended as a quick cleanup for post-testing with :option:`--start-and-exit`:: |
2630 | + |
2631 | + ./kewpie.py --mode=cleanup |
2632 | + |
2633 | + Setting --start-dirty=True for cleanup mode... |
2634 | + 23 Feb 2011 11:35:59 INFO: Using Drizzle source tree: |
2635 | + 23 Feb 2011 11:35:59 INFO: basedir: drizzle |
2636 | + 23 Feb 2011 11:35:59 INFO: clientbindir: drizzle/client |
2637 | + 23 Feb 2011 11:35:59 INFO: testdir: drizzle/tests |
2638 | + 23 Feb 2011 11:35:59 INFO: server_version: 2011.02.2188 |
2639 | + 23 Feb 2011 11:35:59 INFO: server_compile_os: unknown-linux-gnu |
2640 | + 23 Feb 2011 11:35:59 INFO: server_platform: x86_64 |
2641 | + 23 Feb 2011 11:35:59 INFO: server_comment: (Source distribution (kewpie_randgen)) |
2642 | + 23 Feb 2011 11:35:59 INFO: Using --start-dirty, not attempting to touch directories |
2643 | + 23 Feb 2011 11:35:59 INFO: Using default-storage-engine: innodb |
2644 | + 23 Feb 2011 11:35:59 INFO: Using testing mode: cleanup |
2645 | + 23 Feb 2011 11:35:59 INFO: Killing pid 10484 from drizzle/tests/workdir/testbot0/server0/var/run/server0.pid |
2646 | + 23 Feb 2011 11:35:59 INFO: Stopping all running servers... |
2647 | + |
2648 | +Program architecture |
2649 | +==================== |
2650 | + |
2651 | +:program:`kewpie.py`'s 'dtr' mode uses a simple diff-based mechanism for testing. |
2652 | +This is the default mode and where the majority of Drizzle testing occurs. |
2653 | +It will execute the statements contained in a test and compare the results |
2654 | +to pre-recorded expected results. In the event of a test failure, you |
2655 | +will be presented with a diff:: |
2656 | + |
2657 | + main.exp1 [ fail ] |
2658 | + --- drizzle/tests/r/exp1.result 2010-11-02 02:10:25.107013998 +0300 |
2659 | + +++ drizzle/tests/r/exp1.reject 2010-11-02 02:10:32.017013999 +0300 |
2660 | + @@ -5,4 +5,5 @@ |
2661 | + a |
2662 | + 1 |
2663 | + 2 |
2664 | + +3 |
2665 | + DROP TABLE t1; |
2666 | + |
2667 | +A test case consists of a .test and a .result file. The .test file includes |
2668 | +the various statements to be executed for a test. The .result file lists |
2669 | +the expected results for a given test file. These files live in tests/t |
2670 | +and tests/r, respectively. This structure is the same for all test suites. |
2671 | + |
2672 | +kewpie.py options |
2673 | +=================== |
2674 | + |
2675 | +The :program:`kewpie.py` tool has several available options: |
2676 | + |
2677 | +./kewpie.py [ OPTIONS ] [ TESTCASE ] |
2678 | + |
2679 | + |
2680 | +Options |
2681 | +------- |
2682 | + |
2683 | +.. program:: kewpie.py |
2684 | + |
2685 | +.. option:: -h, --help |
2686 | + |
2687 | + show this help message and exit |
2688 | + |
2689 | +Configuration controls - kewpie can read config files with certain options pre-set: |
2690 | +--------------------------------------------------------------------------------------------------- |
2691 | + |
2692 | +.. option:: --sys_config_file=SYSCONFIGFILEPATH |
2693 | + |
2694 | + The file that specifies system configuration specs for |
2695 | + kewpie to execute tests (not yet implemented) |
2696 | + |
2697 | +Options for the test-runner itself |
2698 | +---------------------------------- |
2699 | + |
2700 | +.. program:: kewpie.py |
2701 | + |
2702 | +.. option:: --force |
2703 | + |
2704 | + Set this to continue test execution beyond the first failed test |
2705 | + |
2706 | +.. option:: --start-and-exit |
2707 | + |
2708 | + Spin up the server(s) for the first specified test then exit |
2709 | + (will leave servers running) |
2710 | + |
2711 | +.. option:: --verbose |
2712 | + |
2713 | + Produces extensive output about test-runner state. |
2714 | + Distinct from --debug |
2715 | + |
2716 | +.. option:: --debug |
2717 | + |
2718 | + Provide internal-level debugging output. |
2719 | + Distinct from --verbose |
2720 | + |
2721 | +.. option:: --mode=MODE |
2722 | + |
2723 | + Testing mode. |
2724 | + Currently supporting dtr, sysbench, and native (unittest) modes. The goal is to remove this and have all tests operate via unittest" |
2725 | + [native] |
2726 | + |
2727 | +.. option:: --record |
2728 | + |
2729 | + Record a testcase result |
2730 | + (if the testing mode supports it - MTR / DTR specific) |
2731 | + [False] |
2732 | + |
2733 | +.. option:: --fast |
2734 | + |
2735 | + Don't try to cleanup from earlier runs |
2736 | + (currently just a placeholder) [False] |
2737 | + |
2738 | + |
2739 | +Options for controlling which tests are executed |
2740 | +------------------------------------------------ |
2741 | + |
2742 | +.. program:: kewpie.py |
2743 | + |
2744 | +.. option:: --suite=SUITELIST |
2745 | + |
2746 | + The name of the suite containing tests we want. |
2747 | + Can accept comma-separated list (with no spaces). |
2748 | + Additional --suite args are appended to existing list |
2749 | + [autosearch] |
2750 | + |
2751 | +.. option:: --suitepath=SUITEPATHS |
2752 | + |
2753 | + The path containing the suite(s) you wish to execute. |
2754 | + Use on --suitepath for each suite you want to use. |
2755 | + |
2756 | +.. option:: --do-test=DOTEST |
2757 | + |
2758 | + input can either be a prefix or a regex. |
2759 | + Will only execute tests that match the provided pattern |
2760 | + |
2761 | +.. option:: --skip-test=SKIPTEST |
2762 | + |
2763 | + input can either be a prefix or a regex. |
2764 | + Will exclude tests that match the provided pattern |
2765 | + |
2766 | +.. option:: --reorder |
2767 | + |
2768 | + sort the testcases so that they are executed optimally |
2769 | + for the given mode [False] |
2770 | + |
2771 | +.. option:: --repeat=REPEAT |
2772 | + |
2773 | + Run each test case the specified number of times. For |
2774 | + a given sequence, the first test will be run n times, |
2775 | + then the second, etc [1] |
2776 | + |
2777 | +Options for defining the code that will be under test |
2778 | +----------------------------------------------------- |
2779 | + |
2780 | +.. program:: kewpie.py |
2781 | + |
2782 | +.. option:: --basedir=BASEDIR |
2783 | + |
2784 | + Pass this argument to signal to the test-runner |
2785 | + that this is an in-tree test (not required). |
2786 | + We automatically set a number of variables |
2787 | + relative to the argument (client-bindir, |
2788 | + serverdir, testdir) [../] |
2789 | + |
2790 | +.. option:: --serverdir=SERVERPATH |
2791 | + |
2792 | + Path to the server executable. [auto-search] |
2793 | + |
2794 | +.. option:: --client-bindir=CLIENTBINDIR |
2795 | + |
2796 | + Path to the directory containing client program |
2797 | + binaries for use in testing [auto-search] |
2798 | + |
2799 | +.. option:: --default-storage-engine=DEFAULTENGINE |
2800 | + |
2801 | + Start drizzled using the specified engine [innodb] |
2802 | + |
2803 | +Options for defining the testing environment |
2804 | +-------------------------------------------- |
2805 | + |
2806 | +.. program:: kewpie.py |
2807 | + |
2808 | +.. option:: --testdir=TESTDIR |
2809 | + |
2810 | + Path to the test dir, containing additional files for |
2811 | + test execution. [pwd] |
2812 | + |
2813 | +.. option:: --workdir=WORKDIR |
2814 | + |
2815 | + Path to the directory test-run will use to store |
2816 | + generated files and directories. |
2817 | + [basedir/tests/kewpie_work] |
2818 | + |
2819 | +.. option:: --top-srcdir=TOPSRCDIR |
2820 | + |
2821 | + build option [basedir_default] |
2822 | + |
2823 | +.. option:: --top-builddir=TOPBUILDDIR |
2824 | + |
2825 | + build option [basedir_default] |
2826 | + |
2827 | +.. option:: --no-shm |
2828 | + |
2829 | + By default, we symlink workdir to a location in shm. |
2830 | + Use this flag to not symlink [False] |
2831 | + |
2832 | +.. option:: --libeatmydata |
2833 | + |
2834 | + We use libeatmydata (if available) to disable fsyncs |
2835 | + and speed up test execution. Implies --no-shm |
2836 | + |
2837 | +.. option:: --libeatmydata-path=LIBEATMYDATAPATH |
2838 | + |
2839 | + Path to the libeatmydata install you want to use |
2840 | + [/usr/local/lib/libeatmydata.so] |
2841 | + |
2842 | +.. option:: --start-dirty |
2843 | + |
2844 | + Don't try to clean up working directories before test |
2845 | + execution [False] |
2846 | + |
2847 | +.. option:: --no-secure-file-priv |
2848 | + |
2849 | + Turn off the use of --secure-file-priv=vardir for |
2850 | + started servers |
2851 | + |
2852 | +.. option:: --randgen-path=RANDGENPATH |
2853 | + |
2854 | + The path to a randgen installation that can be used to |
2855 | + execute randgen-based tests [kewpie/randgen] |
2856 | + |
2857 | +.. option:: --innobackupex-path=INNOBACKUPEXPATH |
2858 | + |
2859 | + The path to the innobackupex script that facilitates |
2860 | + the use of Xtrabackup |
2861 | + |
2862 | +.. option:: --xtrabackup-path=XTRABACKUPPATH |
2863 | + |
2864 | + The path the xtrabackup binary to be tested |
2865 | + |
2866 | +.. option:: --tar4ibd-path=TAR4IBDPATH |
2867 | + |
2868 | + The path to the tar4ibd binary that will be used for any applicable tests |
2869 | + |
2870 | +.. option:: --wsrep-provider-path=WSREPPROVIDER |
2871 | + |
2872 | + The path to a wsrep provider library for use with |
2873 | + mysql |
2874 | + |
2875 | +.. option:: --subunit-outfile=SUBUNITOUTFILE |
2876 | + |
2877 | + File path where subunit output will be logged |
2878 | + [/kewpie/workdir/test_results.subunit] |
2879 | + |
2880 | +Options to pass options on to the server |
2881 | +----------------------------------------- |
2882 | + |
2883 | +.. program:: kewpie.py |
2884 | + |
2885 | +.. option:: --drizzled=DRIZZLEDOPTIONS |
2886 | + |
2887 | + Pass additional options to the server. Will be passed |
2888 | + to all servers for all tests (mostly for --start-and- |
2889 | + exit) |
2890 | + |
2891 | + |
2892 | +Options for defining the tools we use for code analysis (valgrind, gprof, gcov, etc) |
2893 | +------------------------------------------------------------------------------------ |
2894 | + |
2895 | +.. program:: kewpie.py |
2896 | + |
2897 | +.. option:: --valgrind |
2898 | + |
2899 | + Run drizzletest and drizzled executables using |
2900 | + valgrind with default options [False] |
2901 | + |
2902 | +.. option:: --valgrind-option=VALGRINDARGLIST |
2903 | + |
2904 | + Pass an option to valgrind (overrides/removes default |
2905 | + valgrind options) |
2906 | + |
2907 | +.. option:: --valgrind-suppressions=VALGRINDSUPPRESSIONS |
2908 | + |
2909 | + Point at a valgrind suppression file |
2910 | + [kewpie/valgrind.supp] |
2911 | + |
2912 | +.. option:: --helgrind |
2913 | + |
2914 | + Use the helgrind tool for valgrind. Implies / will |
2915 | + auto-use --valgrind |
2916 | + |
2917 | +Options for controlling the use of debuggers with test execution |
2918 | +---------------------------------------------------------------- |
2919 | + |
2920 | +.. program:: kewpie.py |
2921 | + |
2922 | +.. option:: --gdb |
2923 | + |
2924 | + Start the drizzled server(s) in gdb |
2925 | + |
2926 | +.. option:: --manual-gdb |
2927 | + |
2928 | + Allows you to start the drizzled server(s) in gdb |
2929 | + manually (in another window, etc |
2930 | + |
2931 | +Options to call additional utilities such as datagen |
2932 | +------------------------------------------------------ |
2933 | + |
2934 | +.. program:: kewpie.py |
2935 | + |
2936 | +.. option:: --gendata=GENDATAFILE |
2937 | + |
2938 | + Call the randgen's gendata utility to use the |
2939 | + specified configuration file. This will populate the |
2940 | + server prior to any test execution |
2941 | + |
2942 | |
2943 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat' |
2944 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat 1970-01-01 00:00:00 +0000 |
2945 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/make.bat 2012-06-27 07:03:19 +0000 |
2946 | @@ -0,0 +1,170 @@ |
2947 | +@ECHO OFF |
2948 | + |
2949 | +REM Command file for Sphinx documentation |
2950 | + |
2951 | +if "%SPHINXBUILD%" == "" ( |
2952 | + set SPHINXBUILD=sphinx-build |
2953 | +) |
2954 | +set BUILDDIR=_build |
2955 | +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . |
2956 | +if NOT "%PAPER%" == "" ( |
2957 | + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% |
2958 | +) |
2959 | + |
2960 | +if "%1" == "" goto help |
2961 | + |
2962 | +if "%1" == "help" ( |
2963 | + :help |
2964 | + echo.Please use `make ^<target^>` where ^<target^> is one of |
2965 | + echo. html to make standalone HTML files |
2966 | + echo. dirhtml to make HTML files named index.html in directories |
2967 | + echo. singlehtml to make a single large HTML file |
2968 | + echo. pickle to make pickle files |
2969 | + echo. json to make JSON files |
2970 | + echo. htmlhelp to make HTML files and a HTML help project |
2971 | + echo. qthelp to make HTML files and a qthelp project |
2972 | + echo. devhelp to make HTML files and a Devhelp project |
2973 | + echo. epub to make an epub |
2974 | + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter |
2975 | + echo. text to make text files |
2976 | + echo. man to make manual pages |
2977 | + echo. changes to make an overview over all changed/added/deprecated items |
2978 | + echo. linkcheck to check all external links for integrity |
2979 | + echo. doctest to run all doctests embedded in the documentation if enabled |
2980 | + goto end |
2981 | +) |
2982 | + |
2983 | +if "%1" == "clean" ( |
2984 | + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i |
2985 | + del /q /s %BUILDDIR%\* |
2986 | + goto end |
2987 | +) |
2988 | + |
2989 | +if "%1" == "html" ( |
2990 | + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html |
2991 | + if errorlevel 1 exit /b 1 |
2992 | + echo. |
2993 | + echo.Build finished. The HTML pages are in %BUILDDIR%/html. |
2994 | + goto end |
2995 | +) |
2996 | + |
2997 | +if "%1" == "dirhtml" ( |
2998 | + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml |
2999 | + if errorlevel 1 exit /b 1 |
3000 | + echo. |
3001 | + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. |
3002 | + goto end |
3003 | +) |
3004 | + |
3005 | +if "%1" == "singlehtml" ( |
3006 | + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml |
3007 | + if errorlevel 1 exit /b 1 |
3008 | + echo. |
3009 | + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. |
3010 | + goto end |
3011 | +) |
3012 | + |
3013 | +if "%1" == "pickle" ( |
3014 | + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle |
3015 | + if errorlevel 1 exit /b 1 |
3016 | + echo. |
3017 | + echo.Build finished; now you can process the pickle files. |
3018 | + goto end |
3019 | +) |
3020 | + |
3021 | +if "%1" == "json" ( |
3022 | + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json |
3023 | + if errorlevel 1 exit /b 1 |
3024 | + echo. |
3025 | + echo.Build finished; now you can process the JSON files. |
3026 | + goto end |
3027 | +) |
3028 | + |
3029 | +if "%1" == "htmlhelp" ( |
3030 | + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp |
3031 | + if errorlevel 1 exit /b 1 |
3032 | + echo. |
3033 | + echo.Build finished; now you can run HTML Help Workshop with the ^ |
3034 | +.hhp project file in %BUILDDIR%/htmlhelp. |
3035 | + goto end |
3036 | +) |
3037 | + |
3038 | +if "%1" == "qthelp" ( |
3039 | + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp |
3040 | + if errorlevel 1 exit /b 1 |
3041 | + echo. |
3042 | + echo.Build finished; now you can run "qcollectiongenerator" with the ^ |
3043 | +.qhcp project file in %BUILDDIR%/qthelp, like this: |
3044 | + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\kewpie.qhcp |
3045 | + echo.To view the help file: |
3046 | + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\kewpie.ghc |
3047 | + goto end |
3048 | +) |
3049 | + |
3050 | +if "%1" == "devhelp" ( |
3051 | + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp |
3052 | + if errorlevel 1 exit /b 1 |
3053 | + echo. |
3054 | + echo.Build finished. |
3055 | + goto end |
3056 | +) |
3057 | + |
3058 | +if "%1" == "epub" ( |
3059 | + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub |
3060 | + if errorlevel 1 exit /b 1 |
3061 | + echo. |
3062 | + echo.Build finished. The epub file is in %BUILDDIR%/epub. |
3063 | + goto end |
3064 | +) |
3065 | + |
3066 | +if "%1" == "latex" ( |
3067 | + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex |
3068 | + if errorlevel 1 exit /b 1 |
3069 | + echo. |
3070 | + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. |
3071 | + goto end |
3072 | +) |
3073 | + |
3074 | +if "%1" == "text" ( |
3075 | + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text |
3076 | + if errorlevel 1 exit /b 1 |
3077 | + echo. |
3078 | + echo.Build finished. The text files are in %BUILDDIR%/text. |
3079 | + goto end |
3080 | +) |
3081 | + |
3082 | +if "%1" == "man" ( |
3083 | + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man |
3084 | + if errorlevel 1 exit /b 1 |
3085 | + echo. |
3086 | + echo.Build finished. The manual pages are in %BUILDDIR%/man. |
3087 | + goto end |
3088 | +) |
3089 | + |
3090 | +if "%1" == "changes" ( |
3091 | + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes |
3092 | + if errorlevel 1 exit /b 1 |
3093 | + echo. |
3094 | + echo.The overview file is in %BUILDDIR%/changes. |
3095 | + goto end |
3096 | +) |
3097 | + |
3098 | +if "%1" == "linkcheck" ( |
3099 | + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck |
3100 | + if errorlevel 1 exit /b 1 |
3101 | + echo. |
3102 | + echo.Link check complete; look for any errors in the above output ^ |
3103 | +or in %BUILDDIR%/linkcheck/output.txt. |
3104 | + goto end |
3105 | +) |
3106 | + |
3107 | +if "%1" == "doctest" ( |
3108 | + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest |
3109 | + if errorlevel 1 exit /b 1 |
3110 | + echo. |
3111 | + echo.Testing of doctests in the sources finished, look at the ^ |
3112 | +results in %BUILDDIR%/doctest/output.txt. |
3113 | + goto end |
3114 | +) |
3115 | + |
3116 | +:end |
3117 | |
3118 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst' |
3119 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst 1970-01-01 00:00:00 +0000 |
3120 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/randgen.rst 2012-06-27 07:03:19 +0000 |
3121 | @@ -0,0 +1,202 @@ |
3122 | +********************************** |
3123 | +randgen (random query generator) |
3124 | +********************************** |
3125 | + |
3126 | + |
3127 | + |
3128 | +Description |
3129 | +=========== |
3130 | + |
3131 | +The randgen aka the random query generator is a database |
3132 | +testing tool. It uses a grammar-based stochastic model to represent |
3133 | +some desired set of queries (to exercise the optimizer, for example) |
3134 | +and generates random queries as allowed by the grammar |
3135 | + |
3136 | +The primary documentation is here: http://forge.mysql.com/wiki/RandomQueryGenerator |
3137 | + |
3138 | +This document is intended to help the user set up their environment so that the tool |
3139 | +may be used in conjunction with the kewpie.py test-runner. The forge documentation |
3140 | +contains more information on the particulars of the tool itself. |
3141 | + |
3142 | +Requirements |
3143 | +============ |
3144 | + |
3145 | +DBD::drizzle |
3146 | +------------- |
3147 | +The DBD::drizzle module is required it can be found here http://launchpad.net/dbd-drizzle/ |
3148 | + |
3149 | +Additional information for installing the module:: |
3150 | + |
3151 | + Prerequisites |
3152 | + ---------------- |
3153 | + * Perl |
3154 | + * Drizzle (bzr branch lp:drizzle) |
3155 | + * libdrizzle (bzr branch lp:libdrizzle) |
3156 | + * C compiler |
3157 | + |
3158 | + Installation |
3159 | + ------------- |
3160 | + You should only have to run the following: |
3161 | + |
3162 | + perl Makefile.PL --cflags=-I/usr/local/drizzle/include/ --libs=-"L/usr/local/drizzle/lib -ldrizzle" |
3163 | + |
3164 | + |
3165 | + Depending on where libdrizzle is installed. Also, you'll want to make |
3166 | + sure that ldconfig has configured libdrizzle to be in your library path |
3167 | + |
3168 | +Additional information may be found here: http://forge.mysql.com/wiki/RandomQueryGeneratorQuickStart |
3169 | + |
3170 | +Installing the randgen |
3171 | +======================= |
3172 | + |
3173 | +Kewpie includes a branch of the randgen so it is not necessary to install it directly, but thecode may be branched from: |
3174 | + |
3175 | + launchpad: bzr branch lp:randgen |
3176 | + |
3177 | +it also may be downloaded from: |
3178 | + |
3179 | + http://launchpad.net/randgen/+download |
3180 | + |
3181 | +That is all there is : ) |
3182 | + |
3183 | +Randgen / kewpie testcases |
3184 | +============================ |
3185 | + |
3186 | +These tests use kewpie's native mode and are essentially unittest modules. Currently, the suites are designed so that each individual modules executes a single randgen command line and validates results accordingly. An example:: |
3187 | + |
3188 | + class basicTest(mysqlBaseTestCase): |
3189 | + |
3190 | + def test_OptimizerSubquery1(self): |
3191 | + self.servers = servers |
3192 | + test_cmd = ("./gentest.pl " |
3193 | + "--gendata=conf/percona/outer_join_percona.zz " |
3194 | + "--grammar=conf/percona/outer_join_percona.yy " |
3195 | + "--queries=500 " |
3196 | + "--threads=5" |
3197 | + ) |
3198 | + retcode, output = self.execute_randgen(test_cmd, test_executor, servers) |
3199 | + self.assertEqual(retcode, 0, output) `` |
3200 | + |
3201 | +Running tests |
3202 | +========================= |
3203 | + |
3204 | +There are several different ways to run the provided randgen tests. |
3205 | + |
3206 | +It should be noted that unless :option:`--force` is used, the program will |
3207 | +stop execution upon encountering the first failing test. |
3208 | +:option:`--force` is recommended if you are running several tests - it will |
3209 | +allow you to view all successes and failures in one run. |
3210 | + |
3211 | +Running individual tests |
3212 | +------------------------ |
3213 | +If one only wants to run a few, specific tests, they may do so this way:: |
3214 | + |
3215 | + ./kewpie --suite=randgen_basic [OPTIONS] test1 [test2 ... testN] |
3216 | + |
3217 | +Running all tests within a suite |
3218 | +-------------------------------- |
3219 | +Many of the tests supplied with Drizzle are organized into suites. |
3220 | + |
3221 | +The tests within drizzle/tests/randgen_tests/main are considered the 'main' suite. |
3222 | +Other suites are also subdirectories of drizzle/tests/randgen_tests. |
3223 | + |
3224 | +To run the tests in a specific suite:: |
3225 | + |
3226 | + ./kewpie [OPTIONS] --suite=SUITENAME |
3227 | + |
3228 | +Running specific tests within a suite |
3229 | +-------------------------------------- |
3230 | +To run a specific set of tests within a suite:: |
3231 | + |
3232 | + ./kewpie --suite=SUITENAME TEST1 [TEST2..TESTN] |
3233 | + |
3234 | +Calling tests using <suitename>.<testname> currently does not work. |
3235 | +One must specify the test suite via the :option:`--suite` option. |
3236 | + |
3237 | + |
3238 | +Running all available tests |
3239 | +--------------------------- |
3240 | +One would currently have to name all suites, but the majority of the working tests live in the main suite |
3241 | +Other suites utilize more exotic server combinations and we are currently tweaking them to better integrate with the |
3242 | +kewpie system. The slave-plugin suite does currently have a good config file for setting up simple replication setups for testing. |
3243 | +To execute several suites' worth of tests:: |
3244 | + |
3245 | + ./kewpie --mode=randgen --randgen-path=/path/to/randgen [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN |
3246 | + |
3247 | +Interpreting test results |
3248 | +========================= |
3249 | +The output of the test runner is quite simple. Every test should pass. |
3250 | +In the event of a test failure, please take the time to file a bug here: |
3251 | +*https://bugs.launchpad.net/drizzle* |
3252 | + |
3253 | +During a run, the program will provide the user with: |
3254 | + * test name (suite + name) |
3255 | + * test status (pass/fail/skipped) |
3256 | + * time spent executing each test |
3257 | + |
3258 | +At the end of a run, the program will provide the user with a listing of: |
3259 | + * how many tests were run |
3260 | + * how many tests failed |
3261 | + * percentage of passing tests |
3262 | + * a listing of failing tests |
3263 | + * total time spent executing the tests |
3264 | + |
3265 | +Example output:: |
3266 | + |
3267 | + 24 Feb 2011 17:27:36 : main.outer_join_portable [ pass ] 7019 |
3268 | + 24 Feb 2011 17:27:39 : main.repeatable_read [ pass ] 2764 |
3269 | + 24 Feb 2011 17:28:57 : main.select_stability_validator [ pass ] 77946 |
3270 | + 24 Feb 2011 17:29:01 : main.subquery [ pass ] 4474 |
3271 | + 24 Feb 2011 17:30:52 : main.subquery_semijoin [ pass ] 110355 |
3272 | + 24 Feb 2011 17:31:00 : main.subquery_semijoin_nested [ pass ] 8750 |
3273 | + 24 Feb 2011 17:31:03 : main.varchar [ pass ] 3048 |
3274 | + 24 Feb 2011 17:31:03 : ================================================================================ |
3275 | + 24 Feb 2011 17:31:03 INFO: Test execution complete in 288 seconds |
3276 | + 24 Feb 2011 17:31:03 INFO: Summary report: |
3277 | + 24 Feb 2011 17:31:03 INFO: Executed 18/18 test cases, 100.00 percent |
3278 | + 24 Feb 2011 17:31:03 INFO: STATUS: PASS, 18/18 test cases, 100.00 percent executed |
3279 | + 24 Feb 2011 17:31:03 INFO: Spent 287 / 288 seconds on: TEST(s) |
3280 | + 24 Feb 2011 17:31:03 INFO: Test execution complete |
3281 | + 24 Feb 2011 17:31:03 INFO: Stopping all running servers... |
3282 | + |
3283 | + |
3284 | +Additional uses |
3285 | +=============== |
3286 | +Starting a server for manual testing and (optionally) populating it |
3287 | +-------------------------------------------------------------------- |
3288 | + |
3289 | +:doc:`kewpie` 's randgen mode allows a user to get a Drizzle server up and running quickly. This can be useful for fast ad-hoc testing. |
3290 | + |
3291 | +To do so call:: |
3292 | + |
3293 | + ./kewpie --suite=randgen_basic --start-and-exit [*OPTIONS*] |
3294 | + |
3295 | +This will start a Drizzle server that you can connect to and query |
3296 | + |
3297 | +With the addition of the --gendata option, a user may utilize the randgen's gendata (table creation and population) tool |
3298 | +to populate a test server. In the following example, the test server is now populated by the 8 tables listed below:: |
3299 | + |
3300 | + ./kewpie --start-and-exit --gendata=conf/drizzle/drizzle.zz |
3301 | + <snip> |
3302 | + 24 Feb 2011 17:48:48 INFO: NAME: server0 |
3303 | + 24 Feb 2011 17:48:48 INFO: MASTER_PORT: 9306 |
3304 | + 24 Feb 2011 17:48:48 INFO: DRIZZLE_TCP_PORT: 9307 |
3305 | + 24 Feb 2011 17:48:48 INFO: MC_PORT: 9308 |
3306 | + 24 Feb 2011 17:48:48 INFO: PBMS_PORT: 9309 |
3307 | + 24 Feb 2011 17:48:48 INFO: RABBITMQ_NODE_PORT: 9310 |
3308 | + 24 Feb 2011 17:48:48 INFO: VARDIR: /kewpie/tests/workdir/testbot0/server0/var |
3309 | + 24 Feb 2011 17:48:48 INFO: STATUS: 1 |
3310 | + # 2011-02-24T17:48:48 Default schema: test |
3311 | + # 2011-02-24T17:48:48 Executor initialized, id GenTest::Executor::Drizzle 2011.02.2198 () |
3312 | + # 2011-02-24T17:48:48 # Creating Drizzle table: test.A; engine: ; rows: 0 . |
3313 | + # 2011-02-24T17:48:48 # Creating Drizzle table: test.B; engine: ; rows: 0 . |
3314 | + # 2011-02-24T17:48:48 # Creating Drizzle table: test.C; engine: ; rows: 1 . |
3315 | + # 2011-02-24T17:48:48 # Creating Drizzle table: test.D; engine: ; rows: 1 . |
3316 | + # 2011-02-24T17:48:48 # Creating Drizzle table: test.AA; engine: ; rows: 10 . |
3317 | + # 2011-02-24T17:48:48 # Creating Drizzle table: test.BB; engine: ; rows: 10 . |
3318 | + # 2011-02-24T17:48:48 # Creating Drizzle table: test.CC; engine: ; rows: 100 . |
3319 | + # 2011-02-24T17:48:49 # Creating Drizzle table: test.DD; engine: ; rows: 100 . |
3320 | + 24 Feb 2011 17:48:49 INFO: User specified --start-and-exit. kewpie.py exiting and leaving servers running... |
3321 | + |
3322 | + |
3323 | + |
3324 | |
3325 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst' |
3326 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst 1970-01-01 00:00:00 +0000 |
3327 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sql-bench.rst 2012-06-27 07:03:19 +0000 |
3328 | @@ -0,0 +1,182 @@ |
3329 | +********************************** |
3330 | +sql-bench |
3331 | +********************************** |
3332 | + |
3333 | + |
3334 | + |
3335 | +Description |
3336 | +=========== |
3337 | +Kewpie can take advantage of two testing modes offered by the sql-bench tool. |
3338 | + |
3339 | +Kewpie has a copy of this tool set in the tree and the test-runner offers two suites for executing sql-bench tests:: |
3340 | + |
3341 | + sql-bench modes |
3342 | + --------------- |
3343 | + * sqlbench - runs the entire sql-bench test suite and can take a very long time (~45 minutes) |
3344 | + * crashme - runs the crash-me tool and reports failure if any tests should not pass |
3345 | + |
3346 | + |
3347 | +Requirements |
3348 | +============ |
3349 | +DBD::drizzle |
3350 | +------------- |
3351 | +The DBD::drizzle module is required it can be found here: |
3352 | + |
3353 | + http://launchpad.net/dbd-drizzle/ |
3354 | + |
3355 | +Additional information for installing the module:: |
3356 | + |
3357 | + Prerequisites |
3358 | + ---------------- |
3359 | + * Perl |
3360 | + * Drizzle (bzr branch lp:drizzle) |
3361 | + * libdrizzle (bzr branch lp:libdrizzle) |
3362 | + * C compiler |
3363 | + |
3364 | + Installation |
3365 | + ------------- |
3366 | + You should only have to run the following: |
3367 | + |
3368 | + perl Makefile.PL --cflags=-I/usr/local/drizzle/include/ --libs=-"L/usr/local/drizzle/lib -ldrizzle" |
3369 | + |
3370 | + |
3371 | + Depending on where libdrizzle is installed. Also, you'll want to make |
3372 | + sure that ldconfig has configured libdrizzle to be in your library path |
3373 | + |
3374 | +DBD::MySQL: |
3375 | + |
3376 | +This is required for using MySQL servers and can be found here: |
3377 | + |
3378 | + http://search.cpan.org/dist/DBD-mysql/ |
3379 | + |
3380 | + |
3381 | +sql-bench / kewpie tests |
3382 | +========================== |
3383 | + |
3384 | +Currently, there are only two sql-bench test cases for kewpie. As one might expect, main.all_sqlbench_tests executes:: |
3385 | + |
3386 | + run-all-tests --server=$SERVER_TYPE --dir=$WORKDIR --log --connect-options=port=$MASTER_MYPORT --create-options=ENGINE=innodb --user=root |
3387 | + |
3388 | +against a test server. The second test case executes the crashme tool against a running server. |
3389 | + |
3390 | +Test cases are defined in python .cnf files and live in tests/sqlbench_tests. |
3391 | + |
3392 | +Running tests |
3393 | +========================= |
3394 | + |
3395 | +NOTE: all_sqlbench_tests can take a significant amount of time to execute (45 minutes or so on a decently provisioned laptop) |
3396 | + |
3397 | +There are several different ways to run tests using :doc:`kewpie` 's sql-bench mode. |
3398 | + |
3399 | +It should be noted that unless :option:`--force` is used, the program will |
3400 | +stop execution upon encountering the first failing test. |
3401 | +:option:`--force` is recommended if you are running several tests - it will |
3402 | +allow you to view all successes and failures in one run. |
3403 | + |
3404 | +At present, sql-bench output in a work in progress. It does report a simple pass/fail, but we are working on alternate ways of viewing / storing the results (and for other testing modes as well) |
3405 | + |
3406 | + |
3407 | +Running all tests within a suite |
3408 | +-------------------------------- |
3409 | +At present, there is only one test case per suite for sqlbench and crashme modes - that is all that is needed for these tools. |
3410 | +To execute the sql-bench test suite:: |
3411 | + |
3412 | + ./kewpie --suite=sqlbench |
3413 | + |
3414 | +To execute the crash-me test suite:: |
3415 | + |
3416 | + ./kewpie --suite=crashme |
3417 | + |
3418 | +Interpreting test results |
3419 | +========================= |
3420 | +The output of the test runner is quite simple. Every test should pass. |
3421 | +In the event of a test failure, please take the time to file a bug here: |
3422 | +*https://bugs.launchpad.net/drizzle* |
3423 | + |
3424 | +During a run, the program will provide the user with: |
3425 | + * test name (suite + name) |
3426 | + * test status (pass/fail/skipped) |
3427 | + * time spent executing each test |
3428 | + |
3429 | +Example sqlbench output:: |
3430 | + |
3431 | + 20110608-135645 =============================================================== |
3432 | + 20110608-135645 TEST NAME [ RESULT ] TIME (ms) |
3433 | + 20110608-135645 =============================================================== |
3434 | + 20110608-135645 main.all_sqlbench_tests [ pass ] 2732007 |
3435 | + 20110608-135645 Test finished. You can find the result in: |
3436 | + 20110608-135645 drizzle/tests/workdir/RUN-drizzle-Linux_2.6.38_9_generic_x86_64 |
3437 | + 20110608-135645 Benchmark DBD suite: 2.15 |
3438 | + 20110608-135645 Date of test: 2011-06-08 13:11:10 |
3439 | + 20110608-135645 Running tests on: Linux 2.6.38-9-generic x86_64 |
3440 | + 20110608-135645 Arguments: --connect-options=port=9306 --create-options=ENGINE=innodb |
3441 | + 20110608-135645 Comments: |
3442 | + 20110608-135645 Limits from: |
3443 | + 20110608-135645 Server version: Drizzle 2011.06.19.2325 |
3444 | + 20110608-135645 Optimization: None |
3445 | + 20110608-135645 Hardware: |
3446 | + 20110608-135645 |
3447 | + 20110608-135645 alter-table: Total time: 42 wallclock secs ( 0.06 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.10 CPU) |
3448 | + 20110608-135645 ATIS: Total time: 22 wallclock secs ( 4.01 usr 0.26 sys + 0.00 cusr 0.00 csys = 4.27 CPU) |
3449 | + 20110608-135645 big-tables: Total time: 24 wallclock secs ( 4.16 usr 0.22 sys + 0.00 cusr 0.00 csys = 4.38 CPU) |
3450 | + 20110608-135645 connect: Total time: 31 wallclock secs ( 6.81 usr 4.50 sys + 0.00 cusr 0.00 csys = 11.31 CPU) |
3451 | + 20110608-135645 create: Total time: 59 wallclock secs ( 2.93 usr 1.65 sys + 0.00 cusr 0.00 csys = 4.58 CPU) |
3452 | + 20110608-135645 insert: Total time: 1962 wallclock secs (270.53 usr 66.35 sys + 0.00 cusr 0.00 csys = 336.88 CPU) |
3453 | + 20110608-135645 select: Total time: 560 wallclock secs (23.12 usr 4.62 sys + 0.00 cusr 0.00 csys = 27.74 CPU) |
3454 | + 20110608-135645 transactions: Total time: 21 wallclock secs ( 2.43 usr 1.98 sys + 0.00 cusr 0.00 csys = 4.41 CPU) |
3455 | + 20110608-135645 wisconsin: Total time: 10 wallclock secs ( 2.11 usr 0.52 sys + 0.00 cusr 0.00 csys = 2.63 CPU) |
3456 | + 20110608-135645 |
3457 | + 20110608-135645 All 9 test executed successfully |
3458 | + 20110608-135645 |
3459 | + 20110608-135645 Totals per operation: |
3460 | + 20110608-135645 Operation seconds usr sys cpu tests |
3461 | + 20110608-135645 alter_table_add 18.00 0.02 0.00 0.02 100 |
3462 | + 20110608-135645 alter_table_drop 17.00 0.02 0.01 0.03 91 |
3463 | + 20110608-135645 connect 2.00 1.02 0.51 1.53 2000 |
3464 | + <snip> |
3465 | + 20110608-135645 update_rollback 3.00 0.26 0.23 0.49 100 |
3466 | + 20110608-135645 update_with_key 73.00 6.70 5.23 11.93 300000 |
3467 | + 20110608-135645 update_with_key_prefix 34.00 4.45 2.30 6.75 100000 |
3468 | + 20110608-135645 wisc_benchmark 2.00 1.49 0.00 1.49 114 |
3469 | + 20110608-135645 TOTALS 2865.00 310.26 79.94 390.20 2974250 |
3470 | + 20110608-135645 |
3471 | + 20110608-135645 =============================================================== |
3472 | + 20110608-135645 INFO Test execution complete in 2735 seconds |
3473 | + 20110608-135645 INFO Summary report: |
3474 | + 20110608-135645 INFO Executed 1/1 test cases, 100.00 percent |
3475 | + 20110608-135645 INFO STATUS: PASS, 1/1 test cases, 100.00 percent executed |
3476 | + 20110608-135645 INFO Spent 2732 / 2735 seconds on: TEST(s) |
3477 | + 20110608-135645 INFO Test execution complete |
3478 | + 20110608-135645 INFO Stopping all running servers... |
3479 | + |
3480 | +Example crashme output:: |
3481 | + |
3482 | + 20110608-152759 =============================================================== |
3483 | + 20110608-152759 TEST NAME [ RESULT ] TIME (ms) |
3484 | + 20110608-152759 =============================================================== |
3485 | + 20110608-152759 main.crashme [ fail ] 155298 |
3486 | + 20110608-152759 func_extra_to_days=error # Function TO_DAYS |
3487 | + 20110608-152759 ### |
3488 | + 20110608-152759 ###<select to_days('1996-01-01') from crash_me_d |
3489 | + 20110608-152759 ###>2450084 |
3490 | + 20110608-152759 ###We expected '729024' but got '2450084' |
3491 | + 20110608-152759 func_odbc_timestampadd=error # Function TIMESTAMPADD |
3492 | + 20110608-152759 ### |
3493 | + 20110608-152759 ###<select timestampadd(SQL_TSI_SECOND,1,'1997-01-01 00:00:00') |
3494 | + 20110608-152759 ###>1997-01-01 00:00:01.000000 |
3495 | + 20110608-152759 ###We expected '1997-01-01 00:00:01' but got '1997-01-01 00:00:01.000000' |
3496 | + 20110608-152759 ### |
3497 | + 20110608-152759 ###<select {fn timestampadd(SQL_TSI_SECOND,1,{ts '1997-01-01 00:00:00'}) } |
3498 | + 20110608-152759 ###>1997-01-01 00:00:01.000000 |
3499 | + 20110608-152759 ###We expected '1997-01-01 00:00:01' but got '1997-01-01 00:00:01.000000' |
3500 | + 20110608-152759 |
3501 | + 20110608-152759 ERROR Failed test. Use --force to execute beyond the first test failure |
3502 | + 20110608-152759 =============================================================== |
3503 | + 20110608-152759 INFO Test execution complete in 158 seconds |
3504 | + 20110608-152759 INFO Summary report: |
3505 | + 20110608-152759 INFO Executed 1/1 test cases, 100.00 percent |
3506 | + 20110608-152759 INFO STATUS: FAIL, 1/1 test cases, 100.00 percent executed |
3507 | + 20110608-152759 INFO FAIL tests: main.crashme |
3508 | + 20110608-152759 INFO Spent 155 / 158 seconds on: TEST(s) |
3509 | + 20110608-152759 INFO Test execution complete |
3510 | + |
3511 | |
3512 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst' |
3513 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst 1970-01-01 00:00:00 +0000 |
3514 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/sysbench.rst 2012-06-27 07:03:19 +0000 |
3515 | @@ -0,0 +1,123 @@ |
3516 | +********************************** |
3517 | +sysbench |
3518 | +********************************** |
3519 | + |
3520 | + |
3521 | + |
3522 | +Description |
3523 | +=========== |
3524 | +kewpie's sysbench mode allows a user to run a specific iteration of a sysbench test (eg an oltp readonly run at concurrency = 16) |
3525 | + |
3526 | + |
3527 | +Requirements |
3528 | +============ |
3529 | + |
3530 | +The SYSBENCH command requires that the Drizzle library header be installed. Simply build Drizzle and do:: |
3531 | + |
3532 | + $> sudo make install |
3533 | + |
3534 | +This will install the right headers. |
3535 | + |
3536 | +The SYSBENCH command also requires installation of the drizzle-sysbench program, which can be installed from source like so:: |
3537 | + |
3538 | + $> bzr branch lp:~drizzle-developers/sysbench/trunk drizzle-sysbench |
3539 | + $> cd drizzle-sysbench |
3540 | + $> ./autogen.sh && ./configure && make && sudo make install |
3541 | + |
3542 | +Make sure sysbench is then in your path |
3543 | + |
3544 | + |
3545 | +sysbench / kewpie tests |
3546 | +===================== |
3547 | + |
3548 | +A sysbench test defines a run for a particular concurrency. There are suites for readonly and readwrite. |
3549 | +They are currently broken down this way as an experiment - we are open to other ways of organizing these tests:: |
3550 | + |
3551 | + [test_info] |
3552 | + comment = 16 threads |
3553 | + |
3554 | + [test_command] |
3555 | + command = sysbench --max-time=240 --max-requests=0 --test=oltp --db-ps-mode=disable --drizzle-table-engine=innodb --oltp-read-only=on --oltp-table-size=1000000 --drizzle-mysql=on --drizzle-user=root --drizzle-db=test --drizzle-port=$MASTER_MYPORT --drizzle-host=localhost --db-driver=drizzle --num-threads=16 |
3556 | + |
3557 | + [test_servers] |
3558 | + servers = [[innodb.buffer-pool-size=256M innodb.log-file-size=64M innodb.log-buffer-size=8M innodb.thread-concurrency=0 innodb.additional-mem-pool-size=16M table-open-cache=4096 table-definition-cache=4096 mysql-protocol.max-connections=2048]] |
3559 | + |
3560 | +Running tests |
3561 | +========================= |
3562 | + |
3563 | +There are several different ways to run tests using :doc:`kewpie` 's sysbench mode. |
3564 | + |
3565 | +It should be noted that unless :option:`--force` is used, the program will |
3566 | +stop execution upon encountering the first failing test. |
3567 | +:option:`--force` is recommended if you are running several tests - it will |
3568 | +allow you to view all successes and failures in one run. |
3569 | + |
3570 | +Running individual tests |
3571 | +------------------------ |
3572 | +If one only wants to run a few, specific tests, they may do so this way:: |
3573 | + |
3574 | + ./kewpie --mode=sysbench [OPTIONS] test1 [test2 ... testN] |
3575 | + |
3576 | +Running all tests within a suite |
3577 | +-------------------------------- |
3578 | +Many of the tests supplied with Drizzle are organized into suites. |
3579 | + |
3580 | +The tests within drizzle/tests/randgen_tests/main are considered the 'main' suite. |
3581 | +Other suites are also subdirectories of drizzle/tests/randgen_tests. |
3582 | + |
3583 | +To run the tests in a specific suite:: |
3584 | + |
3585 | + ./kewpie --mode=sysbench [OPTIONS] --suite=SUITENAME |
3586 | + |
3587 | +Running specific tests within a suite |
3588 | +-------------------------------------- |
3589 | +To run a specific set of tests within a suite:: |
3590 | + |
3591 | + ./kewpie --mode=sysbench [OPTIONS] --suite=SUITENAME TEST1 [TEST2..TESTN] |
3592 | + |
3593 | +Calling tests using <suitename>.<testname> currently does not work. |
3594 | +One must specify the test suite via the :option:`--suite` option. |
3595 | + |
3596 | + |
3597 | +Running all available tests |
3598 | +--------------------------- |
3599 | +One would currently have to name all suites, but the majority of the working tests live in the main suite |
3600 | +Other suites utilize more exotic server combinations and we are currently tweaking them to better integrate with the |
3601 | +kewpie system. The slave-plugin suite does currently have a good config file for setting up simple replication setups for testing. |
3602 | +To execute several suites' worth of tests:: |
3603 | + |
3604 | + ./kewpie --mode=sysbench [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN |
3605 | + |
3606 | +Interpreting test results |
3607 | +========================= |
3608 | +The output of the test runner is quite simple. Every test should pass. |
3609 | +In the event of a test failure, please take the time to file a bug here: |
3610 | +*https://bugs.launchpad.net/drizzle* |
3611 | + |
3612 | +During a run, the program will provide the user with: |
3613 | + * test name (suite + name) |
3614 | + * test status (pass/fail/skipped) |
3615 | + * time spent executing each test |
3616 | + |
3617 | +Example output:: |
3618 | + |
3619 | + 20110601-191706 =============================================================== |
3620 | + 20110601-191706 TEST NAME [ RESULT ] TIME (ms) |
3621 | + 20110601-191706 =============================================================== |
3622 | + 20110601-191706 readonly.concurrency_16 [ pass ] 240019 |
3623 | + 20110601-191706 max_req_lat_ms: 21.44 |
3624 | + 20110601-191706 rwreqps: 4208.2 |
3625 | + 20110601-191706 min_req_lat_ms: 6.31 |
3626 | + 20110601-191706 deadlocksps: 0.0 |
3627 | + 20110601-191706 tps: 150.29 |
3628 | + 20110601-191706 avg_req_lat_ms: 6.65 |
3629 | + 20110601-191706 95p_req_lat_ms: 7.02 |
3630 | + 20110601-191706 =============================================================== |
3631 | + 20110601-191706 INFO Test execution complete in 275 seconds |
3632 | + 20110601-191706 INFO Summary report: |
3633 | + 20110601-191706 INFO Executed 1/1 test cases, 100.00 percent |
3634 | + 20110601-191706 INFO STATUS: PASS, 1/1 test cases, 100.00 percent executed |
3635 | + 20110601-191706 INFO Spent 240 / 275 seconds on: TEST(s) |
3636 | + 20110601-191706 INFO Test execution complete |
3637 | + 20110601-191706 INFO Stopping all running servers... |
3638 | + |
3639 | |
3640 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst' |
3641 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst 1970-01-01 00:00:00 +0000 |
3642 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/test-run.rst 2012-06-27 07:03:19 +0000 |
3643 | @@ -0,0 +1,494 @@ |
3644 | +.. _test-run-label: |
3645 | + |
3646 | +********************************** |
3647 | +test-run.pl - Drizzle testing tool |
3648 | +********************************** |
3649 | + |
3650 | +Synopsis |
3651 | +======== |
3652 | + |
3653 | +**./test-run** [ *OPTIONS* ] [ TESTCASE ] |
3654 | + |
3655 | +Description |
3656 | +=========== |
3657 | + |
3658 | +:program:`test-run.pl` (aka test-run, dtr, mtr) is used to execute tests |
3659 | +from the Drizzle/MySQL test suite. These tests are included with their respective |
3660 | +distributions and provide a way for users to verify that the system will |
3661 | +operate according to expectations. |
3662 | + |
3663 | +The tests use a diff-based paradigm, meaning that the test runner executes |
3664 | +a test and then compares the results received with pre-recorded expected |
3665 | +results. In the event of a test failure, the program will provide output |
3666 | +highlighting the differences found between expected and actual results; this |
3667 | +can be useful for troubleshooting and in bug reports. |
3668 | + |
3669 | +While most users are concerned with ensuring general functionality, the |
3670 | +program also allows a user to quickly spin up a server for ad-hoc testing |
3671 | +and to run the test-suite against an already running test server. |
3672 | + |
3673 | +Running tests |
3674 | +========================= |
3675 | + |
3676 | +There are several different ways to run tests using :program:`test-run.pl`. |
3677 | + |
3678 | +It should be noted that unless :option:`--force` is used, the program will |
3679 | +stop execution upon encountering the first failing test. |
3680 | +:option:`--force` is recommended if you are running several tests - it will |
3681 | +allow you to view all successes and failures in one run. |
3682 | + |
3683 | +Running individual tests |
3684 | +------------------------ |
3685 | +If one only wants to run a few, specific tests, they may do so this way:: |
3686 | + |
3687 | + ./test-run [OPTIONS] test1 [test2 ... testN] |
3688 | + |
3689 | +Running all tests within a suite |
3690 | +-------------------------------- |
3691 | +Many of the tests supplied with MySQL-based servers are organized into suites. |
3692 | + |
3693 | +The tests within drizzle/tests/t are considered the 'main' suite. |
3694 | +Other suites are located in either drizzle/tests/suite or within the various |
3695 | +directories in drizzle/plugin. Tests for a specific plugin should live in |
3696 | +the plugin's directory - drizzle/plugin/example_plugin/tests |
3697 | + |
3698 | +To run the tests in a specific suite:: |
3699 | + |
3700 | + ./test-run [OPTIONS] --suite=SUITENAME |
3701 | + |
3702 | +Running specific tests within a suite |
3703 | +-------------------------------------- |
3704 | +To run a specific set of tests within a suite:: |
3705 | + |
3706 | + ./test-run [OPTIONS] --suite=SUITENAME TEST1 [TEST2..TESTN] |
3707 | + |
3708 | +Calling tests using <suitename>.<testname> currently does not work. |
3709 | +One must specify the test suite via the :option:`--suite` option. |
3710 | + |
3711 | + |
3712 | +Running all available tests |
3713 | +--------------------------- |
3714 | +Currently, the quickest way to execute all tests in all suites is |
3715 | +to use 'make test' from the drizzle root. |
3716 | + |
3717 | +Otherwise, one should simply name all suites:: |
3718 | + |
3719 | + ./test-run [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN |
3720 | + |
3721 | +Interpreting test results |
3722 | +========================= |
3723 | +The output of the test runner is quite simple. Every test should pass. |
3724 | +In the event of a test failure, please take the time to file a bug here: |
3725 | +*https://bugs.launchpad.net/drizzle* |
3726 | + |
3727 | +During a run, the program will provide the user with: |
3728 | + * test name (suite + name) |
3729 | + * test status (pass/fail/skipped) |
3730 | + * time spent executing each test |
3731 | + |
3732 | +At the end of a run, the program will provide the user with a listing of: |
3733 | + * how many tests were run |
3734 | + * how many tests failed |
3735 | + * percentage of passing tests |
3736 | + * a listing of failing tests |
3737 | + * total time spent executing the tests |
3738 | + |
3739 | +Example output:: |
3740 | + |
3741 | + <snip> |
3742 | + main.snowman [ pass ] 9 |
3743 | + main.statement_boundaries [ pass ] 17 |
3744 | + main.status [ pass ] 12 |
3745 | + main.strict [ pass ] 50 |
3746 | + main.subselect [ pass ] 6778 |
3747 | + main.subselect2 [ pass ] 51 |
3748 | + main.subselect3 [ fail ] |
3749 | + drizzletest: At line 621: query 'select a, (select max(b) from t1) into outfile |
3750 | + <snip> |
3751 | + -------------------------------------------------------------------------------- |
3752 | + Stopping All Servers |
3753 | + Failed 10/231 tests, 95.67% were successful. |
3754 | + |
3755 | + The log files in var/log may give you some hint |
3756 | + of what went wrong. |
3757 | + If you want to report this error, go to: |
3758 | + http://bugs.launchpad.net/drizzle |
3759 | + The servers were restarted 16 times |
3760 | + Spent 64.364 of 115 seconds executing testcases |
3761 | + |
3762 | + drizzle-test-run in default mode: *** Failing the test(s): main.exp1 |
3763 | + main.func_str main.loaddata main.null main.outfile main.subselect3 |
3764 | + main.warnings jp.like_utf8 jp.select_utf8 jp.where_utf8 |
3765 | + |
3766 | +Additional uses |
3767 | +=============== |
3768 | +Starting a server for manual testing |
3769 | +------------------------------------ |
3770 | + |
3771 | +:program:`test-run.pl` allows a user to get a Drizzle server up and running |
3772 | +quickly. This can be useful for fast ad-hoc testing. |
3773 | + |
3774 | +To do so call:: |
3775 | + |
3776 | + ./test-run --start-and-exit [*OPTIONS*] |
3777 | + |
3778 | +This will start a Drizzle server that you can connect to and query |
3779 | + |
3780 | +Starting a server against a pre-populated DATADIR |
3781 | +-------------------------------------------------- |
3782 | + |
3783 | +Using :option:`--start-dirty` prevents :program:`test-run.pl` from attempting |
3784 | +to initialize (clean) the datadir. This can be useful if you want to use |
3785 | +an already-populated datadir for testing. |
3786 | + |
3787 | +Program architecture |
3788 | +==================== |
3789 | + |
3790 | +:program:`test-run.pl` uses a simple diff-based mechanism for testing. |
3791 | +It will execute the statements contained in a test and compare the results |
3792 | +to pre-recorded expected results. In the event of a test failure, you |
3793 | +will be presented with a diff:: |
3794 | + |
3795 | + main.exp1 [ fail ] |
3796 | + --- drizzle/tests/r/exp1.result 2010-11-02 02:10:25.107013998 +0300 |
3797 | + +++ drizzle/tests/r/exp1.reject 2010-11-02 02:10:32.017013999 +0300 |
3798 | + @@ -5,4 +5,5 @@ |
3799 | + a |
3800 | + 1 |
3801 | + 2 |
3802 | + +3 |
3803 | + DROP TABLE t1; |
3804 | + |
3805 | +A test case consists of a .test and a .result file. The .test file includes |
3806 | +the various statements to be executed for a test. The .result file lists |
3807 | +the expected results for a given test file. These files live in tests/t |
3808 | +and tests/r, respectively. This structure is the same for all test suites. |
3809 | + |
3810 | +test-run.pl options |
3811 | +=================== |
3812 | + |
3813 | +The :program:`test-run.pl` tool has several available options: |
3814 | + |
3815 | +./test-run [ OPTIONS ] [ TESTCASE ] |
3816 | + |
3817 | +Options to control what engine/variation to run |
3818 | +----------------------------------------------- |
3819 | + |
3820 | +.. program:: test-run |
3821 | + |
3822 | +.. option:: --compress |
3823 | + |
3824 | + Use the compressed protocol between client and server |
3825 | + |
3826 | +.. option:: --bench |
3827 | + |
3828 | + Run the benchmark suite |
3829 | + |
3830 | +.. option:: --small-bench |
3831 | + |
3832 | + Run the benchmarks with --small-tests --small-tables |
3833 | + |
3834 | +Options to control directories to use |
3835 | +------------------------------------- |
3836 | + |
3837 | +.. program:: test-run |
3838 | + |
3839 | +.. option:: --benchdir=DIR |
3840 | + |
3841 | + The directory where the benchmark suite is stored |
3842 | + (default: ../../mysql-bench) |
3843 | + |
3844 | +.. option:: --tmpdir=DIR |
3845 | + |
3846 | + The directory where temporary files are stored |
3847 | + (default: ./var/tmp). |
3848 | + |
3849 | +.. option:: --vardir=DIR |
3850 | + |
3851 | + The directory where files generated from the test run |
3852 | + is stored (default: ./var). Specifying a ramdisk or |
3853 | + tmpfs will speed up tests. |
3854 | + |
3855 | +.. option:: --mem |
3856 | + |
3857 | + Run testsuite in "memory" using tmpfs or ramdisk |
3858 | + Attempts to find a suitable location |
3859 | + using a builtin list of standard locations |
3860 | + for tmpfs (/dev/shm) |
3861 | + The option can also be set using environment |
3862 | + variable :envvar:`DTR_MEM` =[DIR] |
3863 | + |
3864 | +Options to control what test suites or cases to run |
3865 | +--------------------------------------------------- |
3866 | + |
3867 | +.. program:: test-run |
3868 | + |
3869 | +.. option:: --force |
3870 | + |
3871 | + Continue to run the suite after failure |
3872 | + |
3873 | +.. option:: --do-test=PREFIX or REGEX |
3874 | + |
3875 | + Run test cases which name are prefixed with PREFIX |
3876 | + or fulfills REGEX |
3877 | + |
3878 | +.. option:: --skip-test=PREFIX or REGEX |
3879 | + |
3880 | + Skip test cases which name are prefixed with PREFIX |
3881 | + or fulfills REGEX |
3882 | + |
3883 | +.. option:: --start-from=PREFIX |
3884 | + |
3885 | + Run test cases starting from test prefixed with PREFIX |
3886 | + suite[s]=NAME1,..,NAMEN Collect tests in suites from the comma separated |
3887 | + list of suite names. |
3888 | + The default is: "main,jp" |
3889 | + |
3890 | +.. option:: --skip-rpl |
3891 | + |
3892 | + Skip the replication test cases. |
3893 | + combination="ARG1 .. ARG2" Specify a set of "drizzled" arguments for one |
3894 | + combination. |
3895 | + |
3896 | +.. option:: --skip-combination |
3897 | + |
3898 | + Skip any combination options and combinations files |
3899 | + |
3900 | +.. option:: --repeat-test=n |
3901 | + |
3902 | + How many times to repeat each test (default: 1) |
3903 | + |
3904 | +Options that specify ports |
3905 | +-------------------------- |
3906 | + |
3907 | +.. program:: test-run |
3908 | + |
3909 | +.. option:: --master_port=PORT |
3910 | + |
3911 | + Specify the port number used by the first master |
3912 | + |
3913 | +.. option:: --slave_port=PORT |
3914 | + |
3915 | + Specify the port number used by the first slave |
3916 | + |
3917 | +.. option:: --dtr-build-thread=# |
3918 | + |
3919 | + Specify unique collection of ports. Can also be set by |
3920 | + setting the environment variable :envvar:`DTR_BUILD_THREAD`. |
3921 | + |
3922 | +Options for test case authoring |
3923 | +------------------------------- |
3924 | + |
3925 | +.. program:: test-run |
3926 | + |
3927 | +.. option:: --record TESTNAME |
3928 | + |
3929 | + (Re)genereate the result file for TESTNAME |
3930 | + |
3931 | +.. option:: --check-testcases |
3932 | + |
3933 | + Check testcases for sideeffects |
3934 | + |
3935 | +.. option:: --mark-progress |
3936 | + |
3937 | + Log line number and elapsed time to <testname>.progress |
3938 | + |
3939 | +Options that pass on options |
3940 | +---------------------------- |
3941 | + |
3942 | +.. program:: test-run |
3943 | + |
3944 | +.. option:: --drizzled=ARGS |
3945 | + |
3946 | + Specify additional arguments to "drizzled" |
3947 | + |
3948 | +Options to run test on running server |
3949 | +------------------------------------- |
3950 | + |
3951 | +.. program:: test-run |
3952 | + |
3953 | +.. option:: --extern |
3954 | + |
3955 | + Use running server for tests |
3956 | + |
3957 | +.. option:: --user=USER |
3958 | + |
3959 | + User for connection to extern server |
3960 | + |
3961 | +Options for debugging the product |
3962 | +--------------------------------- |
3963 | + |
3964 | +.. program:: test-run |
3965 | + |
3966 | +.. option:: --client-ddd |
3967 | + |
3968 | + Start drizzletest client in ddd |
3969 | + |
3970 | +.. option:: --client-debugger=NAME |
3971 | + |
3972 | + Start drizzletest in the selected debugger |
3973 | + |
3974 | +.. option:: --client-gdb |
3975 | + |
3976 | + Start drizzletest client in gdb |
3977 | + |
3978 | +.. option:: --ddd |
3979 | + |
3980 | + Start drizzled in ddd |
3981 | + |
3982 | +.. option:: --debug |
3983 | + |
3984 | + Dump trace output for all servers and client programs |
3985 | + |
3986 | +.. option:: --debugger=NAME |
3987 | + |
3988 | + Start drizzled in the selected debugger |
3989 | + |
3990 | +.. option:: --gdb |
3991 | + |
3992 | + Start the drizzled(s) in gdb |
3993 | + |
3994 | +.. option:: --manual-debug |
3995 | + |
3996 | + Let user manually start drizzled in debugger, before running test(s) |
3997 | + |
3998 | +.. option:: --manual-gdb |
3999 | + |
4000 | + Let user manually start drizzled in gdb, before running test(s) |
4001 | + |
4002 | +.. option:: --manual-ddd |
4003 | + |
4004 | + Let user manually start drizzled in ddd, before running test(s) |
4005 | + |
4006 | +.. option:: --master-binary=PATH |
4007 | + |
4008 | + Specify the master "drizzled" to use |
4009 | + |
4010 | +.. option:: --slave-binary=PATH |
4011 | + |
4012 | + Specify the slave "drizzled" to use |
4013 | + |
4014 | +.. option:: --strace-client |
4015 | + |
4016 | + Create strace output for drizzletest client |
4017 | + |
4018 | +.. option:: --max-save-core |
4019 | + |
4020 | + Limit the number of core files saved (to avoid filling up disks for |
4021 | + heavily crashing server). Defaults to 5, set to 0 for no limit. |
4022 | + |
4023 | +Options for coverage, profiling etc |
4024 | +----------------------------------- |
4025 | + |
4026 | +.. todo:: |
4027 | + |
4028 | + .. option:: --gcov |
4029 | + |
4030 | +.. program:: test-run |
4031 | + |
4032 | +.. option:: --gprof |
4033 | + |
4034 | + See online documentation on how to use it. |
4035 | + |
4036 | +.. option:: --valgrind |
4037 | + |
4038 | + Run the *drizzletest* and *drizzled* executables using valgrind with |
4039 | + default options |
4040 | + |
4041 | +.. option:: --valgrind-all |
4042 | + |
4043 | + Synonym for :option:`--valgrind` |
4044 | + |
4045 | +.. option:: --valgrind-drizzleslap |
4046 | + |
4047 | + Run "drizzleslap" with valgrind. |
4048 | + |
4049 | +.. option:: --valgrind-drizzletest |
4050 | + |
4051 | + Run the *drizzletest* and *drizzle_client_test* executable with valgrind |
4052 | + |
4053 | +.. option:: --valgrind-drizzled |
4054 | + |
4055 | + Run the "drizzled" executable with valgrind |
4056 | + |
4057 | +.. option:: --valgrind-options=ARGS |
4058 | + |
4059 | + Deprecated, use :option:`--valgrind-option` |
4060 | + |
4061 | +.. option:: --valgrind-option=ARGS |
4062 | + |
4063 | + Option to give valgrind, replaces default option(s), |
4064 | + can be specified more then once |
4065 | + |
4066 | +.. option:: --valgrind-path=[EXE] |
4067 | + |
4068 | + Path to the valgrind executable |
4069 | + |
4070 | +.. option:: --callgrind |
4071 | + |
4072 | + Instruct valgrind to use callgrind |
4073 | + |
4074 | +.. option:: --massif |
4075 | + |
4076 | + Instruct valgrind to use massif |
4077 | + |
4078 | +Misc options |
4079 | +------------ |
4080 | + |
4081 | +.. program:: test-run |
4082 | + |
4083 | +.. option:: --comment=STR |
4084 | + |
4085 | + Write STR to the output |
4086 | + |
4087 | +.. option:: --notimer |
4088 | + |
4089 | + Don't show test case execution time |
4090 | + |
4091 | +.. option:: --script-debug |
4092 | + |
4093 | + Debug this script itself |
4094 | + |
4095 | +.. option:: --verbose |
4096 | + |
4097 | + More verbose output |
4098 | + |
4099 | +.. option:: --start-and-exit |
4100 | + |
4101 | + Only initialize and start the servers, using the |
4102 | + startup settings for the specified test case (if any) |
4103 | + |
4104 | +.. option:: --start-dirty |
4105 | + |
4106 | + Only start the servers (without initialization) for |
4107 | + the specified test case (if any) |
4108 | + |
4109 | +.. option:: --fast |
4110 | + |
4111 | + Don't try to clean up from earlier runs |
4112 | + |
4113 | +.. option:: --reorder |
4114 | + |
4115 | + Reorder tests to get fewer server restarts |
4116 | + |
4117 | +.. option:: --help |
4118 | + |
4119 | + Get this help text |
4120 | + |
4121 | +.. option:: --testcase-timeout=MINUTES |
4122 | + |
4123 | + Max test case run time (default 15) |
4124 | + |
4125 | +.. option:: --suite-timeout=MINUTES |
4126 | + |
4127 | + Max test suite run time (default 180) |
4128 | + |
4129 | +.. option:: --warnings | log-warnings |
4130 | + |
4131 | + Pass --log-warnings to drizzled |
4132 | + |
4133 | +.. option:: --sleep=SECONDS |
4134 | + |
4135 | + Passed to drizzletest, will be used as fixed sleep time |
4136 | + |
4137 | + |
4138 | |
4139 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst' |
4140 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst 1970-01-01 00:00:00 +0000 |
4141 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/docs/writing_tests.rst 2012-06-27 07:03:19 +0000 |
4142 | @@ -0,0 +1,100 @@ |
4143 | +********************************** |
4144 | +Writing native/unittest test cases |
4145 | +********************************** |
4146 | + |
4147 | +Synopsis |
4148 | +======== |
4149 | + |
4150 | +Here, we discuss various topics related to writing test cases, with a focus on features |
4151 | +that allow for more complex testing scenarios. Additional documentation for other testing |
4152 | +tools will come later. |
4153 | + |
4154 | +Writing native mode tests |
4155 | +========================== |
4156 | +Native mode is a way of saying Python unittest mode. The goal is that all tests will use this paradigm as it is clean, flexible, and easily expanded. Some references: |
4157 | + |
4158 | + * http://docs.python.org/library/unittest.html |
4159 | + * http://docs.python.org/library/unittest.html#assert-methods |
4160 | + |
4161 | +Writing native modes tests can be quite simple. Here is an example:: |
4162 | + |
4163 | + from lib.util.mysqlBaseTestCase import mysqlBaseTestCase |
4164 | + |
4165 | + server_requirements = [[]] |
4166 | + servers = [] |
4167 | + server_manager = None |
4168 | + test_executor = None |
4169 | + |
4170 | + class basicTest(mysqlBaseTestCase): |
4171 | + |
4172 | + def test_OptimizerSubquery1(self): |
4173 | + self.servers = servers |
4174 | + test_cmd = "./gentest.pl --gendata=conf/percona/outer_join_percona.zz --grammar=conf/percona/outer_join_percona.yy --queries=500 --threads=5" |
4175 | + retcode, output = self.execute_randgen(test_cmd, test_executor, servers) |
4176 | + self.assertEqual(retcode, 0, output) |
4177 | + |
4178 | +Every test case should have a basicTest class. This is not ideal, but it is the current implementation and testing does not suffer for the lack of creative naming ; ). The test runner pulls from this class and all test_* methods for the class are executed. |
4179 | + |
4180 | +Requesting / specifying server requirements |
4181 | +-------------------------------------------- |
4182 | + |
4183 | +The 'server_requirements' block in the example above is how a test case requests servers for use in a test case. |
4184 | +The content is a list of Python lists, with each sublist containing a string of server options. |
4185 | +A more complex example:: |
4186 | + |
4187 | + server_requirements = [ [ ("--binlog-do-db=test " |
4188 | + "--innodb-file-per-table " |
4189 | + "--innodb_file_format='Barracuda' " |
4190 | + "--sync_binlog=100 " |
4191 | + "--innodb_flush_log_at_trx_commit=2 " |
4192 | + )] |
4193 | + ,[ ("--innodb_file_format='Barracuda' " |
4194 | + "--innodb_flush_log_at_trx_commit=2" |
4195 | + )] |
4196 | + ] |
4197 | + |
4198 | +The server_manager is passed these requirements and attempts to start up a server with them. In the event of a startup failure, informative error information will be provided. |
4199 | + |
4200 | +More complex server setup tasks |
4201 | +-------------------------------- |
4202 | + |
4203 | +Sometimes we need to do things that aren't easily described as just a startup option. Sometimes, we need to specify that a server should replicate from another, or pre-populate the server prior to startup, and so on. Here is some information on the tools kewpie provides to help with such tasks |
4204 | + |
4205 | +The common thread to all of these tasks is the use of the server_requests variable:: |
4206 | + |
4207 | + from lib.util.mysqlBaseTestCase import mysqlBaseTestCase |
4208 | + |
4209 | + server_requirements = [[],[],[]] |
4210 | + server_requests = {'join_cluster':[(0,1), (0,2)]} |
4211 | + servers = [] |
4212 | + server_manager = None |
4213 | + test_executor = None |
4214 | + |
4215 | +Setting a server as a slave to another |
4216 | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
4217 | + |
4218 | +In the example above, we see that we have a list with two items tied to the key 'join_cluster'. |
4219 | +The server_manager has a method called join_cluster with basically says:: |
4220 | + def join_cluster(master_server, slave_server): |
4221 | + slave_server.set_master(master_server) |
4222 | + |
4223 | +The way a server sets another as its master can vary greatly and is described in the relevant server object. This currently works for standard MySQl and Galera replication |
4224 | + |
4225 | +Using a pre-populated datadir |
4226 | +------------------------------ |
4227 | +The experimental test runner, kewpie allows for starting a server with a pre-populated datadir |
4228 | +for a test case. This is accomplished via the use of a .cnf file (versus a master.opt file) |
4229 | +Over time, this will be the direction for all drizzletest cases. |
4230 | + |
4231 | +The .cnf file shown below tells the test-runner to use the directory drizzle/tests/std_data/backwards_compat_data |
4232 | +as the datadir for the first server. If a test uses multiple servers, the .cnf file can have additional sections ([s1]...[sN]):: |
4233 | + |
4234 | + [test_servers] |
4235 | + servers = [[]] |
4236 | + |
4237 | + [s0] |
4238 | + load-datadir=backwards_compat_data |
4239 | + |
4240 | +All datadirs are expected to be in tests/std_data. If there is need for the ability to use datadirs outside of this location, |
4241 | +it can be explored. |
4242 | + |
4243 | |
4244 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py' |
4245 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py 1970-01-01 00:00:00 +0000 |
4246 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/kewpie.py 2012-06-27 07:03:19 +0000 |
4247 | @@ -0,0 +1,131 @@ |
4248 | +#! /usr/bin/env python |
4249 | +# -*- mode: python; indent-tabs-mode: nil; -*- |
4250 | +# vim:expandtab:shiftwidth=2:tabstop=2:smarttab: |
4251 | +# |
4252 | +# Copyright (C) 2010 Patrick Crews |
4253 | +# |
4254 | +# This program is free software; you can redistribute it and/or modify |
4255 | +# it under the terms of the GNU General Public License as published by |
4256 | +# the Free Software Foundation; either version 2 of the License, or |
4257 | +# (at your option) any later version. |
4258 | +# |
4259 | +# This program is distributed in the hope that it will be useful, |
4260 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4261 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4262 | +# GNU General Public License for more details. |
4263 | +# |
4264 | +# You should have received a copy of the GNU General Public License |
4265 | +# along with this program; if not, write to the Free Software |
4266 | +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
4267 | + |
4268 | + |
4269 | +""" kewpie.py |
4270 | + |
4271 | +(DataBase) Quality Platform - system for executing various |
4272 | +testing systems and the helper code |
4273 | + |
4274 | +Designed to be a modular test-runner. Different testing tools |
4275 | +and databases may be plugged into the system via hacking the |
4276 | +appropriate modules |
4277 | + |
4278 | +Currently geared towards Drizzle and MySQL systems |
4279 | +Runs: Drizzle, MySQL, Percona Server, Galera dbms's |
4280 | +""" |
4281 | + |
4282 | +# imports |
4283 | +import os |
4284 | +import imp |
4285 | +import sys |
4286 | + |
4287 | +import lib.opts.test_run_options as test_run_options |
4288 | +from lib.opts.defaults import get_defaults |
4289 | +from lib.modes.test_mode import handle_mode |
4290 | +from lib.server_mgmt.server_management import serverManager |
4291 | +from lib.sys_mgmt.system_management import systemManager |
4292 | +from lib.test_mgmt.execution_management import executionManager |
4293 | +from lib.opts.matrix_manager import matrixManager |
4294 | + |
4295 | +# functions |
4296 | +def handle_sys_config(input_args, defaults): |
4297 | + """ Look for / update defaults based on sys_config file |
4298 | + if specified |
4299 | + |
4300 | + """ |
4301 | + key_string = '--sys-config' |
4302 | + module_file = None |
4303 | + for input_arg in input_args: |
4304 | + if input_arg.startswith(key_string): |
4305 | + module_file = input_arg.split(key_string)[1].replace('=','').strip() |
4306 | + module_file = os.path.abspath(module_file) |
4307 | + break |
4308 | + if module_file: |
4309 | + module_parent = os.path.dirname(module_file) |
4310 | + sys.path.append(module_parent) |
4311 | + module_name = os.path.basename(module_file).replace('.py','') |
4312 | + project = imp.load_source(module_name, module_file) |
4313 | + defaults = project.get_project_defaults(module_file, defaults) |
4314 | + return defaults |
4315 | + |
4316 | +# main |
4317 | +# We base / look for a lot of things based on the location of |
4318 | +# the kewpie.py file |
4319 | +qp_rootdir = os.path.dirname(os.path.abspath(sys.argv[0])) |
4320 | +#project_name = 'percona-xtradb-cluster' |
4321 | +#project_name = 'xtrabackup' |
4322 | +project_name = None |
4323 | +defaults = get_defaults(qp_rootdir,project_name) |
4324 | +defaults = handle_sys_config(sys.argv, defaults) |
4325 | +variables = test_run_options.parse_qp_options(defaults) |
4326 | +variables['qp_root'] = qp_rootdir |
4327 | +system_manager = None |
4328 | +server_manager = None |
4329 | +test_manager = None |
4330 | +test_executor = None |
4331 | +execution_manager = None |
4332 | + |
4333 | +try: |
4334 | + matrix_manager = matrixManager(variables) |
4335 | + # Some system-level work is constant regardless |
4336 | + # of the test to be run |
4337 | + system_manager = systemManager(variables) |
4338 | + |
4339 | + # Create our server_manager |
4340 | + server_manager = serverManager(system_manager, variables) |
4341 | + |
4342 | + # Get our mode-specific test_manager and test_executor |
4343 | + (test_manager,test_executor) = handle_mode(variables, system_manager) |
4344 | + |
4345 | + # Gather our tests for execution |
4346 | + test_manager.gather_tests() |
4347 | + |
4348 | + # Initialize test execution manager |
4349 | + execution_manager = executionManager(server_manager, system_manager |
4350 | + , test_manager, test_executor |
4351 | + , variables, matrix_manager) |
4352 | + |
4353 | + # Execute our tests! |
4354 | + execution_manager.execute_tests() |
4355 | + |
4356 | +except Exception, e: |
4357 | + print Exception, e |
4358 | + |
4359 | +except KeyboardInterrupt: |
4360 | + print "\n\nDetected <Ctrl>+c, shutting down and cleaning up..." |
4361 | + |
4362 | +finally: |
4363 | +# TODO - make a more robust cleanup |
4364 | +# At the moment, runaway servers are our biggest concern |
4365 | + if server_manager and not variables['startandexit']: |
4366 | + if variables['gdb']: |
4367 | + server_manager.cleanup_all_servers() |
4368 | + else: |
4369 | + server_manager.cleanup() |
4370 | + if not variables['startandexit']: |
4371 | + if test_manager: |
4372 | + fail_count = test_manager.has_failing_tests() |
4373 | + sys.exit(test_manager.has_failing_tests()) |
4374 | + else: |
4375 | + # return 1 as we likely have a problem if we don't have a |
4376 | + # test_manager |
4377 | + sys.exit(1) |
4378 | + |
4379 | |
4380 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib' |
4381 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/__init__.py' |
4382 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes' |
4383 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/__init__.py' |
4384 | === added directory 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr' |
4385 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/__init__.py' |
4386 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py' |
4387 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py 1970-01-01 00:00:00 +0000 |
4388 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_execution.py 2012-06-27 07:03:19 +0000 |
4389 | @@ -0,0 +1,139 @@ |
4390 | +#! /usr/bin/env python |
4391 | +# -*- mode: python; indent-tabs-mode: nil; -*- |
4392 | +# vim:expandtab:shiftwidth=2:tabstop=2:smarttab: |
4393 | +# |
4394 | +# Copyright (C) 2010 Patrick Crews |
4395 | +# |
4396 | +# |
4397 | +# This program is free software; you can redistribute it and/or modify |
4398 | +# it under the terms of the GNU General Public License as published by |
4399 | +# the Free Software Foundation; either version 2 of the License, or |
4400 | +# (at your option) any later version. |
4401 | +# |
4402 | +# This program is distributed in the hope that it will be useful, |
4403 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4404 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4405 | +# GNU General Public License for more details. |
4406 | +# |
4407 | +# You should have received a copy of the GNU General Public License |
4408 | +# along with this program; if not, write to the Free Software |
4409 | +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
4410 | + |
4411 | +""" dtr_test_execution: |
4412 | + code related to the execution of dtr test cases |
4413 | + |
4414 | + We are provided access to a testManager with |
4415 | + dtr-specific testCases. We contact teh executionManager |
4416 | + to produce the system and server configurations we need |
4417 | + to execute a test. |
4418 | + |
4419 | +""" |
4420 | + |
4421 | +# imports |
4422 | +import os |
4423 | +import sys |
4424 | +import subprocess |
4425 | +import commands |
4426 | + |
4427 | +import lib.test_mgmt.test_execution as test_execution |
4428 | + |
4429 | +class testExecutor(test_execution.testExecutor): |
4430 | + """ dtr-specific testExecutor |
4431 | + We currently execute by sending test-case |
4432 | + data to client/drizzletest...for now |
4433 | + |
4434 | + """ |
4435 | + |
4436 | + def execute_testCase (self): |
4437 | + """ Execute a dtr testCase via calls to drizzletest (boo) |
4438 | + Eventually, we will replace drizzletest with pythonic |
4439 | + goodness, but we have these classes stored here for the moment |
4440 | + |
4441 | + """ |
4442 | + test_execution.testExecutor.execute_testCase(self) |
4443 | + self.status = 0 |
4444 | + |
4445 | + # generate command line |
4446 | + drizzletest_cmd = self.generate_drizzletest_call() |
4447 | + |
4448 | + # call drizzletest |
4449 | + self.execute_drizzletest(drizzletest_cmd) |
4450 | + |
4451 | + # analyze results |
4452 | + self.current_test_status = self.process_drizzletest_output() |
4453 | + self.set_server_status(self.current_test_status) |
4454 | + |
4455 | + |
4456 | + def generate_drizzletest_call(self): |
4457 | + """ Produce the command line we use to call drizzletest |
4458 | + We have a healthy number of values, so we put this in a |
4459 | + nice function |
4460 | + |
4461 | + """ |
4462 | + |
4463 | + drizzletest_arguments = [ '--no-defaults' |
4464 | + , '--silent' |
4465 | + , '--tmpdir=%s' %(self.master_server.tmpdir) |
4466 | + , '--logdir=%s' %(self.master_server.logdir) |
4467 | + , '--port=%d' %(self.master_server.master_port) |
4468 | + , '--database=test' |
4469 | + , '--user=root' |
4470 | + , '--password=' |
4471 | + #, '--testdir=%s' %(self.test_manager.testdir) |
4472 | + , '--test-file=%s' %(self.current_testcase.testpath) |
4473 | + , '--tail-lines=20' |
4474 | + , '--timer-file=%s' %(self.master_server.timer_file) |
4475 | + , '--result-file=%s' %(self.current_testcase.resultpath) |
4476 | + ] |
4477 | + if self.record_flag: |
4478 | + # We want to record a new result |
4479 | + drizzletest_arguments.append('--record') |
4480 | + drizzletest_cmd = "%s %s %s" %( self.cmd_prefix |
4481 | + , self.master_server.code_tree.drizzletest |
4482 | + , " ".join(drizzletest_arguments)) |
4483 | + return drizzletest_cmd |
4484 | + |
4485 | + def execute_drizzletest(self, drizzletest_cmd): |
4486 | + """ Execute the commandline and return the result. |
4487 | + We use subprocess as we can pass os.environ dicts and whatnot |
4488 | + |
4489 | + """ |
4490 | + testcase_name = self.current_testcase.fullname |
4491 | + self.time_manager.start(testcase_name,'test') |
4492 | + #retcode, output = self.system_manager.execute_cmd( drizzletest_cmd |
4493 | + # , must_pass = 0 ) |
4494 | + drizzletest_outfile = os.path.join(self.logdir,'drizzletest.out') |
4495 | + drizzletest_output = open(drizzletest_outfile,'w') |
4496 | + drizzletest_subproc = subprocess.Popen( drizzletest_cmd |
4497 | + , shell=True |
4498 | + , cwd=self.system_manager.testdir |
4499 | + , env=self.working_environment |
4500 | + , stdout = drizzletest_output |
4501 | + , stderr = subprocess.STDOUT |
4502 | + ) |
4503 | + drizzletest_subproc.wait() |
4504 | + retcode = drizzletest_subproc.returncode |
4505 | + execution_time = int(self.time_manager.stop(testcase_name)*1000) # millisec |
4506 | + |
4507 | + drizzletest_output.close() |
4508 | + drizzletest_file = open(drizzletest_outfile,'r') |
4509 | + output = ''.join(drizzletest_file.readlines()) |
4510 | + drizzletest_file.close() |
4511 | + |
4512 | + self.logging.debug("drizzletest_retcode: %d" %(retcode)) |
4513 | + self.current_test_retcode = retcode |
4514 | + self.current_test_output = output |
4515 | + self.current_test_exec_time = execution_time |
4516 | + |
4517 | + def process_drizzletest_output(self): |
4518 | + """ Drizzletest has run, we now check out what we have """ |
4519 | + retcode = self.current_test_retcode |
4520 | + if retcode == 0: |
4521 | + return 'pass' |
4522 | + elif retcode == 62 or retcode == 15872: |
4523 | + return 'skipped' |
4524 | + elif retcode == 63 or retcode == 1: |
4525 | + return 'fail' |
4526 | + else: |
4527 | + return 'fail' |
4528 | + |
4529 | |
4530 | === added file 'Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py' |
4531 | --- Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py 1970-01-01 00:00:00 +0000 |
4532 | +++ Percona-Server/plugin/percona-pam-for-mysql/test/dbqp/lib/modes/dtr/dtr_test_management.py 2012-06-27 07:03:19 +0000 |
4533 | @@ -0,0 +1,495 @@ |
4534 | +#! /usr/bin/env python |
4535 | +# -*- mode: python; indent-tabs-mode: nil; -*- |
4536 | +# vim:expandtab:shiftwidth=2:tabstop=2:smarttab: |
4537 | +# |
4538 | +# Copyright (C) 2010 Patrick Crews |
4539 | +# |
4540 | +## This program is free software; you can redistribute it and/or modify |
4541 | +# it under the terms of the GNU General Public License as published by |
4542 | +# the Free Software Foundation; either version 2 of the License, or |
4543 | +# (at your option) any later version. |
4544 | +# |
4545 | +# This program is distributed in the hope that it will be useful, |
4546 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4547 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4548 | +# GNU General Public License for more details. |
4549 | +# |
4550 | +# You should have received a copy of the GNU General Public License |
4551 | +# along with this program; if not, write to the Free Software |
4552 | +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
4553 | + |
4554 | +""" dtr_test_management: |
4555 | + code related to the gathering / analysis / management of |
4556 | + the test cases |
4557 | + ie - collecting the list of tests in each suite, then |
4558 | + gathering additional, relevant information for the test-runner's dtr |
4559 | + mode. (traditional diff-based testing) |
4560 | + |
4561 | +""" |
4562 | + |
4563 | +# imports |
4564 | +import os |
4565 | +import re |
4566 | +import sys |
4567 | +from ConfigParser import RawConfigParser |
4568 | + |
4569 | +import lib.test_mgmt.test_management as test_management |
4570 | + |
4571 | + |
4572 | + |
4573 | +class testCase: |
4574 | + """Holds info on a per .test file basis |
4575 | + Attributes contain information necessary to execute / validate |
4576 | + the test file when it is executed. |
4577 | + |
4578 | + """ |
4579 | + def __init__(self, system_manager, test_case=None, test_name=None, suite_name=None |
4580 | + , suite_path=None, test_server_options=[], test_path=None, result_path=None |
4581 | + , comment=None, master_sh=None, cnf_path=None |
4582 | + , disable=0, innodb_test=1 |
4583 | + , need_debug=0, debug=0): |
4584 | + self.system_manager = system_manager |
4585 | + self.logging = self.system_manager.logging |
4586 | + self.skip_keys = ['system_manager'] |
4587 | + self.testcase = test_case |
4588 | + self.testname = test_name |
4589 | + self.suitename = suite_name |
4590 | + self.suitepath = suite_path |
4591 | + self.fullname = "%s.%s" %(suite_name, test_name) |
4592 | + self.testpath = test_path |
4593 | + self.resultpath = result_path |
4594 | + |
4595 | + self.skip_flag = 0 |
4596 | + self.timezone = "GMT-3" |
4597 | + self.component_id = "drizzled" |
4598 | + self.slave_count = 0 |
4599 | + self.master_count = 1 |
4600 | + self.server_options = test_server_options |
4601 | + # We will populate this in a better fashion later on |
4602 | + # as we allow .cnf files, we need to do a bit of |
4603 | + # messing about to make this work right |
4604 | + if self.server_options == [] or type(self.server_options[0]) is not list: |
4605 | + self.server_requirements=[self.server_options] |
4606 | + else: |
4607 | + self.server_requirements = self.server_options |
4608 | + self.server_options= self.server_options[0][0] |
4609 | + self.comment = comment |
4610 | + self.master_sh = master_sh |
4611 | + self.cnf_path = cnf_path |
4612 | + self.disable = disable |
4613 | + self.innodb_test = innodb_test |
4614 | + self.need_debug = need_debug |
4615 | + |
4616 | + self.system_manager.logging.debug_class(self) |
4617 | + |
4618 | + def should_run(self): |
4619 | + if self.skip_flag or self.disable: |
4620 | + return 0 |
4621 | + else: |
4622 | + return 1 |
4623 | + |
4624 | + |
4625 | + |
4626 | + |
4627 | + |
4628 | +class testManager(test_management.testManager): |
4629 | + """Deals with scanning test directories, gathering test cases, and |
4630 | + collecting per-test information (opt files, etc) for use by the |
4631 | + test-runner |
4632 | + |
4633 | + """ |
4634 | + |
4635 | + def process_suite(self,suite_dir): |
4636 | + """Process a test suite. |
4637 | + This includes searching for tests in test_list and only |
4638 | + working with the named tests (all tests in suite is the default) |
4639 | + Further processing includes reading the disabled.def file |
4640 | + to know which tests to skip, processing the suite.opt file, |
4641 | + and processing the individual test cases for data relevant |
4642 | + to the rest of the test-runner |
4643 | + |
4644 | + """ |
4645 | + |
4646 | + self.system_manager.logging.verbose("Processing suite: %s" %(suite_dir)) |
4647 | + |
4648 | + # Generate our test and result files: |
4649 | + testdir = os.path.join(suite_dir, 't') |
4650 | + resultdir = os.path.join(suite_dir, 'r') |
4651 | + |
4652 | + # Do basic checks to make sure this is worth further work |
4653 | + self.check_suite(suite_dir, testdir, resultdir) |
4654 | + |
4655 | + # Get suite-level options |
4656 | + suite_options = [] |
4657 | + cnf_path, suite_options = self.process_suite_options(suite_dir) |
4658 | + |
4659 | + # Get the 'name' of the suite. This can require some processing |
4660 | + # But the name is useful for reporting and whatnot |
4661 | + suite_name = self.get_suite_name(suite_dir) |
4662 | + |
4663 | + # Get the contents of the testdir and filter it accordingly |
4664 | + # This applies do-test / skip-test filters and any specific |
4665 | + # test case names |
4666 | + testlist = self.testlist_filter(os.listdir(testdir)) |
4667 | + # sort our list if no individual tests were specified |
4668 | + if not self.desired_tests: |
4669 | + testlist.sort() |
4670 | + |
4671 | + # gather deeper information on tests we are interested in |
4672 | + if testlist: |
4673 | + # We have tests we want to process, we gather additional information |
4674 | + # that is useful at the suite level. This includes disabled tests |
4675 | + # Gather disabled test list. |
4676 | + # This is used in process_test_file() |
4677 | + disabled_tests = {} |
4678 | + disabled_tests = self.process_disabled_test_file(testdir) |
4679 | + for test_case in testlist: |
4680 | + self.add_test(self.process_test_file(suite_dir, |
4681 | + suite_name, cnf_path, suite_options |
4682 | + , disabled_tests, testdir |
4683 | + , resultdir, test_case)) |
4684 | + |
4685 | + def process_test_file(self, suite_dir, suite_name, suite_cnf_path, suite_options |
4686 | + , disabled_tests, testdir |
4687 | + , resultdir, test_case): |
4688 | + """ We generate / find / store all the relevant information per-test. |
4689 | + This information will be used when actually executing the test |
4690 | + We store the data in a testCase object |
4691 | + |
4692 | + """ |
4693 | + |
4694 | + test_server_options = suite_options |
4695 | + test_name = test_case.replace('.test','') |
4696 | + self.system_manager.logging.verbose("Processing test: %s.%s" %(suite_name,test_name)) |
4697 | + |
4698 | + |
4699 | + # Fix this , create a testCase with gather_test_data() passed |
4700 | + # as the argument |
4701 | + # Ensure we pass everything we need and use it all |
4702 | + ( test_path |
4703 | + , result_file_name |
4704 | + , result_path |
4705 | + , comment |
4706 | + , master_sh |
4707 | + , cnf_path |
4708 | + , test_server_options |
4709 | + , disable |
4710 | + , innodb_test |
4711 | + , need_debug) = self.gather_test_data(test_case, test_name, |
4712 | + suite_name, test_server_options,testdir, |
4713 | + resultdir, disabled_tests) |
4714 | + if suite_cnf_path and not cnf_path: |
4715 | + cnf_path=suite_cnf_path |
4716 | + test_case = testCase(self.system_manager, test_case, test_name, suite_name, |
4717 | + suite_dir, test_server_options,test_path, result_path, |
4718 | + master_sh=master_sh, cnf_path=cnf_path, debug=self.debug) |
4719 | + return test_case |
4720 | + |
4721 | + |
4722 | +######################################################################## |
4723 | +# utility functions |
4724 | +# |
4725 | +# Stuff that helps us out and simplifies our main functions |
4726 | +# But isn't that important unless you need to dig deep |
4727 | +######################################################################## |
4728 | + |
4729 | + def gather_test_data(self, test_case, test_name, suite_name, |
4730 | + test_server_options, testdir, resultdir, disabled_tests): |
4731 | + """ We gather all of the data needed to produce a testCase for |
4732 | + a given test |
4733 | + |
4734 | + """ |
4735 | + |
4736 | + test_path = os.path.join(testdir,test_case) |
4737 | + result_file_name = test_name+'.result' |
4738 | + result_path = self.find_result_path(resultdir, result_file_name) |
4739 | + comment = None |
4740 | + master_sh_path = test_path.replace('.test','-master.sh') |
4741 | + if os.path.exists(master_sh_path): |
4742 | + master_sh = master_sh_path |
4743 | + else: |
4744 | + master_sh = None |
4745 | + master_opt_path = test_path.replace('.test', '-master.opt') |
4746 | + config_file_path = test_path.replace('.test', '.cnf') |
4747 | + # NOTE: this currently makes suite level server options additive |
4748 | + # to file-level .opt files...not sure if this is the best. |
4749 | + test_server_options = test_server_options + self.process_opt_file( |
4750 | + master_opt_path) |
4751 | + # deal with .cnf files (which supercede master.opt stuff) |
4752 | + cnf_options = [] |
4753 | + cnf_flag, returned_options = self.process_cnf_file(config_file_path) |
4754 | + cnf_options += returned_options |
4755 | + if cnf_flag: # we found a proper file and need to override |
4756 | + found_options = cnf_options |
4757 | + else: |
4758 | + config_file_path = None |
4759 | + (disable, comment) = self.check_if_disabled(disabled_tests, test_name) |
4760 | + innodb_test = 0 |
4761 | + need_debug = 0 |
4762 | + return (test_path, result_file_name, result_path, comment, master_sh, |
4763 | + config_file_path, test_server_options, disable, innodb_test, need_debug) |
4764 | + |
4765 | + def check_suite(self, suite_dir, testdir, resultdir): |
4766 | + """Handle basic checks of the suite: |
4767 | + does the suite exist? |
4768 | + is there a /t dir? |
4769 | + is there a /r dir? |
4770 | + Error and die if not |
4771 | + |
4772 | + """ |
4773 | + # We expect suite to be a path name, no fuzzy searching |
4774 | + if not os.path.exists(suite_dir): |
4775 | + self.system_manager.logging.error("Suite: %s does not exist" %(suite_dir)) |
4776 | + sys.exit(1) |
4777 | + |
4778 | + # Ensure our test and result directories are present |
4779 | + if not os.path.exists(testdir): |
4780 | + self.system_manager.logging.error("Suite: %s does not have a 't' directory (expected location for test files)" %(suite_dir)) |
4781 | + sys.exit(1) |
4782 | + if not os.path.exists(resultdir): |
4783 | + self.system_manager.logging.error("Suite: %s does not have an 'r' directory (expected location for result files)" %(suite_dir)) |
4784 | + sys.exit(1) |
4785 | + |
4786 | + def get_suite_name(self, suite_dir): |
4787 | + """ Get the 'name' of the suite |
4788 | + This can either be the path basename or one directory up, as |
4789 | + in the case of files in the drizzle/plugins directory |
4790 | + |
4791 | + """ |
4792 | + |
4793 | + # We trim any trailing path delimiters as python returns |
4794 | + # '' for basedir if the path ends that way |
4795 | + # BEGIN horrible hack to accomodate bad location of main suite : / |
4796 | + if suite_dir == self.testdir: |
4797 | + return 'main' |
4798 | + # END horrible hack : / |
4799 | + if suite_dir.endswith('/'): |
4800 | + suite_dir=suite_dir[:-1] |
4801 | + suite_dir_root,suite_dir_basename = os.path.split(suite_dir) |
4802 | + if suite_dir_basename == 'tests' or suite_dir_basename == 'drizzle-tests': |
4803 | + suite_name = os.path.basename(suite_dir_root) |
4804 | + else: |
4805 | + suite_name = suite_dir_basename |
4806 | + self.system_manager.logging.debug("Suite_name: %s" %(suite_name)) |
4807 | + return suite_name |
4808 | + |
4809 | + def process_suite_options(self, suite_dir): |
4810 | + """ Process the suite.opt and master.opt files |
4811 | + that reside at the suite-level if they exist. |
4812 | + Return a list of the options found |
4813 | + |
4814 | + We also process .cnf files - this |
4815 | + is currently dbqp-only and is the proper |
4816 | + way to do things :P |
4817 | + |
4818 | + """ |
4819 | + found_options = [] |
4820 | + opt_files = ['t/master.opt','t/suite.opt'] |
4821 | + for opt_file in opt_files: |
4822 | + found_options = found_options + self.process_opt_file(os.path.join(suite_dir,opt_file)) |
4823 | + # We also process the suite-level .cnf file(s). We override |
4824 | + # a master.opt file if we have a .cnf file. There is no reason they |
4825 | + # should ever be used in conjunction and I am biased towards .cnf ; ) |
4826 | + cnf_files = ['t/master.cnf'] |
4827 | + cnf_options = [] |
4828 | + for cnf_file in cnf_files: |
4829 | + config_file_path = os.path.join(suite_dir,cnf_file) |
4830 | + cnf_flag, returned_options = self.process_cnf_file(config_file_path) |
4831 | + cnf_options += returned_options |
4832 | + if cnf_flag: # we found a proper file and need to override |
4833 | + found_options = cnf_options |
4834 | + else: |
4835 | + config_file_path = None |
4836 | + return config_file_path, found_options |
4837 | + |
4838 | + def process_disabled_test_file(self, testdir): |
4839 | + """ Checks and processes the suite's disabled.def |
4840 | + file. This file must reside in the suite/t directory |
4841 | + It must be in the format: |
4842 | + test-name : comment (eg BugNNNN - bug on hold, test disabled) |
4843 | + In reality a test should *never* be disabled. EVER. |
4844 | + However, we keep this as a bit of utility |
4845 | + |
4846 | + """ |
4847 | + disabled_tests = {} |
4848 | + disabled_def_path = os.path.join(testdir,'disabled.def') |
4849 | + if not os.path.exists(disabled_def_path): |
4850 | + return disabled_tests |
4851 | + |
4852 | + try: |
4853 | + disabled_test_file = open(disabled_def_path,'r') |
4854 | + except IOError, e: |
4855 | + self.system_manager.logging.error("Problem opening disabled.def file: %s" %(disabled_def_path)) |
4856 | + sys.exit(1) |
4857 | + |
4858 | + self.system_manager.logging.debug("Processing disabled.def file: %s" %(disabled_def_path)) |
4859 | + disabled_bug_pattern = re.compile("[\S]+[\s]+:[\s]+[\S]") |
4860 | + |
4861 | + for line in disabled_test_file: |
4862 | + line = line.strip() |
4863 | + if not line.startswith('#'): # comment |
4864 | + if re.match(disabled_test_pattern,line): |
4865 | + self.system_manager.logging.debug("found disabled test - %s" %(line)) |
4866 | + test_name, test_comment = line.split(':') |
4867 | + disabled_tests[test_name.strip()]=test_comment.strip() |
4868 | + |
4869 | + disabled_test_file.close() |
4870 | + return disabled_tests |
4871 | + |
4872 | + |
4873 | + def process_opt_file(self, opt_file_path): |
4874 | + """ Process a test-run '.opt' file. |
4875 | + These files contain test and suite-specific server options |
4876 | + (ie what options the server needs to use for the test) |
4877 | + |
4878 | + Returns a list of the options (we don't really validate...yet) |
4879 | + |
4880 | + NOTE: test-run.pl allows for server *and* system options |
4881 | + (eg timezone, slave_count, etc) in opt files. We don't. |
4882 | + None of our tests use this and we should probably avoid it |
4883 | + We can introduce server and system .opt files or even better |
4884 | + would be to use config files as we do with drizzle-automation |
4885 | + This would allow us to specify options for several different |
4886 | + things in a single file, but in a clean and standardized manner |
4887 | + |
4888 | + """ |
4889 | + found_options = [] |
4890 | + if not os.path.exists(opt_file_path): |
4891 | + return found_options |
4892 | + |
4893 | + try: |
4894 | + opt_file = open(opt_file_path,'r') |
4895 | + except IOError, e: |
4896 | + self.system_manager.logging.error("Problem opening option file: %s" %(opt_file_path)) |
4897 | + sys.exit(1) |
4898 | + |
4899 | + self.system_manager.logging.debug("Processing opt file: %s" %(opt_file_path)) |
4900 | + for line in opt_file: |
4901 | + options = line.split('--') |
4902 | + if options: |
4903 | + for option in options: |
4904 | + if option: |
4905 | + if 'restart' in option or '#' in option: |
4906 | + option = 'restart' |
4907 | + found_options.append('--%s' %(option.strip())) |
4908 | + opt_file.close() |
4909 | + return found_options |
4910 | + |
4911 | + def process_cnf_file(self, cnf_file_path): |
4912 | + """ We extract meaningful information from a .cnf file |
4913 | + if it exists. Currently limited to server allocation |
4914 | + needs |
4915 | + |
4916 | + """ |
4917 | + |
4918 | + server_requirements = [] |
4919 | + cnf_flag = 0 |
4920 | + if os.path.exists(cnf_file_path): |
4921 | + cnf_flag = 1 |
4922 | + config_reader = RawConfigParser() |
4923 | + config_reader.read(cnf_file_path) |
4924 | + server_requirements = self.process_server_reqs(config_reader.get('test_servers','servers')) |
4925 | + return ( cnf_flag, server_requirements ) |
4926 | + |
4927 | + def process_server_reqs(self,data_string): |
4928 | + """ We read in the list of lists as a string, so we need to |
4929 | + handle this / break it down into proper chunks |
4930 | + |
4931 | + """ |
4932 | + server_reqs = [] |
4933 | + # We expect to see a list of lists and throw away the |
4934 | + # enclosing brackets |
4935 | + option_sets = data_string[1:-1].strip().split(',') |
4936 | + for option_set in option_sets: |
4937 | + server_reqs.append([option_set[1:-1].strip()]) |
4938 | + return server_reqs |
4939 | + |
4940 | + def testlist_filter(self, testlist): |
4941 | + """ Filter our list of testdir contents based on several |
4942 | + criteria. This looks for user-specified test-cases |
4943 | + and applies the do-test and skip-test filters |
4944 | + |
4945 | + Returns the list of tests that we want to execute |
4946 | + for further processing |
4947 | + |
4948 | + """ |
4949 | + |
4950 | + # We want only .test files |
4951 | + # Possible TODO: allow alternate test extensions |
4952 | + testlist = [test_file for test_file in testlist if test_file.endswith('.test')] |
4953 | + |
4954 | + # Search for specific test names |
4955 | + if self.desired_tests: # We have specific, named tests we want from the suite(s) |
4956 | + tests_to_use = [] |
4957 | + for test in self.desired_tests: |
4958 | + if test.endswith('.test'): |
4959 | + pass |
4960 | + else: |
4961 | + test = test+'.test' |
4962 | + if test in testlist: |
4963 | + tests_to_use.append(test) |
4964 | + testlist = tests_to_use |
4965 | + |
4966 | + # TODO: Allow for regex? |
4967 | + # Apply do-test filter |
4968 | + if self.dotest: |
4969 | + testlist = [test_file for test_file in testlist if test_file.startswith(self.dotest)] |
4970 | + # Apply skip-test filter |
4971 | + if self.skiptest: |
4972 | + testlist = [test_file for test_file in testlist if not test_file.startswith(self.skiptest)] |
4973 | + return testlist |
4974 | + |
4975 | + def find_result_path(self, result_dir, result_file_name): |
4976 | + """ This is copied from test-run.pl dtr_cases.pl |
4977 | + If we have an engine option passed in and the |
4978 | + path resultdir/engine/testname.result exists, that is |
4979 | + our .result file |
4980 | + |
4981 | + Need to check if we really need this - maybe PBXT? |
4982 | + |
4983 | + """ |
4984 | + result_path = os.path.join(result_dir,result_file_name) |
4985 | + if self.default_engine: |
4986 | + candidate_path = os.path.join(result_dir, self.default_engine, |
4987 | + result_file_name) |
4988 | + if os.path.exists(candidate_path): |
4989 | + result_path = candidate_path |
4990 | + return result_path |
4991 | + |
4992 | + def check_if_disabled(self, disabled_tests, test_name): |
4993 | + """ Scan the list of disabled tests if it exists to see |
4994 | + if the test is disabled. |
4995 | + |
4996 | + """ |
4997 | + |
4998 | + if disabled_tests: |
4999 | + if test_name in disabled_tests: |
5000 | + self.system_manager.logging.debug("%s says - I'm disabled" %(test_name)) |
Sigh, kewpie again. Thanks to wonderful the idea of merging kewpie to every individual project, we now have a bunch of sysbench-related code, randgen-related code, xtrabackup-related code in plugin/ percona- pam-for- mysql/test.
All of that is because of 2 rudementary tests pam_negative_ test.py and pam_basic_test.py. There's absolutely no reason to base them on kewpie. Apparently there was also an attempt to use the XtraBackup test suite, because there's also plugin/ percona- pam-for- mysql/test/ bootstrap. sh which is a verbatim copy from the XtraBackup tree and is unused in PAM plugin tests.
There's also the following WTF thing:
=== added directory 'Percona- Server/ plugin/ percona- pam-for- mysql/test/ dbqp/qp_ data' Server/ plugin/ percona- pam-for- mysql/test/ dbqp/qp_ data/uuid' Server/ plugin/ percona- pam-for- mysql/test/ dbqp/qp_ data/uuid 1970-01-01 00:00:00 +0000 Server/ plugin/ percona- pam-for- mysql/test/ dbqp/qp_ data/uuid 2012-02-22 21:56:10 +0000 8707-4589- 9c7a-fc598c0e2f 6f
=== added file 'Percona-
--- Percona-
+++ Percona-
@@ -0,0 +1 @@
+e5f64ede-
\ No newline at end of file
=== added symlink 'Percona- Server/ plugin/ percona- pam-for- mysql/test/ dbqp/workdir' shm/qp_ workdir_ root_e5f64ede- 8707-4589- 9c7a-fc598c0e2f 6f'
=== target is u'/dev/
This has to be fixed 'upstream' before merging this into the server tree.