start adding ordered lists for multiple value vars, to be completed.

This commit is contained in:
espie 2018-11-19 16:43:39 +00:00
parent ad361f3539
commit cce289e5a3
3 changed files with 79 additions and 5 deletions

View File

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

View File

@ -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);
}

View File

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