Merge git://factorcode.org/git/erg

db4
Doug Coleman 2008-02-04 13:36:34 -06:00
commit a4209c2804
9 changed files with 35 additions and 146 deletions

View File

@ -10,7 +10,6 @@ C: <db> db ( handle -- obj )
! HOOK: db-create db ( str -- )
! HOOK: db-drop db ( str -- )
GENERIC: db-open ( db -- )
GENERIC: db-close ( db -- )
TUPLE: statement sql params handle bound? ;

View File

@ -1,27 +1,18 @@
! See http://factorcode.org/license.txt
! Copyright (C) 2007 Berlin Brown
! Date: 1/17/2007
!
! libs/mysql/libmysql.factor
!
! Copyright (C) 2007 Berlin Brown, 2008 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
! Adapted from mysql.h and mysql.c
! Tested with MySQL version - 5.0.24a
USING: alien alien.syntax combinators kernel system ;
IN: db.mysql.ffi
IN: mysql
USING: alien kernel ;
"mysql" {
<< "mysql" {
{ [ win32? ] [ "libmySQL.dll" "stdcall" ] }
{ [ macosx? ] [ "libmysqlclient.14.dylib" "cdecl" ] }
{ [ unix? ] [ "libmysqlclient.so.14" "cdecl" ] }
} cond add-library
} cond add-library >>
LIBRARY: 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 ) ;
@ -32,4 +23,3 @@ FUNCTION: void mysql_free_result ( void* result ) ;
FUNCTION: char** mysql_fetch_row ( void* result ) ;
FUNCTION: int mysql_num_fields ( void* result ) ;
FUNCTION: ulong mysql_affected_rows ( void* mysql ) ;

View File

@ -1,39 +1,25 @@
! Copyright (C) 2007 Berlin Brown, 2008 Doug Coleman.
! See http://factorcode.org/license.txt for license.
! Copyright (C) 2007 Berlin Brown
! Date: 1/17/2007
!
! libs/mysql/mysql.factor
!
! 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 generic ;
USING: kernel alien io prettyprint sequences
namespaces arrays math db.mysql.ffi system ;
IN: db.mysql.lib
SYMBOL: my-conn
TUPLE: mysql-connection mysqlconn host user password db port handle resulthandle ;
TUPLE: mysql-db handle host user password db port ;
TUPLE: mysql-statement ;
TUPLE: mysql-result-set ;
: init-mysql ( -- conn )
: new-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-error-string ( mysql-connection -- str )
mysql-db-handle mysql_error ;
: (mysql-error) ( mysql-connection -- str )
mysql-connection-mysqlconn mysql_error ;
: connect-error-msg ( mysql-connection -- s )
mysql-connection-mysqlconn mysql_error
[
"Couldn't connect to mysql database.\n" %
"Message: " % %
] "" make ;
: mysql-error ( mysql -- )
mysql-error-string throw ;
: mysql-connect ( mysql-connection -- )
init-mysql swap
@ -91,12 +77,7 @@ C: mysql-connection ( host user password db port -- mysql-connection )
! Public Word Definitions
! =========================================================
: mysql-close ( mysql-connection -- )
mysql-connection-mysqlconn mysql_close ;
: mysql-print-table ( seq -- )
[ [ write bl ] each "\n" write ] each ;
: mysql-query ( query -- ret )
>r my-conn get r> (mysql-query) drop
my-conn get (mysql-result) ;
@ -105,20 +86,9 @@ C: mysql-connection ( host user password db port -- mysql-connection )
mysql-query drop
my-conn get (mysql-affected-rows) ;
: mysql-error ( -- s )
#! Get the last mysql error
my-conn get (mysql-error) ;
: mysql-result>seq ( -- seq )
V{ } clone (mysql-result>seq) ;
: with-mysql ( host user password db port quot -- )
[
>r <mysql-connection> my-conn set
my-conn get mysql-connect drop r>
[ my-conn get mysql-close ] cleanup
] with-scope ; inline
: with-mysql-catch ( host user password db port quot -- )
[ with-mysql ] catch [ "Caught: " write print ] when* ;

View File

@ -0,0 +1,15 @@
! Copyright (C) 2008 Doug Coleman.
! See http://factorcode.org/license.txt for license.
USING: alien continuations io kernel prettyprint sequences
db ;
IN: db.mysql
TUPLE: mysql-db handle host user password db port ;
M: mysql-db db-open ( mysql-db -- )
;
M: mysql-db dispose ( mysql-db -- )
mysql-db-handle mysql_close ;

View File

@ -1,5 +1,5 @@
USING: io io.files io.launcher kernel namespaces
prettyprint tools.test db.sqlite db db.sql sequences
prettyprint tools.test db.sqlite db sequences
continuations ;
IN: temporary

View File

@ -1,6 +1,6 @@
! Copyright (C) 2005, 2008 Chris Double, Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: alien arrays assocs classes compiler db db.sql
USING: alien arrays assocs classes compiler db
hashtables io.files kernel math math.parser namespaces
prettyprint sequences strings tuples alien.c-types
continuations db.sqlite.lib db.sqlite.ffi ;

View File

@ -1,11 +0,0 @@
! 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
PROVIDE: libs/mysql
{ +files+ {
"libmysql.factor"
"mysql.factor"
} } ;

View File

@ -1,17 +0,0 @@
--
-- Create three databases (development / test / production)
-- with prefix 'factordb_'
create database factordb_development;
create database factordb_test;
create database factordb_production;
grant all on factordb_development.* to 'factoruser'@'localhost' identified by 'mysqlfactor';
grant all on factordb_test.* to 'factoruser'@'localhost' identified by 'mysqlfactor';
grant all on factordb_production.* to 'factoruser'@'localhost' identified by 'mysqlfactor';
grant all on factordb_development.* to 'factoruser'@'*' identified by 'mysqlfactor';
grant all on factordb_test.* to 'factoruser'@'*' identified by 'mysqlfactor';
grant all on factordb_production.* to 'factoruser'@'*' identified by 'mysqlfactor';
-- End of the Script

View File

@ -1,57 +0,0 @@
! See http://factorcode.org/license.txt for license.
! Simple test for mysql library
! libs/mysql/test/mysql-example.factor
IN: mysql-example
REQUIRES: libs/mysql ;
USING: sequences mysql modules prettyprint kernel io math tools namespaces test ;
"Testing..." print nl
: 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', 'johndoe@test.com', 'The Message', NULL, NULL, 'Testing')"
} "" join ;
: get-update-table ( -- s )
"UPDATE DISCUSSION_FORUM set category = 'my-new-category'" ;
: get-delete-table ( -- s )
"DELETE FROM DISCUSSION_FORUM where id = 2" ;
: get-create-table ( -- s )
{
"create table DISCUSSION_FORUM("
"id int(11) NOT NULL auto_increment,"
"category varchar(128),"
"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-0000:00:00',"
"PRIMARY KEY (id));"
} "" join ;
[ "localhost" "factoruser" "mysqlfactor" "factordb_development" 0 [
get-drop-table mysql-command drop
get-create-table mysql-command drop
get-update-table mysql-command drop
get-delete-table mysql-command drop
! Insert multiple records
20 [
get-insert-table mysql-command 2drop
] each
"select * from discussion_forum order by created_on" mysql-query drop
mysql-result>seq mysql-print-table
] with-mysql ] time
"Done" print