]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Utils/OfflineStore.pm
added more status info, fully executing and archiving
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Utils / OfflineStore.pm
1 package OpenILS::Utils::OfflineStore;
2 use strict; use warnings;
3 use base 'Class::DBI';
4 use DBI;
5 use OpenSRF::Utils::Config;
6
7 our $_file;
8 sub DBFile {
9         my $class = shift;
10         my $file = shift;
11         $_file = $file if ($file);
12         return $_file;
13 }
14
15 our $_dbh;
16 sub db_Main {
17         my $self = shift;
18         return $_dbh if ($_dbh);
19
20         $_dbh = DBI->connect('dbi:SQLite:dbname='.$self->DBFile,'','', 
21                 {
22                         RootClass => 'DBIx::ContextualFetch' 
23                 }
24         );
25
26         if( -s $self->DBFile < 1 ) { # tables have not been created
27                 OpenILS::Utils::OfflineStore::Session->_create_table;
28                 OpenILS::Utils::OfflineStore::Script->_create_table;
29         }
30         return $_dbh;
31 }
32
33
34 sub disconnect {
35         $_dbh->disconnect;
36         $_dbh = undef;
37 }
38
39
40 package OpenILS::Utils::OfflineStore::Session;
41 use base 'OpenILS::Utils::OfflineStore';
42
43 sub _create_table {
44         my $self = shift;
45         $self->db_Main->do( <<" SQL" );
46
47 CREATE TABLE session (
48         key                             TEXT    UNIQUE PRIMARY KEY,
49         org                             INTEGER NOT NULL,
50         description             TEXT,
51         creator                 INTEGER NOT NULL,
52         create_time             INTEGER NOT NULL,
53         in_process              INTEGER NOT NULL DEFAULT 0,
54         start_time              INTEGER,
55         end_time                        INTEGER,
56         num_complete    INTEGER NOT NULL DEFAULT 0
57 );
58 CREATE INDEX IF NOT EXISTS session_pkey ON session (key);
59 CREATE INDEX IF NOT EXISTS session_org ON session (org);
60 CREATE INDEX IF NOT EXISTS session_creation ON session (create_time);
61
62         SQL
63 }
64
65 __PACKAGE__->table('session');
66 __PACKAGE__->columns( Essential => qw/key org description 
67                 creator create_time in_process start_time end_time num_complete/);
68 __PACKAGE__->has_many(scripts => 'OpenILS::Utils::OfflineStore::Script');
69
70
71 package OpenILS::Utils::OfflineStore::Script;
72 use base 'OpenILS::Utils::OfflineStore';
73
74 sub _create_table {
75         my $self = shift;
76         $self->db_Main->do( <<" SQL" );
77
78 CREATE TABLE script (
79         id              INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT,
80         session         TEXT    NOT NULL,
81         requestor       INTEGER NOT NULL,
82         create_time     INTEGER NOT NULL,
83         workstation     TEXT    NOT NULL,
84         logfile         TEXT    NOT NULL,
85         time_delta      INTEGER NOT NULL DEFAULT 0,
86         count                   INTEGER NOT NULL DEFAULT 0
87 );
88 CREATE INDEX IF NOT EXISTS script_pkey ON script (id);
89 CREATE INDEX IF NOT EXISTS script_ws ON script (workstation);
90 CREATE INDEX IF NOT EXISTS script_session ON script (session);
91
92         SQL
93 }
94
95 __PACKAGE__->table('script');
96 __PACKAGE__->columns( Essential => qw/id session requestor create_time workstation logfile time_delta count/);
97 __PACKAGE__->has_a(session => 'OpenILS::Utils::OfflineStore::Session');
98
99
100
101
102