create views for most of the subsidiary tables
This commit is contained in:
parent
e122efb23b
commit
ed5d8b0ec0
@ -1,7 +1,7 @@
|
||||
# $OpenBSD: Makefile,v 1.15 2009/08/14 11:31:37 espie Exp $
|
||||
# $OpenBSD: Makefile,v 1.16 2009/08/14 12:41:56 espie Exp $
|
||||
|
||||
CATEGORIES = databases
|
||||
V = 1.3
|
||||
V = 1.4
|
||||
DISTNAME = sqlports-$V
|
||||
DISTFILES =
|
||||
COMMENT = sqlite database of ports
|
||||
|
@ -1,5 +1,5 @@
|
||||
#! /usr/bin/perl
|
||||
# $OpenBSD: mksqlitedb,v 1.12 2009/08/14 11:31:37 espie Exp $
|
||||
# $OpenBSD: mksqlitedb,v 1.13 2009/08/14 12:41:56 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2006 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -56,6 +56,17 @@ sub render
|
||||
return $self->name." ".$self->sqltype;
|
||||
}
|
||||
|
||||
sub render_view
|
||||
{
|
||||
my ($self, $t) = @_;
|
||||
return $t.".".$self->name." AS ".$self->name;
|
||||
}
|
||||
|
||||
sub render_join
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
package TextColumn;
|
||||
our @ISA = qw(Column);
|
||||
|
||||
@ -86,23 +97,48 @@ sub sqltype
|
||||
return "INTEGER";
|
||||
}
|
||||
|
||||
package RefColumn;
|
||||
our @ISA = qw(Column);
|
||||
|
||||
my $table = "T0001";
|
||||
|
||||
sub table
|
||||
{
|
||||
my $self = shift;
|
||||
if (!defined $self->{table}) {
|
||||
$self->{table} = $table++;
|
||||
}
|
||||
return $self->{table};
|
||||
}
|
||||
|
||||
package PathColumn;
|
||||
our @ISA = qw(Column);
|
||||
our @ISA = qw(RefColumn);
|
||||
|
||||
sub default_name
|
||||
{
|
||||
return "FULLPKGPATH";
|
||||
}
|
||||
|
||||
sub render_view
|
||||
{
|
||||
my ($self, $t) = @_;
|
||||
return $self->table.".FULLPKGPATH AS ".$self->name;
|
||||
}
|
||||
|
||||
sub render
|
||||
{
|
||||
my ($self, $inserter, $class) = @_;
|
||||
return $inserter->pathref($self->name);
|
||||
}
|
||||
|
||||
sub render_join
|
||||
{
|
||||
my ($self, $table) = @_;
|
||||
return " JOIN PATHS ".$self->{table}." ON ".$self->table.".ID=$table.".$self->name;
|
||||
}
|
||||
|
||||
package ValueColumn;
|
||||
our @ISA = qw(Column);
|
||||
our @ISA = qw(RefColumn);
|
||||
|
||||
sub default_name
|
||||
{
|
||||
@ -124,6 +160,24 @@ sub render
|
||||
return $inserter->value($self->{k}, $self->name);
|
||||
}
|
||||
|
||||
sub render_view
|
||||
{
|
||||
my ($self, $t) = @_;
|
||||
if (defined $self->{k}) {
|
||||
return $self->table.".VALUE AS ".$self->name;
|
||||
} else {
|
||||
return $self->SUPER::render_view($t);
|
||||
}
|
||||
}
|
||||
|
||||
sub render_join
|
||||
{
|
||||
my ($self, $table) = @_;
|
||||
if (defined $self->{k}) {
|
||||
return " JOIN ".$self->{k}." ".$self->table." ON ".$self->table.".KEYREF=$table.".$self->name;
|
||||
}
|
||||
}
|
||||
|
||||
package OptValueColumn;
|
||||
our @ISA = qw(ValueColumn);
|
||||
|
||||
@ -307,6 +361,24 @@ sub optvalue
|
||||
}
|
||||
}
|
||||
|
||||
sub make_table
|
||||
{
|
||||
my ($self, $class, $constraint, @columns) = @_;
|
||||
|
||||
return if defined $self->{tables_created}->{$class->table};
|
||||
|
||||
$self->SUPER::make_table($class, $constraint, @columns);
|
||||
|
||||
unshift(@columns, PathColumn->new);
|
||||
my $name = "_".$class->table;
|
||||
my @l = map {$_->render_view($class->table) } @columns;
|
||||
my @j = map {$_->render_join($class->table)} @columns;
|
||||
my $v = "CREATE VIEW $name AS SELECT ".join(", ", @l). " FROM ".$class->table.join('', @j);
|
||||
$self->db->do("DROP VIEW IF EXISTS $name");
|
||||
print "$v\n" if $main::opt_v;
|
||||
$self->db->do($v);
|
||||
}
|
||||
|
||||
sub create_tables
|
||||
{
|
||||
my ($self, $vars) = @_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user