The MySQL documentation section has always had this Topic Guides page containing links to the docs for the various MySQL Connectors -- the official database drivers for various languages and programming technologies. That is the most convenient way to get the information for each Connector in PDF form, rather than downloading the entire Ref Man PDF. For HTML, it was more of a shortcut, because
I had a good and lively audience at my presentation today. I was happy to give them a sneek preview of the Mk.III implementation of OQGRAPH.
Oh yeah! I guess I'm announcing the availability of the source code of the MkIII implementation.
Links are in my slides... http://goo.gl/UrybZ
Btw, building the storage engine requires Boost libraries and libJudy installed. It's currently in a MariaDB
You can store things for later! drizzle> select
libtcc("#include <string.h>\n#include <stdlib.h>\nint
foo(char* s) { char *a= malloc(1000); return
snprintf(s, 100, \"%p\", a); }") as RESULT;
+-----------+ | RESULT | +-----------+ | 0x199c610 | +-----------+ 1 row in set (0 sec)
drizzle> select libtcc("#include
<string.h>\n#include <stdlib.h>\nint foo(char* s) {
char *a= 0x199c610; strcpy(a, \"Hello World!\");
strcpy(s,\"done\"); return strlen(s); }") as result;
+--------+ | result | +--------+ | done | +--------+ 1 row in set (0.01 sec)
drizzle> select libtcc("#include
<string.h>\n#include <stdlib.h>\nint foo(char* s) {
char *a= 0x199c610; strcpy(s, a); return
strlen(s); }") as result;
+--------------+ | result | +--------------+ | Hello World! | +--------------+ 1 …[Read more]
So, just in case that wasn’t evil enough for you… perhaps you have something you want to know the MD5 checksum of. So, you could just do this:
drizzle> select md5('Hello World!'); +----------------------------------+ | md5('Hello World!') | +----------------------------------+ | ed076287532e86365e841e92bfc50d8c | +----------------------------------+ 1 row in set (0 sec)
But that is soooo boring.
Since we have the SSL libs already loaded into Drizzle, and using my very evil libtcc plugin… we could just implement it in C. We can even use malloc!
drizzle> SELECT LIBTCC("#include …
Previously, in “Thoughts on Thoughts on Drizzle” I theorized that one of the major reasons why we did not see lots of people jumping at stored procedures in MySQL was that it wasn’t in their native language (for lack of a better term). We’ve seen External Language Stored Procedures for MySQL that let you write stored procedures in some other languages…. but I felt something was missing.
Firstly, I wanted a language I was really familiar with and comfortable writing complex things in.
Secondly, it should be compiled so that it runs as fast as possible.
Thirdly, it shouldn’t just be linking to a pre-compiled library (drizzle function plugins do that …
[Read more]It has been more than a year since my self-imposed hiatus from serious MySQL development started and I think it is about time that I get back into the saddle. I have a handful of working prototypes but I should get the code out there, back into the community.I learned a bunch of stuff during the past year at Google but in the end, working on JavaScript, HTML/CSS and Google proprietary languages
The other day I found a nice surprise on my inbox. Jay Pipes asked me if I'd
like to try fixing a small bug on Drizzle. It looked pretty simple, and
the bug report included a big part of the fix. I accepted without
a doubt.
I decided to first change trans_prealloc_size from uint32_t to
uint64_t. That was done on drizzled/session.h. Then, I went to
drizzle/set_var.cc and changed
sys_trans_prealloc_size from …
Last weekend, I finally got some time to look around Drizzle. I had
already compiled it on my laptop, but hadn't really looked at the
code.Then, I thought that looking over some of the
blueprints on Launchpad, would be a good way to
get familiar with the code base. After a quick search, I found
move function/time/ functions into
plugin(s)
This blueprint is basically to create UDF plug-ins for the
different time related functions. There was no priority assigned
and it was on the low hanging fruit milestone. Which was
perfect for …
- It’s easy to screw up thread safety.
If you’re trying to format something for output (e.g. leading zeros, only 1 decimal place or whatever… you know, format specifiers in printf) you are setting a property on the stream, not on what you’re converting. So if you have a thread running that sets a format, adds something to the stream, and then unsets the format, you cannot have another thread able to come in and do something to that stream. Look out for thread unsafe cout code. - You cannot use streams for any text that may need to be
translated.
gettext is what everybody uses. You cannot get a page into the manual before it tells you that translators may want to change the order of what you’re printing. This goes directly against stringstream. - You need …
I was randomly browsing for some stuff and I stumbled across this post on binary literals. It proposed the following as an option for C++ which the article admits as being inefficient:unsigned long const mask = std::bitset<6>(std::string("111100")).to_ulong();I was thinking that C++ templates must be able to offer something more efficient...template <int N>struct Binary{ enum { value = Binary