--- parser3/src/sql/mysql/Attic/parser3mysql.C 2001/04/04 12:13:20 1.3 +++ parser3/src/sql/mysql/Attic/parser3mysql.C 2001/04/04 12:54:59 1.5 @@ -5,40 +5,73 @@ Author: Alexander Petrosyan (http://design.ru/paf) - $Id: parser3mysql.C,v 1.3 2001/04/04 12:13:20 paf Exp $ + $Id: parser3mysql.C,v 1.5 2001/04/04 12:54:59 paf Exp $ */ +#include + #include "pa_sql_driver.h" +#include "mysql.h" +#include "pa_common.h" +char *lsplit(char *string, char delim) { + if(string) { + char *v=strchr(string, delim); + if(v) { + *v=0; + return v+1; + } + } + return 0; +} + +char *lsplit(char **string_ref, char delim) { + char *result=*string_ref; + char *next=lsplit(*string_ref, delim); + *string_ref=next; + return result; +} /// MySQL server driver class MySQL_Driver : public SQL_Driver { public: - MySQL_Driver() : SQL_Driver(), - info(0) { + MySQL_Driver() : SQL_Driver() { } /// get api version int api_version() { return SQL_API_VERSION; } - /// connect @test move info inside - const char *connect(const char *url) { - /*return "mysql connect failed";*/ + /// connect + const char *connect( + char *url, ///< @b user:pass@host[:port]/database + void **info ///< MYSQL * + ) { + char *user=url; + char *host=lsplit(user, '@'); + char *db=lsplit(host, '/'); + char *pwd=lsplit(user, ':'); + char *error_pos=0; + char *port_cstr=lsplit(host, ':'); + int port=port_cstr?strtol(port_cstr, &error_pos, 0):0; + + MYSQL *mysql=mysql_init(NULL); + if(!mysql_real_connect(mysql, + host, user, pwd, db, port?port:MYSQL_PORT, NULL, 0)) + return "mysql connect failed"; + + *(MYSQL **)info=mysql; return 0; } - const char *disconnect() { - return "mysql disconnect failed"; + const char *disconnect(void *info) { + mysql_close((MYSQL *)info); + return 0; } - const char *commit() { + const char *commit(void *info) { return 0;//"mysql commit failed"; } - const char *rollback() { - return "mysql rollback failed"; + const char *rollback(void *info) { + return 0;//"mysql rollback failed"; } - -private: - - void *info; }; extern "C" SQL_Driver *create() {