Database-Async
view release on metacpan or search on metacpan
lib/Database/Async/ORM.pm view on Meta::CPAN
async sub apply_database_changes {
my ($self, $db, @actions) = @_;
my $ddl = $self->ddl_for($db);
# Optional extensions first, and we don't care if any fail
for my $ext ($self->extension_list) {
my ($name) = $ext->name;
try {
die 'invalid name for extension: ' . $name unless $name =~ /^[a-zA-Z0-9_-]+$/;
await $db->query(qq{create extension if not exists "$name" cascade})->void if $ext->is_optional;
} catch {
$log->warnf('Failed to install optional extension %s, ignoring: %s', $name, $@);
}
}
# All remaining steps are in a single transaction
await $db->query(q{begin})->void;
for my $ext (grep { not $_->is_optional } $self->extension_list) {
my ($name) = $ext->name;
await $db->query(qq{create extension if not exists "$name" cascade})->void;
}
my @out;
for my $action (@actions) {
if($action->isa('Database::Async::ORM::Table')) {
$log->tracef('Table definition for %s', $action->name);
my ($sql, @bind) = $ddl->table_info($action);
my %map = (
schema => $action->schema->name,
table => $action->name
lib/Database/Async/ORM.pm view on Meta::CPAN
my ($self, $db, @actions) = @_;
my $ddl = $self->ddl_for($db);
my @out;
# Optional extensions first, and we don't care if any fail
for my $ext ($self->extension_list) {
my ($name) = $ext->name;
try {
die 'invalid name for extension: ' . $name unless $name =~ /^[a-zA-Z0-9_-]+$/;
push @out, qq{create extension if not exists "$name" cascade} if $ext->is_optional;
} catch {
$log->warnf('Failed to install optional extension %s, ignoring: %s', $name, $@);
}
}
# All remaining steps are in a single transaction
push @out, q{begin};
for my $ext (grep { not $_->is_optional } $self->extension_list) {
my ($name) = $ext->name;
die 'invalid name for extension: ' . $name unless $name =~ /^[a-zA-Z0-9_-]+$/;
push @out, qq{create extension if not exists "$name" cascade};
}
for my $action (@actions) {
if($action->isa('Database::Async::ORM::Table')) {
$log->tracef('Create table %s', $action->name);
push @out, $ddl->create_table($action);
} elsif($action->isa('Database::Async::ORM::Schema')) {
$log->tracef('Create schema %s', $action->name);
push @out, $ddl->create_schema($action);
} elsif($action->isa('Database::Async::ORM::Type')) {
( run in 0.598 second using v1.01-cache-2.11-cpan-49f99fa48dc )