Ever since I submitted the "External Language Stored Procedures" project which Eric and myself have been working on to be listed on FreshMeat, it has gained a small number of interested users and we have just started to get some feedback. Yay! Always nice to know when people are using your code. Okay, so one of the emails contained a feature request: Support for PHP stored procedures. I think I
The Thanksgiving break was a welcome change of pace... and on the idle driving up and down the Californian coastline, I had a few moments to work on the MySQL External Stored Procedures project. I think I pretty much have Perl functioning fully and a couple of minor problems were resolved.Yesterday, I completed the first draft of the all-revised-from-scratch WL#3771, now titled as the Plugable
This question seems to crop up again and again... In the words of one comment to my blog: "I've downloaded your External Language Stored Procedures package and am interested in trying out the JAVA part. Would appreciate if you could explain how use the downloaded stuff."Ok, on my download page, I have provided 2 different downloads which are automatically created from our source repository. A
One of the enhancements I added to MySQL Archiver in the recent release was listed innocently in the changelog as "Destination plugins can now rewrite the INSERT statement." Not very exciting or informative, huh? Keep reading.
Well, we did it. In between his SCRUM meeting and my compiling MySQL on Windows, Eric and I bashed out a proposal for the MySQL Users Conference 2008 and have submitted it. The content of the talk, well... It is entitled "Tour of External language stored procedures for MySQL" and we're going to talk about our little project. On Kaj's blog, he suggests that submissions should be creative,
Wouldn't it be fun to be able to embed web-service routines into
MySQL as if they are stored procedures?
CREATE FUNCTION xml_current_time() RETURNS DATETIME NO SQL
LANGUAGE XMLRPC
EXTERNAL NAME "xmlrpc://time.userland.com/RPC2;currentTime.getCurrentTime";
Perhaps not a completely useful example... but an interesting
goal to achieve. I have written up some code and pushed it to the
experimental repository. I haven't tested it yet but I may do
later today if I don't get too preoccupied catching up watching
NBC's "Heroes". Snapshots created automagically at midnight,
Pacific time.
Brian mentioned Gemini on his blog... As many
people remember, there was a stunned silence for a while when
Oracle purchased InnoBase OY only 2 years ago... Very similar to
the stunned silence about 6 years ago when the suits at NuSphere
tried to do a SCO. Back on to the topic at hand... Gemini. About
two years ago, Brian fed me a copy of the Gemini engine saying
that "Hey, you remember Gemini? Here's the code. Get it working.
Don't talk about it and call it 'Amira'.". Perhaps not exactly
his words but close enough.
So the Amira project had a shaky beginning... I ported the code
to work on MySQL 5.0 and started examining it, removing
platform-specific code, and improving the performance of it. From
the first working run to the last, I think performance improved
by about a factor of 10 but I don't remember specifics. The Amira
project was cancelled 2Q2006. I suppose …
Yay! It's the weekend!
Why does the weekend make me cheerful? I get time to spend on
personal projects, although my sweet wife does complain that my
'personal projects' don't look much different than my day
job.
This project, I have been doodling with for quite a while. It
spawned from a little project that Eric
Herman and myself started to look at 2 years ago with what we
called "MySQL UDF v2". At the time, it included a whole plug-in
and unit testing framework. Since we have to work with what is in
the server, we dropped our plug-in and unit test framework after
the current MySQL 5.1 plug-in system suddenly appeared: Somehow,
I ended up maintaining it but that's another story.
A more modern and sane system for user-defined functions is still
our goal. One part of our concept is to minimize the amount of
'heavy lifting' that needs to be …
Wow, it actually worked with only minor changes to the code. Check this out:
mysql> create function xml_get_state(id int) returns text
-> no sql language xmlrpc external name
-> 'xmlrpc://betty.userland.com/RPC2;examples.getStateName';
Query OK, 0 rows affected (0.00 sec)
mysql> select xml_get_state(40);
+-------------------+
| xml_get_state(40) |
+-------------------+
| South Carolina |
+-------------------+
1 row in set (0.42 sec)
Now I just need to check that it works for more complex
resultsets... Trawl the web for open-access trivial XML-RPC
services or build a test XML-RPC server?
Ok, this is a late late blog post because the code was done and pushed into the work tree not last weekend, but the weekend before. I think it is a pretty significant feature to blog about but for some strange reason, it completely slipped my mind.
Check this out:mysql> call test2('select count(*) from mysql.user; select count(*) from mysql.proc'); +----------+ | count(*) | +----------+ | 3