create views for most of the subsidiary tables

This commit is contained in:
espie 2009-08-14 12:41:56 +00:00
parent e122efb23b
commit ed5d8b0ec0
2 changed files with 77 additions and 5 deletions

View File

@ -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

View File

@ -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) = @_;