1. MySQL UDFs

I haven't coded in Euphoria for years now and when I did I didn't really to all
that much.

I know that Euphoria programs can be converted into C++ and compiled into DLL's.

I don't know if any of you are familiar with MySQL UDFs but they are essentialy
DLL's with C calling conventions that can be plugged into a MySQL server.

To use them the signature of the DLL has to meet stringent criteria, how well
can one control the signature of the created DLL?

I've written and successfully used them in C++ but I'm not very familiar with it
and the learning curve is abhoring.

Thank you in advance for any assistance you may render to to me.

new topic     » topic index » view message » categorize

2. Re: MySQL UDFs

Bryce Byrd wrote:
> 
> I haven't coded in Euphoria for years now and when I did I didn't really to
> all that much.
> 
> I know that Euphoria programs can be converted into C++ and compiled 
> into DLL's.
> 
> I don't know if any of you are familiar with MySQL UDFs but they are
> essentialy DLL's with C calling conventions that can be plugged into
> a MySQL server.

The short answer is that you should be able to do this.  If you want to 
write Euphoria routines that are the actual interface (i.e., not write
some hand coded C routines that call your translated euphoria routines),
you will probably need this:

http://www.rapideuphoria.com/32bits.zip

It will allow you to take full 32-bit ints as parameters (as in, pointers).
You may also need to alter return values, if you have to return any 
pointers.  The basic problem is that instead of a normal 32-bit integer,
you may end up returning an atom that is really a double in disguise,
because the value has out grown the euphoria 30-bit integer.  I'm not
familiar with the interface requirements for MySQL UDTs, so I can't 
say whether or not you'll need this.  It's not difficult to do, but
will require some hand editing of the translated code.  This is probably 
the easiest way to get to where you're trying to go.

Another alternative is to wrap your euphoria functions with a hand coded
C interface that converts 32-bit integers that have overflowed the 
euphoria 30-bit integers.  I do this a lot in wxEuphoria, and use this
function:

static object box_int( int x )
{
	if(x > NOVALUE && x < TOO_BIG_INT)
		return (object) x;
	else
		return (object)NewDouble((double)x);
}

You'll note that similar code is used in my 32-bit helper code.


> To use them the signature of the DLL has to meet stringent criteria,
> how well can one control the signature of the created DLL?

You can control it completely.  The exact method for doing so depends
upon which compiler you're using, but generally, it may require editing
some files output by the translator.  Juergen has a helper app that
might help you with some of this (windows only):

http://www.rapideuphoria.com/ecwr.zip

> I've written and successfully used them in C++ but I'm not very familiar
> with it and the learning curve is abhoring.
> 
> Thank you in advance for any assistance you may render to to me.

One downside of doing this in euphoria instead of C is that you lose
the structured data features of C, and have to do it all by hand.  I'd
recommend using a structure library.  My preferred library is the one 
that win32lib uses (it's actually cross platform).  Take a look at
w32memory.ew.

Matt

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu