I was excited, sorry for the long post.

---

! * License: See http://factor.sf.net/license.txt for BSD license.
! * Berlin Brown
! * Date: 1/17/2007
!
! mysql.factor
! Use - 'libs/mysql' require to load the module
!
! Adapted from mysql.h and mysql.c
! Tested with MySQL version - 5.0.24a

IN: mysql
USING: kernel alien errors io prettyprint sequences namespaces arrays math 
tools ;

TUPLE: mysql-connection mysqlconn host user password db port handle 
resulthandle ;

: init-mysql ( -- conn )
        f mysql_init ;

C: mysql-connection ( host user password db port -- mysql-connection )
        [ set-mysql-connection-port ] keep
        [ set-mysql-connection-db ] keep
        [ set-mysql-connection-password ] keep
        [ set-mysql-connection-user ] keep
        [ set-mysql-connection-host ] keep ;

: mysql-connect ( mysql-connection -- )
        init-mysql swap
        [ set-mysql-connection-mysqlconn ] 2keep
        [ mysql-connection-host ] keep
        [ mysql-connection-user ] keep
        [ mysql-connection-password ] keep
        [ mysql-connection-db ] keep
        [ mysql-connection-port f 0 mysql_real_connect ] keep
        [ set-mysql-connection-handle ] keep ;

: mysql-query ( mysql-connection query -- ret )
        >r mysql-connection-mysqlconn r> mysql_query ;

: mysql-result ( mysql-connection -- ret )
        [ mysql-connection-mysqlconn mysql_use_result ] keep 
        [ set-mysql-connection-resulthandle ] keep ;

: mysql-error ( mysql-connection -- str )
        mysql-connection-mysqlconn mysql_error ;
        
: mysql-affected-rows ( mysql-connection -- n )
        mysql-connection-mysqlconn mysql_affected_rows ;

: mysql-free-result ( mysql-connection -- )
        mysql-connection-resulthandle drop ;

: mysql-row ( mysql-connection -- row )
        mysql-connection-resulthandle mysql_fetch_row ;

: mysql-cols ( mysql-connection -- n )
        mysql-connection-resulthandle mysql_num_fields ;

: mysql-fetchrow>seq ( mysql-connection -- seq )
        dup >r mysql-row r> 
        dup f = [ 
                dup >r mysql-cols [
                        swap char*-nth pprint terpri
                ] each-with
                terpri
                r>
                mysql-fetchrow>seq
        ] unless
        "" ;

: mysql-close ( mysql-connection -- )
        mysql-connection-mysqlconn mysql_close ;


--

! * License: See http://factor.sf.net/license.txt for BSD license.
! * Berlin Brown
! * Date: 1/17/2007
!
! Adapted from mysql.h and mysql.c
! Tested with MySQL version - 5.0.24a

IN: mysql
USING: alien ;

"mysql" "libmySQL.dll" "stdcall" add-library

LIBRARY: mysql

! ===============================================
! typedefs
! ===============================================

TYPEDEF: void* MYSQL

! ===============================================
! mysql.c
! ===============================================

FUNCTION: void* mysql_init ( void* mysql ) ;
FUNCTION: char* mysql_error ( void* mysql ) ;
FUNCTION: void* mysql_real_connect ( void* mysql, char* host, char* user, 
char* passwd, char* db, int port, char* unixsocket, long clientflag ) ;
FUNCTION: void mysql_close ( void* sock ) ;
FUNCTION: int mysql_query ( void* mysql, char* q ) ;
FUNCTION: void* mysql_use_result ( void* mysql ) ;
FUNCTION: void mysql_free_result ( void* result ) ;
FUNCTION: char** mysql_fetch_row ( void* result ) ;
FUNCTION: int mysql_num_fields ( void* result ) ;
FUNCTION: long mysql_affected_rows ( void* mysql ) ;

---

! Simple test case for mysql library
REQUIRES: libs/mysql ;
USING: mysql modules prettyprint kernel io math tools namespaces ;

SYMBOL: conn

: get-drop-table ( -- s )
        "DROP TABLE if exists DISCUSSION_FORUM" ;
        
: get-insert-table ( -- s )
        [ 
                "INSERT INTO DISCUSSION_FORUM(category, full_name, email, 
title, main_url, keywords, message) " %
                "VALUES('none', 'John Doe', '[EMAIL PROTECTED]', 'The 
Message', 'http://johndoe.com', 'none', 'Testing')" %
        ] "" make ;
        
: get-create-table ( -- s )
        [ "create table DISCUSSION_FORUM(" %
        "id                     int(11) NOT NULL auto_increment," %
        "category               varchar(128) NOT NULL," %
        "full_name              varchar(128) NOT NULL," %
        "email                  varchar(128) NOT NULL," %       
        "title                  varchar(255) NOT NULL," %
        "main_url               varchar(255)," %
        "keywords               varchar(255)," %
        "message                text NOT NULL," % 
        "created_on             DATETIME NOT NULL DEFAULT '0000-00-00 
00:00:00'," %
        "PRIMARY KEY (id));" %
        ] "" make ;


"Testing..." print
"localhost" "spirituser" "PWD" "botlist_development" 0 <mysql-connection> 
conn set
conn get mysql-connect drop
conn get get-drop-table mysql-query drop
conn get get-create-table mysql-query drop
conn get get-insert-table mysql-query drop
conn get mysql-affected-rows pprint terpri

conn get "select * from discussion_forum order by created_on" mysql-query 
result set
conn get mysql-result pprint

conn get mysql-error pprint terpri
conn get mysql-close

terpri
"Done" print
--

I know it isnt classy to put all this code into an email post, but I was 
excited.

--


Berlin Brown
berlin dot brown at gmail dot com or 
bbrown at botspiritcompany dot com


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Factor-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to