Acrux-DBI
view release on metacpan or search on metacpan
unless ($file && (-e $file) && !(-z $file)) {
touch($file);
chmod(0666, $file);
$is_new = 1;
}
} elsif ($self->is_mysql) {
if (my $res = $self->query("SHOW TABLES FROM
`" . $self->database() . "` LIKE 'altair'")) {
$is_new = 1 if is_void($res->array);
}
}
}
# Check DB handler
return $self->error(sprintf("Can't connect to database \"%s\": %s",
$self->dsn, $self->errstr || "unknown error")) unless $dbh;
# Import schema
if ($is_new) {
$self->dump->from_data->poke("ddl_" . $self->driver());
return $self if $self->error;
}
# Check connect
return $self->error(sprintf("Can't init database \"%s\". Ping failed: %s",
$self->dsn, $self->errstr() || "unknown error")) unless $self->ping;
return $self;
}
sub is_mysql {
my $self = shift;
my $dr = $self->driver;
return ($dr eq 'mysql' or $dr eq 'mariadb' or $dr eq 'maria') ? 1 : 0;
}
sub is_sqlite {
my $self = shift;
return $self->driver eq 'sqlite' ? 1 : 0;
}
```
ÐниÑиализаÑÐ¸Ñ Ð½Ð°ÑинаеÑÑÑ Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐµÑиÑованного ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ
. Ðалее идÑÑ Ð¿ÑовеÑка иниÑиализаÑии ÑÑ
емÑ, еÑли ÑÑ
ема не инÐ...
```sql
__DATA__
@@ schema
-- # ddl_sqlite
CREATE TABLE IF NOT EXISTS "altair" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
"status" INTEGER DEFAULT NULL,
"comment" TEXT DEFAULT NULL
)
-- # ddl_mysql
CREATE TABLE IF NOT EXISTS `altair` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`status` INT(11) DEFAULT NULL,
`comment` TEXT DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
```
ÐоÑле ÑÑпеÑной иниÑиализаÑии пÑоиÑÑ
Ð¾Ð´Ð¸Ñ ÐºÐ¾Ð½ÑÑолÑнÑй вÑзов пÑовеÑки акÑивноÑÑи ÑоединениÑ, и возвÑÐ°Ñ Ð¾Ñибки еÑли ÑÑо-Ñо поÑло не Ñак
## Using
РобÑабоÑÑикаÑ
маÑÑÑÑÑов клаÑÑа `WWW::Altair::Server::Alpha` иниÑиализаÑÐ¸Ñ Ñже не поÑÑебÑеÑÑÑ, а ÑÑиÑ
обÑабоÑÑикаÑ
пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¸ÑполÑзование Ñанее и...
```perl
sub tail { # GET /tail
my $self = shift;
# Get model
my $model = $self->app->model->connect_cached;
return $self->reply->json_error(500 => "E9003", $model->error)
if $model->error;
# Get log tail
my @tail = $model->get_log_tail;
return $self->reply->json_error(500 => "E9004", $model->error)
if $model->error;
# Render
return $self->reply->json_ok({tail => \@tail});
}
```
РклаÑÑе модели меÑод `get_log_tail` вÑглÑÐ´Ð¸Ñ Ñак:
```perl
use constant DML_LOG_TAIL => <<'DML';
SELECT * FROM altair ORDER BY `id` DESC LIMIT 100
DML
sub get_log_tail {
my $self = shift;
return () unless $self->ping;
# Log tail
my $tbl = {};
if (my $res = $self->query(DML_LOG_TAIL)) {
$tbl = $res->hashed_by( 'id' );
} else {
return ();
}
# Last 100 records (tail)
my @tail = ();
foreach my $id (sort {$b <=> $a} keys %$tbl) {
my $v = $tbl->{$id};
foreach my $k (keys %$v) {
$v->{$k} //= "";
}
push @tail, $v;
}
return @tail;
}
```
( run in 2.878 seconds using v1.01-cache-2.11-cpan-d8267643d1d )