From: Noel W. <noe...@ya...> - 2003-01-13 14:58:28
|
Hi all, A quick update on the MySQL driver and a few questions. I've got some basic tests working with the driver (haven't got as far as executing a query yet, but I can connect ok). I seem to be having a problem with the full mysql_real_connect, namely with passing null strings. I've defined a function make-null-string that should return a null string I can then pass into this function. However I get an error when I try to connect this way. However when I define MYSQL* mysql_simple_connect(MYSQL* mysql, const char *dbname) { mysql_real_connect(mysql, NULL, NULL, NULL, dbname, 0, 0, 0); } I can connect ok using this function. Does anyone have ideas on how to handle null strings in SWIG? TIA, Noel __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com |
From: Noel W. <noe...@ya...> - 2003-01-14 13:28:23
|
Thanks to some help from Bruce, my problems with the MySQL driver are over. I've inserted and retrieved data so its usable in a primitive form (a lot easier to bind than the Firebird API!). All really I need now is scheme <---> MySQL marshalling, for which Ryan's API looks good. In case others are working with SWIG, you can pass/return nulls by defining a custom typemap. Below is the typemap I use, which makes #f interchangeable with NULL: typedef char maybeNullChar; %typemap(in) const maybeNullChar * { if (SCHEME_FALSEP($input)) { $1 = NULL; } else { if (!SCHEME_STRINGP($input)) { scheme_wrong_type("$symname", "string or #f", $argnum, argc, argv); } else { $1 = SCHEME_STR_VAL($input); } } } MJ, if you're hacking on the driver (as seen on c.l.s) drop me a line. Noel __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com |
From: Bruce B. <ba...@en...> - 2003-01-13 17:04:30
|
Noel Welsh wrote: > Hi all, > > A quick update on the MySQL driver and a few > questions. I've got some basic tests working with the > driver (haven't got as far as executing a query yet, > but I can connect ok). I seem to be having a problem > with the full mysql_real_connect, namely with passing > null strings. I've defined a function > make-null-string that should return a null string I > can then pass into this function. However I get an > error when I try to connect this way. However when > I define > > MYSQL* mysql_simple_connect(MYSQL* mysql, const char > *dbname) > { > mysql_real_connect(mysql, NULL, NULL, NULL, dbname, > 0, 0, 0); > } > > I can connect ok using this function. Does anyone > have ideas on how to handle null strings in SWIG? > > TIA, > Noel Everytime I've had to deal with null strings in interfaces I've punted by defining helper functions in the interface file like you did. I'll do a little research on this and see if I can figure out a more general solution. In the case of MySQL I just use the mysql_connect function rather than mysql_real_connect. I also defined the helper function mysql_get_field: const char* my_sql_get_field(MYSQL_ROW row, int idx) { return (const char*row[idx]); } and the typemap: %typemap(out) my_ulonglong{ $result = scheme_make_bignum_from_unsigned($1); } Sorry I haven't been very active on schematics lately; sometimes some petty non-scheme issues crop up in life. Ah, well. |