use strict;
use DBIx::Class::Loader;
use AI::Prolog;
my $loader = DBIx::Class::Loader->new(
dsn => $ARGV[0],
user => $ARGV[1],
password => $ARGV[2],
namespace => 'Data',
);
my $prog;
for my $c ( $loader->classes ) {
my $rs = $c->search();
$prog .= '% ' . join ( ',', $c->columns ) . "\n";
while ( my $row = $rs->next ){
$prog .= $c->table . '(';
my @quoted = map {AI::Prolog->quote($row->$_)} $c->columns;
$prog .= join ',', @quoted;
$prog .= ").\n";
}
}
print $prog;
####
create table usr(id integer primary key, name varchar(100), cityid integer);
create table city (id integer primary key, name varchar(100));
insert into usr values (1, 'John', 1);
insert into usr values (2, 'Marry', 1);
insert into usr values (3, 'Eva', 2);
insert into usr values (4, 'Zby', 3);
insert into city values (1, 'New York');
insert into city values (2, 'London');
insert into city values (3, 'Warsaw');
####
perl dump.pl dbi:Pg:dbname=prolog > mytables
####
% name,id
city('New York',1).
city('London',2).
city('Warsaw',3).
% cityid,name,id
usr(1,'John',1).
usr(1,'Marry',2).
usr(2,'Eva',3).
usr(3,'Zby',4).
####
zby@zby:~/progs/prologdata$ swipl
Welcome to SWI-Prolog (Multi-threaded, Version 5.2.13)
Copyright (c) 1990-2003 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- [mytables].
% mytables compiled 0.00 sec, 1,400 bytes
Yes
?-
####
?- usr(Cityid, Name, Id), city('New York', Cityid).
Cityid = 1
Name = 'John'
Id = 1 ;
Cityid = 1
Name = 'Marry'
Id = 2 ;
No
?-
####
my $prologDB = AI::Prolog->new( $prog );
$prologDB->query( "usr(1,Name,Uid)." );
while (my $results = $prologDB->results) { print "@$results\n"; }