our
$VERSION
=
'0.000036'
;
my
(
$SQLITE
,
$DBDSQLITE
);
BEGIN {
local
$@;
$SQLITE
= can_run(
'sqlite3'
);
$DBDSQLITE
=
eval
{
require
DBD::SQLite;
'DBD::SQLite'
};
}
sub
version_string {
my
$binary
;
for
my
$arg
(
reverse
@_
) {
my
$type
= reftype(
$arg
) or
next
;
next
unless
$type
eq
'HASH'
;
$binary
=
$arg
->{+SQLITE} and
last
;
}
$binary
||=
$SQLITE
;
return
`
$binary
-version`;
}
sub
_default_paths {
return
(
sqlite
=>
$SQLITE
) }
sub
viable {
my
$this
=
shift
;
my
(
$spec
) =
@_
;
my
%check
= (
ref
(
$this
) ?
%$this
: (),
$this
->_default_paths,
%$spec
);
my
@bad
;
push
@bad
=>
"'DBD::SQLite' module could not be loaded, needed for everything"
unless
$DBDSQLITE
;
return
(1,
undef
)
unless
@bad
;
return
(0,
join
"\n"
=>
@bad
);
}
sub
init {
my
$self
=
shift
;
$self
->SUPER::init();
my
%defaults
=
$self
->_default_paths;
$self
->{
$_
} ||=
$defaults
{
$_
}
for
keys
%defaults
;
$self
->{+STARTED} = 1;
return
;
}
sub
bootstrap {
return
}
sub
start {
return
}
sub
stop {
return
}
sub
clone {
my
$self
=
shift
;
local
$self
->{+STARTED} = 0;
return
$self
->SUPER::clone(
@_
);
}
sub
connect_string {
my
$self
=
shift
;
my
(
$db_name
) =
@_
;
$db_name
=
'quickdb'
unless
defined
$db_name
;
my
$dir
=
$self
->{+DIR};
my
$path
=
"$dir/$db_name"
;
return
"dbi:SQLite:dbname=$path"
;
}
sub
load_sql {
my
$self
=
shift
;
my
(
$db_name
,
$file
) =
@_
;
my
$dbh
=
$self
->
connect
(
$db_name
,
sqlite_allow_multiple_statements
=> 1,
RaiseError
=> 1,
AutoCommit
=> 1);
open
(
my
$fh
,
'<'
,
$file
) or
die
"Could not open file '$file': $!"
;
my
$sql
=
join
""
=> <
$fh
>;
close
(
$fh
);
$dbh
->
do
(
$sql
) or
die
$dbh
->errstr;
}
sub
shell_command {
my
$self
=
shift
;
my
(
$db_name
) =
@_
;
my
$dir
=
$self
->{+DIR};
my
$path
=
"$dir/$db_name"
;
return
(
$self
->{+SQLITE},
$path
);
}
1;