Merge lp:~linuxjedi/drizzle/drizzle-global-buffer-limits into lp:drizzle/7.0

Proposed by Andrew Hutchings
Status: Merged
Approved by: Lee Bieber
Approved revision: 1823
Merged at revision: 1907
Proposed branch: lp:~linuxjedi/drizzle/drizzle-global-buffer-limits
Merge into: lp:drizzle/7.0
Diff against target: 855 lines (+442/-12)
28 files modified
client/errname.cc (+4/-1)
docs/options.rst (+21/-1)
drizzled/drizzled.cc (+70/-0)
drizzled/drizzled.h (+7/-1)
drizzled/enum.h (+5/-1)
drizzled/error.cc (+4/-0)
drizzled/filesort.cc (+17/-1)
drizzled/global_buffer.h (+69/-0)
drizzled/include.am (+1/-0)
drizzled/internal/mf_iocache.cc (+15/-0)
drizzled/join_cache.cc (+9/-0)
drizzled/records.cc (+8/-0)
drizzled/sql_select.cc (+5/-0)
tests/include/setup-global-constraints.inc (+32/-0)
tests/r/global_read_constraints.result (+32/-0)
tests/r/global_read_rnd_constraints.result (+1/-0)
tests/r/global_sort_join_constraints.result (+30/-0)
tests/t/global_read_constraints-master.opt (+1/-0)
tests/t/global_read_constraints.test (+9/-0)
tests/t/global_read_rnd_constraints-master.opt (+1/-0)
tests/t/global_read_rnd_constraints.test (+19/-0)
tests/t/global_sort_join_constraints-master.opt (+1/-0)
tests/t/global_sort_join_constraints.test (+13/-0)
unittests/atomics_test.cc (+2/-2)
unittests/global_buffer_test.cc (+60/-0)
unittests/include.am (+1/-0)
unittests/pthread_atomics_test.cc (+2/-2)
unittests/utf8_test.cc (+3/-3)
To merge this branch: bzr merge lp:~linuxjedi/drizzle/drizzle-global-buffer-limits
Reviewer Review Type Date Requested Status
Brian Aker Needs Fixing
Review via email: mp+39793@code.launchpad.net

Description of the change

Adds global buffer constraints (see blueprint)
Also fixes a GCC 4.5 bug in some unittests and a minor docs change

To post a comment you must log in.
Revision history for this message
Brian Aker (brianaker) wrote :
review: Needs Fixing
Revision history for this message
Andrew Hutchings (linuxjedi) wrote :

Doh! Silly mistake which broke 32bit, fixed now

Revision history for this message
Andrew Hutchings (linuxjedi) wrote :
Revision history for this message
Andrew Hutchings (linuxjedi) wrote :

bug#670496 is a show stopper for the test cases

Revision history for this message
Andrew Hutchings (linuxjedi) wrote :

OK, test cases should now work

Revision history for this message
Lee Bieber (kalebral-deactivatedaccount) wrote :

Tests are still failing on OSX, Centos, FreedBSD and OpenSUSE

Revision history for this message
Andrew Hutchings (linuxjedi) wrote :

