oDB::Compat;
use DiaColloDB::Logger;
use DiaColloDB::Persistent;
use DiaColloDB::Utils qw(:fcntl :json :pack);
use Fcntl qw(:DEFAULT :seek);
use strict;
##============================================
-----
## I/O: JSON
## + mostly INHERITED from DiaCollocDB::Persistent
## $obj = $CLASS_OR_OBJECT->loadJsonData( $data,%opts)
## + guts for loadJsonString(), loadJsonFile()
sub loadJsonData {
my $
that = shift;
my $dprf = $that->DiaColloDB::Persistent::loadJsonData(@_);
bless($_,'DiaColloDB::Profile') foreach (grep {defined($_)} @$dprf{qw(prf1 prf2)});
return $dprf;
}
##-----------------
======================================================================
## I/O: JSON
$obj = $CLASS_OR_OBJECT->loadJsonData( $data,%opts);
##======================================================
:Profile::MultiDiff: I/O: JSON
=pod
=head3 I/O: JSON
=over 4
=item loadJsonData
$obj = $CLASS_OR_OBJECT->loadJsonData( $data,%opts);
guts for loadJsonString(), loadJsonFile()
=back
=cut
##---
is from their L<upgrade|/upgrade>() method.
Default implementation just backs up C<"$dbdir/header.json">, emitting a warning
if C<$up-E<gt>{backup}> is false.
=item backupdir
$dir = $up->backupdir(
eader information C<$dbdir/header.json> for the
local L<DiaColloDB|DiaColloDB> index in C<$dbdir>.
Wraps L<DiaColloDB::Utils::loadJsonFile()|DiaColloDB::Utils/loadJsonFile>.
Default implementation use
_uinfo, \%extra_header_data);
Updates L<DiaColloDB|DiaColloDB> header C<"$up-E<gt>{dbdir}/header.json">
by prepending the upgrade-info structure returned by
C<$up-E<gt>L<uinfo|/uinfo>($coldb,%extra_u
="${_}_2x";
map {"$base.$_"} qw(hdr ma mb)
} @{$hdr->{attrs}};
return (@mmfiles, 'header.json');
}
##==============================================================================
## Footer
ba2.hdr hdr)),
##-- cofreqs
(map {"cof.$_"} qw(dba3 dba3.hdr)),
##-- header
'header.json',
);
}
## @files = $up->revert_updated()
## + returns list of files updated by this upgrade,
##-- cofreqs
(map {"cof.$_"} qw(dba1 dba1.hdr dba2 dba2.hdr hdr)),
##-- header
'header.json',
);
}
##==============================================================================
## Fo
s upgrade, for use with default rollback() implementation
sub revert_updated {
return qw(header.json);
}
##==============================================================================
## Footer
&& !-e $up->backupdir."/$_"} map {"tdf.d/$_"} qw(yf.pdl yf.pdl.hdr)),
##-- header
#'header.json',
);
}
## @files = $up->revert_updated()
## + returns list of files updated by this upgrade,
e $up->backupdir."/$_"} map {"tdf.$_"} qw(hdr d/yf.pdl d/yf.pdl.hdr)),
##-- header
'header.json',
);
}
##==============================================================================
## Fo
es should call this from $up->upgrade()
## + default implementation just backs up "$dbdir/header.json", emitting a warning
## if $up->{backup} is false
sub backup {
my $up = shift;
##-- were
using backup directory $backd/");
$up->info("backing up $dbdir/header.json");
DiaColloDB::Utils::copyto_a("$dbdir/header.json", $backd)
or $up->logconfess("updateHeader(): failed to backup h
==========
## Utilities
## \%hdr = $CLASS_OR_OBJECT->dbheader($dbdir?)
## + reads $dbdir/header.json
## + default uses cached $CLASS_OR_OBJECT->{hdr} if available
sub dbheader {
my ($up,$dbdir) =
class, ##-- DiaColloDB::Document subclass for loading (OVERRIDE forces 'DiaColloDB::Document::JSON')
dopts => \%opts, ##-- options for $dclass->fromFile() (override default={})
cur
C<$pos> (second form).
Override always returns filenames of the form
C<"$corpus-E<gt>{dbdir}/$pos.json">.
=item idocument
$doc_or_undef = $corpus->idocument();
$doc_or_undef = $corpus->idocument($
======================================================================
## I/O: JSON
$obj = $CLASS_OR_OBJECT->loadJsonData( $data,%opts);
##======================================================
loDB::Profile::Diff: I/O: JSON
=pod
=head2 I/O: JSON
=over 4
=item loadJsonData
$obj = $CLASS_OR_OBJECT->loadJsonData( $data,%opts);
guts for loadJsonString(), loadJsonFile()
=back
=cut
##---
-----
## I/O: JSON
## + mostly INHERITED from DiaCollocDB::Persistent
## $obj = $CLASS_OR_OBJECT->loadJsonData( $data,%opts)
## + guts for loadJsonString(), loadJsonFile()
sub loadJsonData {
my $
that = shift;
my $mp = $that->DiaColloDB::Persistent::loadJsonData(@_);
foreach (@{$mp->{profiles}//[]}) {
bless($_,'DiaColloDB::Profile::Diff');
bless($_->{prf1}, 'DiaColloDB::Profile')
{body}//1);
$fh->print("<script type=\"text/javascript\">$opts{qinfo}=", DiaColloDB::Utils::saveJsonString($mp->{qinfo}, pretty=>0), ";</script>\n")
if ($mp->{qinfo} && ($opts{qinfo} //= 'qinfo'
======================================================================
## I/O: JSON
$obj = $CLASS_OR_OBJECT->loadJsonData( $data,%opts);
##======================================================
oDB::Profile::Multi: I/O: JSON
=pod
=head2 I/O: JSON
=over 4
=item loadJsonData
$obj = $CLASS_OR_OBJECT->loadJsonData( $data,%opts);
guts for loadJsonString(), loadJsonFile()
=back
=cut
##---
dclass, ##-- DiaColloDB::Document subclass for loading (OVERRIDE force 'DiaColloDB::Document::JSON')
## dopts => \%opts, ##-- options for $dclass->fromFile() (override default={})
## c
##-- strong overrides
dclass => 'DiaColloDB::Document::JSON',
);
$corpus->{filters} = DiaColloDB::Corpus::Filters->new() i
ions: dclass, files, opened
$corpus->{opened} = 1;
$corpus->{dclass} = 'DiaColloDB::Document::JSON';
delete $corpus->{files};
return $corpus;
}
## $bool = $corpus->close()
sub close {
my $
Corpus::Filters qw(:defaults);
use DiaColloDB::Persistent;
use DiaColloDB::Utils qw(:math :fcntl :json :sort :pack :regex :file :si :run :env :temp :jobs);
#use DiaColloDB::Temp::Vec;
use DiaColloDB::
of dist files for this db
sub diskFiles {
my $coldb = shift;
return ("$coldb->{dbdir}/header.json", map {$_->diskFiles} grep {UNIVERSAL::can(ref($_),'diskFiles')} values %$coldb);
}
##==========
pts{slice2keys}, which is EITHER
## - a HASH-ref {$slice1=>\@keys1, ...},
## OR
## - a JSON-string encoding a such a HASH-ref
## + %opts, as for profile(), except:
## (
## ##-- sele