Annotation of parser3/src/sql/mysql/parser3mysql.C, revision 1.5

1.1       paf         1: /** @file
                      2:        Parser: MySQL driver.
                      3: 
                      4:        Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
                      5: 
                      6:        Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
                      7: 
1.5     ! paf         8:        $Id: parser3mysql.C,v 1.4 2001/04/04 12:45:47 paf Exp $
1.1       paf         9: */
                     10: 
1.4       paf        11: #include <stdlib.h>
                     12: 
1.1       paf        13: #include "pa_sql_driver.h"
1.4       paf        14: #include "mysql.h"
                     15: #include "pa_common.h"
1.1       paf        16: 
1.4       paf        17: char *lsplit(char *string, char delim) {
                     18:     if(string) {
                     19:                char *v=strchr(string, delim);
                     20:                if(v) {
                     21:                        *v=0;
                     22:                        return v+1;
                     23:                }
                     24:     }
                     25:     return 0;
                     26: }
                     27: 
                     28: char *lsplit(char **string_ref, char delim) {
                     29:     char *result=*string_ref;
                     30:        char *next=lsplit(*string_ref, delim);
                     31:     *string_ref=next;
                     32:     return result;
                     33: }
1.2       paf        34: 
                     35: /// MySQL server driver
1.1       paf        36: class MySQL_Driver : public SQL_Driver {
                     37: public:
                     38: 
1.4       paf        39:        MySQL_Driver() : SQL_Driver() {
1.3       paf        40:        }
1.1       paf        41: 
                     42:        /// get api version
                     43:        int api_version() { return SQL_API_VERSION; }
1.4       paf        44:        /// connect
1.5     ! paf        45:        const char *connect(
        !            46:                char *url, ///< @b user:pass@host[:port]/database
        !            47:                void **info ///< MYSQL *
        !            48:                ) {
1.4       paf        49:                char *user=url;
                     50:                char *host=lsplit(user, '@');
                     51:                char *db=lsplit(host, '/');
                     52:                char *pwd=lsplit(user, ':');
                     53:                char *error_pos=0;
                     54:                char *port_cstr=lsplit(host, ':');
                     55:                int port=port_cstr?strtol(port_cstr, &error_pos, 0):0;
                     56: 
                     57:            MYSQL *mysql=mysql_init(NULL);
                     58:                if(!mysql_real_connect(mysql, 
                     59:                        host, user, pwd, db, port?port:MYSQL_PORT, NULL, 0))
                     60:                        return "mysql connect failed";
                     61: 
                     62:                *(MYSQL **)info=mysql;
1.3       paf        63:                return 0;
1.2       paf        64:        }
1.4       paf        65:        const char *disconnect(void *info) {
                     66:            mysql_close((MYSQL *)info);
                     67:                return 0;
1.2       paf        68:        }
1.4       paf        69:        const char *commit(void *info) {
1.3       paf        70:                return 0;//"mysql commit failed";
1.1       paf        71:        }
1.4       paf        72:        const char *rollback(void *info) {
                     73:                return 0;//"mysql rollback failed";
1.1       paf        74:        }
                     75: };
                     76: 
                     77: extern "C" SQL_Driver *create() {
                     78:        return new MySQL_Driver();
                     79: }

E-mail: