start adding ordered lists for multiple value vars, to be completed.
This commit is contained in:
parent
ad361f3539
commit
cce289e5a3
@ -1,7 +1,7 @@
|
||||
# $OpenBSD: Makefile,v 1.79 2018/11/17 10:39:40 espie Exp $
|
||||
# $OpenBSD: Makefile,v 1.80 2018/11/19 16:43:39 espie Exp $
|
||||
|
||||
CATEGORIES = databases
|
||||
V = 6.14
|
||||
V = 6.15
|
||||
DISTNAME = sqlports-$V
|
||||
DISTFILES =
|
||||
COMMENT = sqlite database of ports
|
||||
|
@ -1,5 +1,5 @@
|
||||
#! /usr/bin/perl
|
||||
# $OpenBSD: Inserter.pm,v 1.14 2018/11/16 14:45:57 espie Exp $
|
||||
# $OpenBSD: Inserter.pm,v 1.15 2018/11/19 16:43:39 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2006-2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -168,6 +168,31 @@ sub make_table
|
||||
$self->new_table($class->table, @l);
|
||||
}
|
||||
|
||||
sub subselect
|
||||
{
|
||||
my ($self, $class) = @_;
|
||||
return $class->subselect;
|
||||
}
|
||||
|
||||
sub make_ordered_view
|
||||
{
|
||||
my ($self, $class) = @_;
|
||||
|
||||
my $view = $self->view_name($class->table."_ordered");
|
||||
my $subselect = $self->subselect($class);
|
||||
return if defined $self->{view_created}{$view};
|
||||
$self->{view_created}{$view} = 1;
|
||||
|
||||
my $v = qq{
|
||||
CREATE VIEW $view as
|
||||
with o as ($subselect)
|
||||
select fullpkgpath, group_concat(value, ' ') as value from o
|
||||
group by fullpkgpath;};
|
||||
print "$v\n" if $self->{verbose};
|
||||
$self->db->do("DROP VIEW IF EXISTS $view");
|
||||
$self->db->do($v);
|
||||
}
|
||||
|
||||
sub set
|
||||
{
|
||||
my ($self, $ref) = @_;
|
||||
@ -305,6 +330,12 @@ sub view_name
|
||||
return "_$name";
|
||||
}
|
||||
|
||||
sub subselect
|
||||
{
|
||||
my ($self, $class) = @_;
|
||||
return $class->subselect_compact;
|
||||
}
|
||||
|
||||
sub convert_depends
|
||||
{
|
||||
my ($self, $value) = @_;
|
||||
@ -350,11 +381,13 @@ sub create_view
|
||||
|
||||
unshift(@columns, PathColumn->new);
|
||||
my $view = $self->view_name($table);
|
||||
return if defined $self->{view_created}{$view};
|
||||
$self->{view_created}{$view} = 1;
|
||||
my @l = $self->map_columns('view', $table, @columns);
|
||||
my @j = $self->map_columns('join', $table, @columns);
|
||||
my $v = "CREATE VIEW $view AS SELECT ".join(", ", @l). " FROM ".$self->table_name($table).' '.join(' ', @j);
|
||||
$self->db->do("DROP VIEW IF EXISTS $view");
|
||||
print "$v\n" if $self->{verbose};
|
||||
$self->db->do("DROP VIEW IF EXISTS $view");
|
||||
$self->db->do($v);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# $OpenBSD: Var.pm,v 1.31 2018/11/19 15:13:06 espie Exp $
|
||||
# $OpenBSD: Var.pm,v 1.32 2018/11/19 16:43:39 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2006-2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -432,6 +432,26 @@ sub columns
|
||||
return (ValueColumn->new, IntegerColumn->new("N"));
|
||||
}
|
||||
|
||||
sub create_tables
|
||||
{
|
||||
my ($self, $inserter) = @_;
|
||||
$self->SUPER::create_tables($inserter);
|
||||
$inserter->make_ordered_view($self);
|
||||
}
|
||||
|
||||
sub subselect_compact
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->subselect;
|
||||
}
|
||||
|
||||
sub subselect
|
||||
{
|
||||
my $self = shift;
|
||||
my $t = $self->table;
|
||||
return "select fullpkgpath, value from $t order by n";
|
||||
}
|
||||
|
||||
package MasterSitesVar;
|
||||
our @ISA = qw(OptKeyVar);
|
||||
sub table() { 'MasterSites' }
|
||||
@ -491,6 +511,15 @@ sub add
|
||||
}
|
||||
}
|
||||
|
||||
sub subselect_compact
|
||||
{
|
||||
my $self = shift;
|
||||
my $t = $self->table;
|
||||
my $k = $self->keyword_table;
|
||||
return "select fullpkgpath, $k.value from $t join $k on $k.keyref=$t.value order by n";
|
||||
}
|
||||
|
||||
|
||||
package QuotedListVar;
|
||||
our @ISA = qw(ListVar);
|
||||
|
||||
@ -535,6 +564,18 @@ sub columns
|
||||
IntegerColumn->new("QUOTETYPE"));
|
||||
}
|
||||
|
||||
sub subselect
|
||||
{
|
||||
my $self = shift;
|
||||
my $t = $self->table;
|
||||
return qq{
|
||||
select fullpkgpath,
|
||||
case quotetype
|
||||
when 0 then value
|
||||
when 1 then '"'||value||'"'
|
||||
when 2 then "'"||value||"'" end as value from $t order by n};
|
||||
}
|
||||
|
||||
package DefinedListKeyVar;
|
||||
our @ISA = qw(ListKeyVar);
|
||||
sub columntype() { 'OptValueColumn' }
|
||||
|
Loading…
x
Reference in New Issue
Block a user