diff --git a/databases/sqlports/Makefile b/databases/sqlports/Makefile index bfc62675aae..075383c8f82 100644 --- a/databases/sqlports/Makefile +++ b/databases/sqlports/Makefile @@ -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 diff --git a/databases/sqlports/files/mksqlitedb b/databases/sqlports/files/mksqlitedb index 86bf09b9724..1d1b5a103e1 100644 --- a/databases/sqlports/files/mksqlitedb +++ b/databases/sqlports/files/mksqlitedb @@ -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 # @@ -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) = @_;