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
