]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/perlmods/lib/OpenILS/Utils/OfflineStore.pm
Make Evergreen Perl modules installable via Module::Build to match OpenSRF
[working/Evergreen.git] / Open-ILS / src / perlmods / lib / OpenILS / Utils / OfflineStore.pm
1 package OpenILS::Utils::OfflineStore;
2 use strict; use warnings;
3
4 use UNIVERSAL::require;
5 if ('Class::DBI::Frozen::301'->use) {
6         use parent 'Class::DBI::Frozen::301';
7 } elsif ('Class::DBI'->use) {
8         use parent 'Class::DBI';
9 } else {
10         die $@;
11 }
12
13 use DBI;
14 use OpenSRF::Utils::Config;
15
16 our ($_dsn,$_u,$_p);
17 sub DBFile {
18         my $class = shift;
19         my $dsn = shift;
20         my $u = shift;
21         my $p = shift;
22         if ($dsn) {
23                 $_dsn = $dsn;
24                 $_u = $u;
25                 $_p = $p;
26         }
27         return $_dsn;
28 }
29
30 our $_dbh;
31 sub db_Main {
32         my $self = shift;
33         return $_dbh if ($_dbh);
34
35         $_dbh = DBI->connect($_dsn,$_u,$_p,
36                 {
37                         RootClass => 'DBIx::ContextualFetch' 
38                 }
39         );
40
41         return $_dbh;
42 }
43
44
45 sub disconnect {
46         $_dbh->disconnect;
47         $_dbh = undef;
48 }
49
50
51 package OpenILS::Utils::OfflineStore::Session;
52 use parent 'OpenILS::Utils::OfflineStore';
53
54 sub _create_table {
55         my $self = shift;
56         $self->db_Main->do( <<" SQL" );
57
58 CREATE TABLE session (
59         key                             TEXT    UNIQUE PRIMARY KEY,
60         org                             INTEGER NOT NULL,
61         description             TEXT,
62         creator                 INTEGER NOT NULL,
63         create_time             INTEGER NOT NULL,
64         in_process              INTEGER NOT NULL DEFAULT 0,
65         start_time              INTEGER,
66         end_time                        INTEGER,
67         num_complete    INTEGER NOT NULL DEFAULT 0
68 );
69 CREATE INDEX IF NOT EXISTS session_pkey ON session (key);
70 CREATE INDEX IF NOT EXISTS session_org ON session (org);
71 CREATE INDEX IF NOT EXISTS session_creation ON session (create_time);
72
73         SQL
74 }
75
76 __PACKAGE__->table('offline.session');
77 __PACKAGE__->columns( Essential => qw/key org description 
78                 creator create_time in_process start_time end_time num_complete/);
79 __PACKAGE__->has_many(scripts => 'OpenILS::Utils::OfflineStore::Script');
80
81
82 package OpenILS::Utils::OfflineStore::Script;
83 use parent 'OpenILS::Utils::OfflineStore';
84
85 sub _create_table {
86         my $self = shift;
87         $self->db_Main->do( <<" SQL" );
88
89 CREATE TABLE script (
90         id              INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT,
91         session         TEXT    NOT NULL,
92         requestor       INTEGER NOT NULL,
93         create_time     INTEGER NOT NULL,
94         workstation     TEXT    NOT NULL,
95         logfile         TEXT    NOT NULL,
96         time_delta      INTEGER NOT NULL DEFAULT 0,
97         count                   INTEGER NOT NULL DEFAULT 0
98 );
99 CREATE INDEX IF NOT EXISTS script_pkey ON script (id);
100 CREATE INDEX IF NOT EXISTS script_ws ON script (workstation);
101 CREATE INDEX IF NOT EXISTS script_session ON script (session);
102
103         SQL
104 }
105
106 __PACKAGE__->table('offline.script');
107 __PACKAGE__->columns( Essential => qw/id session requestor create_time workstation logfile time_delta count/);
108 __PACKAGE__->has_a(session => 'OpenILS::Utils::OfflineStore::Session');
109 __PACKAGE__->sequence(qw/offline.script_id_seq/);
110
111
112
113
114