79 lines
1.7 KiB
Perl
79 lines
1.7 KiB
Perl
package Environment::SQLite;
|
|
|
|
use DBI;
|
|
use Cwd;
|
|
|
|
sub new {
|
|
my ($class, %args) = @_;
|
|
|
|
my $self = bless {
|
|
db_path => $args{db_path} || 'pshell_env.db'
|
|
}, $class;
|
|
|
|
# Convert to absolute path
|
|
$self->{db_path} = getcwd() . '/' . $self->{db_path} unless $self->{db_path} =~ m|^/|;
|
|
|
|
$self->_init_db;
|
|
|
|
return $self;
|
|
}
|
|
|
|
sub _init_db {
|
|
my ($self) = @_;
|
|
|
|
my $dbh = DBI->connect("dbi:SQLite:dbname=$self->{db_path}", "", "",
|
|
{ RaiseError => 1, PrintError => 0 });
|
|
|
|
$dbh->do(<<"SQL");
|
|
CREATE TABLE IF NOT EXISTS environment (
|
|
name TEXT PRIMARY KEY,
|
|
value TEXT NOT NULL
|
|
)
|
|
SQL
|
|
|
|
$dbh->disconnect;
|
|
}
|
|
|
|
sub set {
|
|
my ($self, $name, $value) = @_;
|
|
|
|
my $dbh = DBI->connect("dbi:SQLite:dbname=$self->{db_path}", "", "",
|
|
{ RaiseError => 1, PrintError => 0 });
|
|
|
|
$dbh->do("REPLACE INTO environment (name, value) VALUES (?, ?)", undef, $name, $value);
|
|
|
|
$dbh->disconnect;
|
|
}
|
|
|
|
sub get {
|
|
my ($self, $name) = @_;
|
|
|
|
my $dbh = DBI->connect("dbi:SQLite:dbname=$self->{db_path}", "", "",
|
|
{ RaiseError => 1, PrintError => 0 });
|
|
|
|
my ($value) = $dbh->selectrow_array(
|
|
"SELECT value FROM environment WHERE name = ?", undef, $name);
|
|
|
|
$dbh->disconnect;
|
|
return $value;
|
|
}
|
|
|
|
sub get_all {
|
|
my ($self) = @_;
|
|
|
|
my $dbh = DBI->connect("dbi:SQLite:dbname=$self->{db_path}", "", "",
|
|
{ RaiseError => 1, PrintError => 0 });
|
|
|
|
my $sth = $dbh->prepare("SELECT name, value FROM environment");
|
|
$sth->execute;
|
|
|
|
my %env;
|
|
while (my $row = $sth->fetchrow_arrayref) {
|
|
$env{$row->[0]} = $row->[1];
|
|
}
|
|
|
|
$dbh->disconnect;
|
|
return %env;
|
|
}
|
|
|
|
1;
|