OK, fixed a problem found with join buffer constraint accounting.
Had to disable 2 tests as drizzleslap now gives unpredictable results if a query errors (which is the condition we are trying to test here).

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'client/errname.cc'
2--- client/errname.cc 2010-09-08 22:31:17 +0000
3+++ client/errname.cc 2010-11-05 13:28:56 +0000
4@@ -735,7 +735,10 @@
5 { "ER_UNKNOWN_SCHEMA_OPTION", 1699},
6 { "ER_EVENT_OBSERVER_PLUGIN", 1700},
7 { "ER_CORRUPT_SCHEMA_DEFINITION", 1701},
8- { "ER_UNUSED1702", 1702},
9+ { "ER_OUT_OF_GLOBAL_SORTMEMORY", 1702},
10+ { "ER_OUT_OF_GLOBAL_JOINMEMORY", 1703},
11+ { "ER_OUT_OF_GLOBAL_READRNDMEMORY", 1704},
12+ { "ER_OUT_OF_GLOBAL_READMEMORY", 1705},
13 { 0, 0 }
14 };
15
16
17=== modified file 'docs/options.rst'
18--- docs/options.rst 2010-09-30 16:54:59 +0000
19+++ docs/options.rst 2010-11-05 13:28:56 +0000
20@@ -178,8 +178,13 @@
21
22 The size of the buffer that is used for full joins.
23
24+.. option:: --join-buffer-constraint arg (=0)
25+
26+ A global constraint for join-buffer-size for all clients, cannot be set lower
27+ than --join-buffer-size. Setting to 0 means unlimited.
28+
29 .. Why is this a core arg?
30-.. option:: --max-allowed-packet arg (=1M)
31+.. option:: --max-allowed-packet arg (=64M)
32
33 Max packetlength to send/receive from to server.
34
35@@ -259,12 +264,22 @@
36 each table it scans. If you do many sequential scans, you may want to
37 increase this value.
38
39+.. option:: --read-buffer-constraint arg (=0)
40+
41+ A global constraint for read-buffer-size for all clients, cannot be set lower
42+ than --read-buffer-size. Setting to 0 means unlimited.
43+
44 .. option:: --read-rnd-buffer-size arg (=262144)
45
46 When reading rows in sorted order after a sort, the rows are read through
47 this buffer to avoid a disk seeks. If not set, then it's set to the value of
48 record_buffer.
49
50+.. option:: --read-rnd-constraint arg (=0)
51+
52+ A global constraint for read-rnd-buffer-size for all clients, cannot be set
53+ lower than --read-rnd-buffer-size. Setting to 0 means unlimited.
54+
55 .. option:: --scheduler arg (=multi-thread)
56
57 Select scheduler to be used.
58@@ -273,6 +288,11 @@
59
60 Each thread that needs to do a sort allocates a buffer of this size.
61
62+.. option:: --sort-buffer-constraint arg (=0)
63+
64+ A global constraint for sort-buffer-size for all clients, cannot be set lower
65+ than --sort-buffer-size. Setting to 0 means unlimited.
66+
67 .. option:: --table-definition-cache arg (=128)
68
69 The number of cached table definitions.
70
71=== modified file 'drizzled/drizzled.cc'
72--- drizzled/drizzled.cc 2010-10-28 05:22:47 +0000
73+++ drizzled/drizzled.cc 2010-11-05 13:28:56 +0000
74@@ -66,6 +66,7 @@
75 #include "drizzled/drizzled.h"
76 #include "drizzled/module/registry.h"
77 #include "drizzled/module/load_list.h"
78+#include "drizzled/global_buffer.h"
79
80 #include "drizzled/plugin/event_observer.h"
81
82@@ -352,6 +353,11 @@
83
84 atomic<uint32_t> connection_count;
85
86+global_buffer_constraint<uint64_t> global_sort_buffer(0);
87+global_buffer_constraint<uint64_t> global_join_buffer(0);
88+global_buffer_constraint<uint64_t> global_read_rnd_buffer(0);
89+global_buffer_constraint<uint64_t> global_read_buffer(0);
90+
91 /**
92 Refresh value. We use to test this to find out if a refresh even has happened recently.
93 */
94@@ -1300,6 +1306,9 @@
95 N_("The maximum length of the result of function group_concat."))
96 ("join-buffer-size", po::value<uint64_t>(&global_system_variables.join_buff_size)->default_value(128*1024L)->notifier(&check_limits_join_buffer_size),
97 N_("The size of the buffer that is used for full joins."))
98+ ("join-heap-threshold",
99+ po::value<uint64_t>()->default_value(0),
100+ N_("A global cap on the amount of memory that can be allocated by session join buffers (0 means unlimited)"))
101 ("max-allowed-packet", po::value<uint32_t>(&global_system_variables.max_allowed_packet)->default_value(64*1024*1024L)->notifier(&check_limits_map),
102 N_("Max packetlength to send/receive from to server."))
103 ("max-connect-errors", po::value<uint64_t>(&max_connect_errors)->default_value(MAX_CONNECT_ERRORS)->notifier(&check_limits_mce),
104@@ -1353,16 +1362,25 @@
105 N_("Each thread that does a sequential scan allocates a buffer of this "
106 "size for each table it scans. If you do many sequential scans, you may "
107 "want to increase this value."))
108+ ("read-buffer-threshold",
109+ po::value<uint64_t>()->default_value(0),
110+ N_("A global cap on the size of read-buffer-size (0 means unlimited)"))
111 ("read-rnd-buffer-size",
112 po::value<uint32_t>(&global_system_variables.read_rnd_buff_size)->default_value(256*1024L)->notifier(&check_limits_read_rnd_buffer_size),
113 N_("When reading rows in sorted order after a sort, the rows are read "
114 "through this buffer to avoid a disk seeks. If not set, then it's set "
115 "to the value of record_buffer."))
116+ ("read-rnd-threshold",
117+ po::value<uint64_t>()->default_value(0),
118+ N_("A global cap on the size of read-rnd-buffer-size (0 means unlimited)"))
119 ("scheduler", po::value<string>(),
120 N_("Select scheduler to be used (by default multi-thread)."))
121 ("sort-buffer-size",
122 po::value<size_t>(&global_system_variables.sortbuff_size)->default_value(MAX_SORT_MEMORY)->notifier(&check_limits_sort_buffer_size),
123 N_("Each thread that needs to do a sort allocates a buffer of this size."))
124+ ("sort-heap-threshold",
125+ po::value<uint64_t>()->default_value(0),
126+ N_("A global cap on the amount of memory that can be allocated by session sort buffers (0 means unlimited)"))
127 ("table-definition-cache", po::value<size_t>(&table_def_size)->default_value(128)->notifier(&check_limits_tdc),
128 N_("The number of cached table definitions."))
129 ("table-open-cache", po::value<uint64_t>(&table_cache_size)->default_value(TABLE_OPEN_CACHE_DEFAULT)->notifier(&check_limits_toc),
130@@ -2256,6 +2274,58 @@
131 exit(0);
132 }
133
134+ if (vm.count("sort-heap-threshold"))
135+ {
136+ if ((vm["sort-heap-threshold"].as<uint64_t>() > 0) and
137+ (vm["sort-heap-threshold"].as<uint64_t>() <
138+ global_system_variables.sortbuff_size))
139+ {
140+ cout << N_("Error: sort-heap-threshold cannot be less than sort-buffer-size") << endl;
141+ exit(-1);
142+ }
143+
144+ global_sort_buffer.setMaxSize(vm["sort-heap-threshold"].as<uint64_t>());
145+ }
146+
147+ if (vm.count("join-heap-threshold"))
148+ {
149+ if ((vm["join-heap-threshold"].as<uint64_t>() > 0) and
150+ (vm["join-heap-threshold"].as<uint64_t>() <
151+ global_system_variables.join_buff_size))
152+ {
153+ cout << N_("Error: join-heap-threshold cannot be less than join-buffer-size") << endl;
154+ exit(-1);
155+ }
156+
157+ global_join_buffer.setMaxSize(vm["join-heap-threshold"].as<uint64_t>());
158+ }
159+
160+ if (vm.count("read-rnd-threshold"))
161+ {
162+ if ((vm["read-rnd-threshold"].as<uint64_t>() > 0) and
163+ (vm["read-rnd-threshold"].as<uint64_t>() <
164+ global_system_variables.read_rnd_buff_size))
165+ {
166+ cout << N_("Error: read-rnd-threshold cannot be less than read-rnd-buffer-size") << endl;
167+ exit(-1);
168+ }
169+
170+ global_read_rnd_buffer.setMaxSize(vm["read-rnd-threshold"].as<uint64_t>());
171+ }
172+
173+ if (vm.count("read-buffer-threshold"))
174+ {
175+ if ((vm["read-buffer-threshold"].as<uint64_t>() > 0) and
176+ (vm["read-buffer-threshold"].as<uint64_t>() <
177+ global_system_variables.read_buff_size))
178+ {
179+ cout << N_("Error: read-buffer-threshold cannot be less than read-buffer-size") << endl;
180+ exit(-1);
181+ }
182+
183+ global_read_buffer.setMaxSize(vm["read-buffer-threshold"].as<uint64_t>());
184+ }
185+
186 if (vm.count("exit-info"))
187 {
188 if (vm["exit-info"].as<long>())
189
190=== modified file 'drizzled/drizzled.h'
191--- drizzled/drizzled.h 2010-09-27 07:06:04 +0000
192+++ drizzled/drizzled.h 2010-11-05 13:28:56 +0000
193@@ -25,7 +25,8 @@
194 #include <boost/program_options.hpp>
195
196 #include "drizzled/atomics.h"
197-
198+#include "drizzled/global_buffer.h"
199+#include "drizzled/definitions.h"
200 struct passwd;
201
202 namespace drizzled
203@@ -47,6 +48,11 @@
204 extern passwd *user_info;
205 extern char *drizzled_user;
206
207+extern global_buffer_constraint<uint64_t> global_sort_buffer;
208+extern global_buffer_constraint<uint64_t> global_join_buffer;
209+extern global_buffer_constraint<uint64_t> global_read_rnd_buffer;
210+extern global_buffer_constraint<uint64_t> global_read_buffer;
211+
212 extern const char * const DRIZZLE_CONFIG_NAME;
213
214 boost::program_options::variables_map &getVariablesMap();
215
216=== modified file 'drizzled/enum.h'
217--- drizzled/enum.h 2010-09-08 22:31:17 +0000
218+++ drizzled/enum.h 2010-11-05 13:28:56 +0000
219@@ -1044,7 +1044,11 @@
220 ER_UNKNOWN_SCHEMA_OPTION,
221 ER_EVENT_OBSERVER_PLUGIN,
222 ER_CORRUPT_SCHEMA_DEFINITION,
223- ER_ERROR_LAST= ER_CORRUPT_SCHEMA_DEFINITION
224+ ER_OUT_OF_GLOBAL_SORTMEMORY,
225+ ER_OUT_OF_GLOBAL_JOINMEMORY,
226+ ER_OUT_OF_GLOBAL_READRNDMEMORY,
227+ ER_OUT_OF_GLOBAL_READMEMORY,
228+ ER_ERROR_LAST= ER_OUT_OF_GLOBAL_READMEMORY
229 };
230
231 enum drizzle_exit_codes {
232
233=== modified file 'drizzled/error.cc'
234--- drizzled/error.cc 2010-10-14 18:58:48 +0000
235+++ drizzled/error.cc 2010-11-05 13:28:56 +0000
236@@ -235,6 +235,10 @@
237 add(ER_OPEN_AS_READONLY, N_("Table '%-.192s' is read only"));
238 add(ER_OUTOFMEMORY, N_("Out of memory; restart server and try again (needed %lu bytes)"));
239 add(ER_OUT_OF_SORTMEMORY, N_("Out of sort memory; increase server sort buffer size"));
240+ add(ER_OUT_OF_GLOBAL_SORTMEMORY, N_("Global sort memory constraint hit; increase sort-heap-threshold"));
241+ add(ER_OUT_OF_GLOBAL_JOINMEMORY, N_("Global join memory constraint hit; increase join-heap-threshold"));
242+ add(ER_OUT_OF_GLOBAL_READRNDMEMORY, N_("Global read_rnd memory constraint hit; increase read-rnd-heap-threshold"));
243+ add(ER_OUT_OF_GLOBAL_READMEMORY, N_("Global read memory constraint hit; increase read-buffer-threshold"));
244 add(ER_UNEXPECTED_EOF, N_("Unexpected EOF found when reading file '%-.192s' (errno: %d)"));
245 add(ER_CON_COUNT_ERROR, N_("Too many connections"));
246 add(ER_OUT_OF_RESOURCES, N_("Out of memory; check if drizzled or some other process uses all available memory; if not, you may have to use 'ulimit' to allow drizzled to use more memory or you can add more swap space"));
247
248=== modified file 'drizzled/filesort.cc'
249--- drizzled/filesort.cc 2010-10-30 01:19:00 +0000
250+++ drizzled/filesort.cc 2010-11-05 13:28:56 +0000
251@@ -29,6 +29,7 @@
252 #include <queue>
253 #include <algorithm>
254
255+#include "drizzled/drizzled.h"
256 #include "drizzled/sql_sort.h"
257 #include "drizzled/error.h"
258 #include "drizzled/probes.h"
259@@ -41,6 +42,8 @@
260 #include "drizzled/internal/my_sys.h"
261 #include "plugin/myisam/myisam.h"
262 #include "drizzled/plugin/transactional_storage_engine.h"
263+#include "drizzled/atomics.h"
264+#include "drizzled/global_buffer.h"
265
266 using namespace std;
267
268@@ -136,8 +139,9 @@
269 bool sort_positions, ha_rows *examined_rows)
270 {
271 int error;
272- uint32_t memavl, min_sort_memory;
273+ uint32_t memavl= 0, min_sort_memory;
274 uint32_t maxbuffer;
275+ size_t allocated_sort_memory= 0;
276 buffpek *buffpek_inst;
277 ha_rows records= HA_POS_ERROR;
278 unsigned char **sort_keys= 0;
279@@ -247,10 +251,20 @@
280 uint32_t old_memavl;
281 uint32_t keys= memavl/(param.rec_length+sizeof(char*));
282 param.keys= (uint32_t) min(records+1, (ha_rows)keys);
283+
284+ allocated_sort_memory= param.keys * param.rec_length;
285+ if (not global_sort_buffer.add(allocated_sort_memory))
286+ {
287+ my_error(ER_OUT_OF_GLOBAL_SORTMEMORY, MYF(ME_ERROR+ME_WAITTANG));
288+ goto err;
289+ }
290+
291 if ((table_sort.sort_keys=
292 (unsigned char **) make_char_array((char **) table_sort.sort_keys,
293 param.keys, param.rec_length)))
294 break;
295+
296+ global_sort_buffer.sub(allocated_sort_memory);
297 old_memavl= memavl;
298 if ((memavl= memavl/4*3) < min_sort_memory && old_memavl > min_sort_memory)
299 memavl= min_sort_memory;
300@@ -261,6 +275,7 @@
301 my_error(ER_OUT_OF_SORTMEMORY,MYF(ME_ERROR+ME_WAITTANG));
302 goto err;
303 }
304+
305 if (open_cached_file(&buffpek_pointers,drizzle_tmpdir.c_str(),TEMP_PREFIX,
306 DISK_BUFFER_SIZE, MYF(MY_WME)))
307 goto err;
308@@ -357,6 +372,7 @@
309 session->status_var.filesort_rows+= (uint32_t) records;
310 }
311 *examined_rows= param.examined_rows;
312+ global_sort_buffer.sub(allocated_sort_memory);
313 memcpy(&table->sort, &table_sort, sizeof(filesort_info));
314 DRIZZLE_FILESORT_DONE(error, records);
315 return (error ? HA_POS_ERROR : records);
316
317=== added file 'drizzled/global_buffer.h'
318--- drizzled/global_buffer.h 1970-01-01 00:00:00 +0000
319+++ drizzled/global_buffer.h 2010-11-05 13:28:56 +0000
320@@ -0,0 +1,69 @@
321+/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
322+ * vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
323+ *
324+ * Copyright (C) 2010 Andrew Hutchings
325+ *
326+ * This program is free software; you can redistribute it and/or modify
327+ * it under the terms of the GNU General Public License as published by
328+ * the Free Software Foundation; version 2 of the License.
329+ *
330+ * This program is distributed in the hope that it will be useful,
331+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
332+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
333+ * GNU General Public License for more details.
334+ *
335+ * You should have received a copy of the GNU General Public License
336+ * along with this program; if not, write to the Free Software
337+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
338+ */
339+
340+#ifndef DRIZZLED_GLOBAL_BUFFER_H
341+#define DRIZZLED_GLOBAL_BUFFER_H
342+
343+#include <drizzled/atomics.h>
344+
345+namespace drizzled
346+{
347+template <class T>
348+class global_buffer_constraint
349+{
350+public:
351+ global_buffer_constraint(T max)
352+ {
353+ setMaxSize(max);
354+ }
355+
356+ T getMaxSize() const { return max_size; }
357+ void setMaxSize(T new_size)
358+ {
359+ if (new_size == 0) new_size = std::numeric_limits<T>::max();
360+ max_size= new_size;
361+ }
362+
363+ bool add(T addition)
364+ {
365+ if (current_size.add_and_fetch(addition) > max_size)
366+ {
367+ current_size.add_and_fetch(T(0) - addition);
368+ return false;
369+ }
370+ return true;
371+ }
372+
373+ bool sub(T subtract)
374+ {
375+ if (current_size < subtract)
376+ return false;
377+ else
378+ current_size.add_and_fetch(T(0) - subtract);
379+
380+ return true;
381+ }
382+
383+private:
384+ atomic<T> current_size;
385+ T max_size;
386+};
387+
388+}
389+#endif /* DRIZZLED_GLOBAL_BUFFER_H */
390
391=== modified file 'drizzled/include.am'
392--- drizzled/include.am 2010-10-28 05:22:47 +0000
393+++ drizzled/include.am 2010-11-05 13:28:56 +0000
394@@ -190,6 +190,7 @@
395 drizzled/generator/session.h \
396 drizzled/generator/table.h \
397 drizzled/gettext.h \
398+ drizzled/global_buffer.h \
399 drizzled/global_charset_info.h \
400 drizzled/ha_statistics.h \
401 drizzled/handler_structs.h \
402
403=== modified file 'drizzled/internal/mf_iocache.cc'
404--- drizzled/internal/mf_iocache.cc 2010-10-10 08:28:30 +0000
405+++ drizzled/internal/mf_iocache.cc 2010-11-05 13:28:56 +0000
406@@ -51,6 +51,7 @@
407
408 #include "drizzled/internal/my_sys.h"
409 #include "drizzled/internal/m_string.h"
410+#include "drizzled/drizzled.h"
411 #ifdef HAVE_AIOWAIT
412 #include "drizzled/error.h"
413 #include "drizzled/internal/aio_result.h"
414@@ -247,6 +248,12 @@
415 if (cachesize < min_cache)
416 cachesize = min_cache;
417 buffer_block= cachesize;
418+ if ((type == READ_CACHE) and (not global_read_buffer.add(buffer_block)))
419+ {
420+ my_error(ER_OUT_OF_GLOBAL_READMEMORY, MYF(ME_ERROR+ME_WAITTANG));
421+ return 2;
422+ }
423+
424 if ((info->buffer=
425 (unsigned char*) malloc(buffer_block)) != 0)
426 {
427@@ -255,8 +262,14 @@
428 break; /* Enough memory found */
429 }
430 if (cachesize == min_cache)
431+ {
432+ if (type == READ_CACHE)
433+ global_read_buffer.sub(buffer_block);
434 return(2); /* Can't alloc cache */
435+ }
436 /* Try with less memory */
437+ if (type == READ_CACHE)
438+ global_read_buffer.sub(buffer_block);
439 cachesize= (cachesize*3/4 & ~(min_cache-1));
440 }
441 }
442@@ -928,6 +941,8 @@
443 }
444 if (info->alloced_buffer)
445 {
446+ if (info->type == READ_CACHE)
447+ global_read_buffer.sub(info->buffer_length);
448 info->alloced_buffer=0;
449 if (info->file != -1) /* File doesn't exist */
450 error= my_b_flush_io_cache(info,1);
451
452=== modified file 'drizzled/join_cache.cc'
453--- drizzled/join_cache.cc 2010-07-30 20:31:19 +0000
454+++ drizzled/join_cache.cc 2010-11-05 13:28:56 +0000
455@@ -30,6 +30,8 @@
456 #include "config.h"
457 #include "drizzled/sql_select.h" /* include join.h */
458 #include "drizzled/field/blob.h"
459+#include "drizzled/drizzled.h"
460+#include "drizzled/internal/my_sys.h"
461
462 #include <algorithm>
463
464@@ -87,6 +89,8 @@
465 if (!(cache->field=(CacheField*)
466 memory::sql_alloc(sizeof(CacheField)*(cache->fields+table_count*2)+(blobs+1)* sizeof(CacheField*))))
467 {
468+ size= cache->end - cache->buff;
469+ global_join_buffer.sub(size);
470 free((unsigned char*) cache->buff);
471 cache->buff=0;
472 return(1);
473@@ -162,6 +166,11 @@
474 cache->blobs= blobs;
475 *blob_ptr= NULL; /* End sequentel */
476 size= max((size_t) session->variables.join_buff_size, (size_t)cache->length);
477+ if (not global_join_buffer.add(size))
478+ {
479+ my_error(ER_OUT_OF_GLOBAL_JOINMEMORY, MYF(ME_ERROR+ME_WAITTANG));
480+ return 1;
481+ }
482 if (!(cache->buff= (unsigned char*) malloc(size)))
483 return 1;
484 cache->end= cache->buff+size;
485
486=== modified file 'drizzled/records.cc'
487--- drizzled/records.cc 2010-10-20 20:25:52 +0000
488+++ drizzled/records.cc 2010-11-05 13:28:56 +0000
489@@ -27,6 +27,7 @@
490 #include "drizzled/optimizer/range.h"
491 #include "drizzled/internal/my_sys.h"
492 #include "drizzled/internal/iocache.h"
493+#include "drizzled/drizzled.h"
494
495 namespace drizzled
496 {
497@@ -172,6 +173,7 @@
498 { /* free cache if used */
499 if (cache)
500 {
501+ global_read_rnd_buffer.sub(session->variables.read_rnd_buff_size);
502 free((char*) cache);
503 cache= NULL;
504 }
505@@ -402,6 +404,12 @@
506 local_rec_cache_size= cache_records * reclength;
507 rec_cache_size= cache_records * ref_length;
508
509+ if (not global_read_rnd_buffer.add(session->variables.read_rnd_buff_size))
510+ {
511+ my_error(ER_OUT_OF_GLOBAL_READRNDMEMORY, MYF(ME_ERROR+ME_WAITTANG));
512+ return false;
513+ }
514+
515 // We have to allocate one more byte to use uint3korr (see comments for it)
516 if (cache_records <= 2 ||
517 !(cache=(unsigned char*) malloc(local_rec_cache_size + cache_records * struct_length + 1)))
518
519=== modified file 'drizzled/sql_select.cc'
520--- drizzled/sql_select.cc 2010-11-02 17:38:03 +0000
521+++ drizzled/sql_select.cc 2010-11-05 13:28:56 +0000
522@@ -51,6 +51,7 @@
523 #include "drizzled/index_hint.h"
524 #include "drizzled/records.h"
525 #include "drizzled/internal/iocache.h"
526+#include "drizzled/drizzled.h"
527
528 #include "drizzled/sql_union.h"
529 #include "drizzled/optimizer/key_field.h"
530@@ -1216,7 +1217,11 @@
531 delete quick;
532 quick= 0;
533 if (cache.buff)
534+ {
535+ size_t size= cache.end - cache.buff;
536+ global_join_buffer.sub(size);
537 free(cache.buff);
538+ }
539 cache.buff= 0;
540 limit= 0;
541 if (table)
542
543=== added file 'tests/include/setup-global-constraints.inc'
544--- tests/include/setup-global-constraints.inc 1970-01-01 00:00:00 +0000
545+++ tests/include/setup-global-constraints.inc 2010-11-05 13:28:56 +0000
546@@ -0,0 +1,32 @@
547+--disable_warnings
548+DROP TABLE IF EXISTS t1;
549+DROP TABLE IF EXISTS t2;
550+--enable_warnings
551+
552+CREATE TABLE `t1` (
553+ `charcol1` VARCHAR(36) COLLATE utf8_general_ci DEFAULT NULL,
554+ `charcol2` VARCHAR(36) COLLATE utf8_general_ci DEFAULT NULL
555+) ENGINE=InnoDB COLLATE = utf8_general_ci;
556+
557+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
558+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
559+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
560+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
561+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
562+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
563+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
564+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
565+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
566+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
567+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
568+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
569+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
570+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
571+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
572+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
573+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
574+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
575+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
576+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
577+
578+CREATE TABLE t2 SELECT * FROM t1;
579
580=== added file 'tests/r/global_read_constraints.result'
581--- tests/r/global_read_constraints.result 1970-01-01 00:00:00 +0000
582+++ tests/r/global_read_constraints.result 2010-11-05 13:28:56 +0000
583@@ -0,0 +1,32 @@
584+USE test;
585+DROP TABLE IF EXISTS t1;
586+DROP TABLE IF EXISTS t2;
587+CREATE TABLE `t1` (
588+`charcol1` VARCHAR(36) COLLATE utf8_general_ci DEFAULT NULL,
589+`charcol2` VARCHAR(36) COLLATE utf8_general_ci DEFAULT NULL
590+) ENGINE=InnoDB COLLATE = utf8_general_ci;
591+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
592+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
593+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
594+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
595+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
596+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
597+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
598+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
599+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
600+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
601+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
602+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
603+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
604+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
605+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
606+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
607+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
608+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
609+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
610+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
611+CREATE TABLE t2 SELECT * FROM t1;
612+create temporary table t3 (a varchar(255), b varchar(255)) engine=myisam;
613+insert into t3 select * from t1;
614+select SQL_BIG_RESULT * from t3, (select * from t1) as t4;
615+ERROR HY000: Global read memory constraint hit; increase read-buffer-threshold
616
617=== added file 'tests/r/global_read_rnd_constraints.result'
618--- tests/r/global_read_rnd_constraints.result 1970-01-01 00:00:00 +0000
619+++ tests/r/global_read_rnd_constraints.result 2010-11-05 13:28:56 +0000
620@@ -0,0 +1,1 @@
621+USE test;
622
623=== added file 'tests/r/global_sort_join_constraints.result'
624--- tests/r/global_sort_join_constraints.result 1970-01-01 00:00:00 +0000
625+++ tests/r/global_sort_join_constraints.result 2010-11-05 13:28:56 +0000
626@@ -0,0 +1,30 @@
627+USE test;
628+DROP TABLE IF EXISTS t1;
629+DROP TABLE IF EXISTS t2;
630+CREATE TABLE `t1` (
631+`charcol1` VARCHAR(36) COLLATE utf8_general_ci DEFAULT NULL,
632+`charcol2` VARCHAR(36) COLLATE utf8_general_ci DEFAULT NULL
633+) ENGINE=InnoDB COLLATE = utf8_general_ci;
634+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
635+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
636+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
637+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
638+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
639+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
640+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
641+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
642+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
643+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
644+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
645+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
646+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
647+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
648+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
649+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
650+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
651+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
652+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
653+INSERT INTO t1 VALUES (UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID()),(UUID(), UUID());
654+CREATE TABLE t2 SELECT * FROM t1;
655+select SQL_BIG_RESULT * from t1 join t2 on (t1.charcol1 = t2.charcol2) join t2 as t3 on (t1.charcol1 = t3.charcol2);
656+ERROR HY000: Global join memory constraint hit; increase join-heap-threshold
657
658=== added file 'tests/t/global_read_constraints-master.opt'
659--- tests/t/global_read_constraints-master.opt 1970-01-01 00:00:00 +0000
660+++ tests/t/global_read_constraints-master.opt 2010-11-05 13:28:56 +0000
661@@ -0,0 +1,1 @@
662+--read-buffer-threshold=128k
663
664=== added file 'tests/t/global_read_constraints.test'
665--- tests/t/global_read_constraints.test 1970-01-01 00:00:00 +0000
666+++ tests/t/global_read_constraints.test 2010-11-05 13:28:56 +0000
667@@ -0,0 +1,9 @@
668+# Setup table for tests
669+USE test;
670+
671+--source include/setup-global-constraints.inc
672+
673+create temporary table t3 (a varchar(255), b varchar(255)) engine=myisam;
674+insert into t3 select * from t1;
675+--error 1705
676+select SQL_BIG_RESULT * from t3, (select * from t1) as t4;
677
678=== added file 'tests/t/global_read_rnd_constraints-master.opt'
679--- tests/t/global_read_rnd_constraints-master.opt 1970-01-01 00:00:00 +0000
680+++ tests/t/global_read_rnd_constraints-master.opt 2010-11-05 13:28:56 +0000
681@@ -0,0 +1,1 @@
682+--read-rnd-threshold=262144
683
684=== added file 'tests/t/global_read_rnd_constraints.test'
685--- tests/t/global_read_rnd_constraints.test 1970-01-01 00:00:00 +0000
686+++ tests/t/global_read_rnd_constraints.test 2010-11-05 13:28:56 +0000
687@@ -0,0 +1,19 @@
688+# Test is disabled because drizzleslap error code is now different on different platforms
689+
690+# Setup table for tests
691+USE test;
692+
693+#--source include/setup-global-constraints.inc
694+
695+# We appear to need to beef up the table to use the read_rnd buffer at all
696+#alter table t1 modify charcol1 varchar(255);
697+#alter table t1 modify charcol2 varchar(255);
698+#insert into t1 select SQL_BIG_RESULT * from t1;
699+#insert into t1 select SQL_BIG_RESULT * from t1;
700+#insert into t1 select SQL_BIG_RESULT * from t1;
701+#insert into t1 select SQL_BIG_RESULT * from t1;
702+#insert into t1 select SQL_BIG_RESULT * from t1;
703+
704+# Test for read_rnd buffer constraint
705+#--error 134
706+#--exec $DRIZZLE_SLAP -q "SELECT SQL_BIG_RESULT * FROM t1 ORDER BY 1" -c100 --iterations=1 --number-of-queries=1000 --create-schema=test
707
708=== added file 'tests/t/global_sort_join_constraints-master.opt'
709--- tests/t/global_sort_join_constraints-master.opt 1970-01-01 00:00:00 +0000
710+++ tests/t/global_sort_join_constraints-master.opt 2010-11-05 13:28:56 +0000
711@@ -0,0 +1,1 @@
712+--join-heap-threshold=131072 --sort-heap-threshold=2097144
713
714=== added file 'tests/t/global_sort_join_constraints.test'
715--- tests/t/global_sort_join_constraints.test 1970-01-01 00:00:00 +0000
716+++ tests/t/global_sort_join_constraints.test 2010-11-05 13:28:56 +0000
717@@ -0,0 +1,13 @@
718+# Setup table for tests
719+USE test;
720+
721+--source include/setup-global-constraints.inc
722+
723+# Test for sort buffer constraint
724+# Test disabled, needs two parallel filesorts to trigger error. Drizzleslap's error handling currently unpredictable
725+#--error 134
726+#--exec $DRIZZLE_SLAP -q "SELECT * FROM t1 ORDER BY 1" -c100 --iterations=1 --number-of-queries=1000 --create-schema=test
727+
728+# Test for join buffer constraint
729+--error 1703
730+select SQL_BIG_RESULT * from t1 join t2 on (t1.charcol1 = t2.charcol2) join t2 as t3 on (t1.charcol1 = t3.charcol2);
731
732=== modified file 'unittests/atomics_test.cc'
733--- unittests/atomics_test.cc 2010-06-02 22:35:45 +0000
734+++ unittests/atomics_test.cc 2010-11-05 13:28:56 +0000
735@@ -78,8 +78,8 @@
736
737 u235.fetch_and_store(100);
738
739- EXPECT_EQ(false, u235.compare_and_swap(42, 200));
740- EXPECT_EQ(true, u235.compare_and_swap(200, 100));
741+ ASSERT_FALSE(u235.compare_and_swap(42, 200));
742+ ASSERT_TRUE(u235.compare_and_swap(200, 100));
743 EXPECT_EQ(200, u235);
744 }
745
746
747=== added file 'unittests/global_buffer_test.cc'
748--- unittests/global_buffer_test.cc 1970-01-01 00:00:00 +0000
749+++ unittests/global_buffer_test.cc 2010-11-05 13:28:56 +0000
750@@ -0,0 +1,60 @@
751+/* -*- mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
752+ * vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
753+ *
754+ * Copyright (C) 2010 Andrew Hutchings
755+ *
756+ * This program is free software; you can redistribute it and/or modify
757+ * it under the terms of the GNU General Public License as published by
758+ * the Free Software Foundation; either version 2 of the License, or
759+ * (at your option) any later version.
760+ *
761+ * This program is distributed in the hope that it will be useful,
762+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
763+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
764+ * GNU General Public License for more details.
765+ *
766+ * You should have received a copy of the GNU General Public License
767+ * along with this program; if not, write to the Free Software
768+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
769+ */
770+
771+#include "config.h"
772+
773+#include <gtest/gtest.h>
774+#include "drizzled/global_buffer.h"
775+
776+TEST(global_buffer, overflow)
777+{
778+ drizzled::global_buffer_constraint<uint64_t> test_buffer(1024);
779+
780+ ASSERT_TRUE(test_buffer.add(512));
781+ ASSERT_TRUE(test_buffer.add(512));
782+ ASSERT_FALSE(test_buffer.add(1));
783+}
784+
785+TEST(global_buffer, subtract)
786+{
787+ drizzled::global_buffer_constraint<uint64_t> test_buffer(1024);
788+
789+ ASSERT_TRUE(test_buffer.add(1024));
790+ ASSERT_TRUE(test_buffer.sub(512));
791+ ASSERT_TRUE(test_buffer.add(512));
792+ ASSERT_FALSE(test_buffer.add(1));
793+}
794+
795+TEST(global_buffer, underflow)
796+{
797+ drizzled::global_buffer_constraint<uint64_t> test_buffer(1024);
798+
799+ ASSERT_TRUE(test_buffer.add(10));
800+ ASSERT_FALSE(test_buffer.sub(11));
801+}
802+
803+TEST(global_buffer, change_max)
804+{
805+ drizzled::global_buffer_constraint<uint64_t> test_buffer(1024);
806+
807+ test_buffer.setMaxSize(512);
808+
809+ ASSERT_FALSE(test_buffer.add(513));
810+}
811
812=== modified file 'unittests/include.am'
813--- unittests/include.am 2010-09-14 07:47:50 +0000
814+++ unittests/include.am 2010-11-05 13:28:56 +0000
815@@ -28,6 +28,7 @@
816 unittests/date_test.cc \
817 unittests/date_time_test.cc \
818 unittests/generators.cc \
819+ unittests/global_buffer_test.cc \
820 unittests/libdrizzle_test.cc \
821 unittests/main.cc \
822 unittests/micro_timestamp_test.cc \
823
824=== modified file 'unittests/pthread_atomics_test.cc'
825--- unittests/pthread_atomics_test.cc 2010-06-02 22:35:45 +0000
826+++ unittests/pthread_atomics_test.cc 2010-11-05 13:28:56 +0000
827@@ -106,8 +106,8 @@
828
829 u235.fetch_and_store(100);
830
831- EXPECT_EQ(false, u235.compare_and_swap(42, 200));
832- EXPECT_EQ(true, u235.compare_and_swap(200, 100));
833+ ASSERT_FALSE(u235.compare_and_swap(42, 200));
834+ ASSERT_TRUE(u235.compare_and_swap(200, 100));
835 EXPECT_EQ(200, u235);
836 }
837
838
839=== modified file 'unittests/utf8_test.cc'
840--- unittests/utf8_test.cc 2010-06-03 20:42:25 +0000
841+++ unittests/utf8_test.cc 2010-11-05 13:28:56 +0000
842@@ -29,10 +29,10 @@
843
844 TEST(utf8, is_single)
845 {
846- EXPECT_EQ(true, utf8::is_single('a'));
847+ ASSERT_TRUE(utf8::is_single('a'));
848 const char *multi_byte= "รง";
849- EXPECT_EQ(false, utf8::is_single(*multi_byte));
850- EXPECT_EQ(false, utf8::is_single(*(multi_byte + 1)));
851+ ASSERT_FALSE(utf8::is_single(*multi_byte));
852+ ASSERT_FALSE(utf8::is_single(*(multi_byte + 1)));
853 }
854
855 TEST(utf8, codepoint_length)

Subscribers

People subscribed via source and target branches