CGI-AppBuilder-TaskLoads
view release on metacpan or search on metacpan
TaskLoads.pm view on Meta::CPAN
sub ld_mdrstd {
my ($s, $q, $ar) = @_;
my $prg = 'TaskLoads::ld_mdrstd';
# 0. prepare parameters and check parameters
$s->echo_msg(" 0. running $prg...", 1);
my ($sid, $jid, $hid) = ();
$sid = $ar->{study_id} if exists $ar->{study_id}
&& ($ar->{study_id} || $ar->{study_id} == 0);
$jid = $ar->{job_id} if exists $ar->{job_id}
&& ($ar->{job_id} || $ar->{job_id} == 0);
$hid = $ar->{hjob_id} if exists $ar->{hjob_id}
&& ($ar->{hjob_id} || $ar->{hjob_id} == 0);
if ($sid != 0 && !$sid) {
$s->echo_msg("ERR: ($prg) Study ID is required.", 0); return;
}
my $ds = ($^O =~ /MSWin/i) ? '\\' : '/';
my $pid = $ar->{pid}; # parent id
my $sn = $ar->{sid}; # server id
my $ad = eval $s->set_param('all_dir', $ar); # all dir array
my $dir = $ad->{$sn}{mdr}; # mdr/map dir
# my $sqlout = $ad->{$sn}{sqlout}; # sql output dir
# my $odr = "$sqlout$ds$sn";
$s->echo_msg("INFO: ($prg) dir=$dir",1);
croak "ERR: ($prg) could not find dir - $dir." if ! -d $dir;
# 1. get cfg information
$s->echo_msg(" 1. get cfg info for study $sid...", 1);
my $rp = $s->get_ldrcfg($ar);
croak("ERR: ($prg) loader cfg is not defined.") if ! %$rp;
croak("ERR: ($prg) loader cfg is not defined for study id - $sid.")
if ! exists $rp->{$sid};
my $vrs = 'dn_tab,vn_tab,sl_col,fk_col,fk_var,dn_key,vn_key';
for my $k (split /,/, $vrs) {
croak "ERR: ($prg) missing variable $k." if ! exists $rp->{$sid}{var}{$k};
}
my $rdr = join $ds, $dir, $rp->{$sid}{rdr};
my $mfn = $rp->{$sid}{mfn};
$mfn = ($mfn) ? (join $ds,$rdr,$mfn) : '';
my $dfn = ($mfn) ? $rp->{$sid}{dfn} : (join $ds, $rdr,$rp->{$sid}{dfn});
my $vfn = ($mfn) ? $rp->{$sid}{vfn} : (join $ds, $rdr,$rp->{$sid}{vfn});
my $sdr = strftime "%Y$ds%m$ds%d", localtime;
my $ofd = join $ds, $dir, $rp->{$sid}{ofd}, $sdr;
my $dml_type = $rp->{$sid}{dml};
$dml_type = ($dml_type) ? $dml_type : 'A';
if (!-d $rdr) {
croak "ERR: ($prg) could not find - $rdr<br>\n";
}
if (!-d $ofd) {
$s->echo_msg("INFO: ($prg) make dir - $ofd.", 2);
eval { mkpath($ofd,0,0777) };
# mkdir $ofd;
croak "ERR: ($prg) could not mkdir - $ofd: $!: $@<br>\n" if ($@);
system("chmod -R ugo+w $ofd") if ($^O !~ /^MSWin/i); # non window
}
if ($mfn && ! -f $mfn) {
croak "ERR: ($prg) could not find mfn file - $mfn";
}
$s->echo_msg("INFO: ($prg) RDR=$rdr",1);
$s->echo_msg("INFO: ($prg) OFD=$ofd",1);
$s->echo_msg("INFO: ($prg) MFN=$mfn",1);
# 2. read the XLS file
$s->echo_msg(" 2. read configuration files...", 1);
my ($dr, $vr) = ();
if ($mfn) {
my $n1 = $rp->{$sid}{dfn};
my $n2 = $rp->{$sid}{vfn};
$s->echo_msg("INFO: MFN - $mfn ($n1,$n2).", 1);
$dr = $s->read_xls($mfn, $n1);
$vr = $s->read_xls($mfn, $n2);
} else {
$s->echo_msg("INFO: DFN - $dfn.", 1);
$dr = $s->read_cfg_file($dfn,'A',',');
$s->echo_msg("INFO: vFN - $vfn.", 1);
$vr = $s->read_cfg_file($vfn,'A',',');
}
# $s->disp_param($dr);
# $s->disp_param($vr);
$s->echo_msg("INFO: ($prg) no of records for domain: $#$dr", 1);
$s->echo_msg("INFO: ($prg) no of records for variable: $#$vr", 1);
$s->echo_msg($dr, 5);
$s->echo_msg($vr, 5);
# 3. build SQL statement for cc_domains
$s->echo_msg(" 3. build sql statement for cc_domains...", 1);
my $sql = []; # sql array
my $rf = {}; # ref for ldr parameter
$rf->{tbn} = $rp->{$sid}{var}{dn_tab};
$rf->{kcn} = $rp->{$sid}{var}{dn_key};
$rf->{scn} = $rp->{$sid}{var}{sl_col};
$rf->{scv} = $sid;
$rf->{act} = $rp->{$sid}{dml};
$rf->{dn_fmt} = '';
$rf->{del_ctb} = '';
$rf->{del_ptb} = '';
if ($rf->{act} =~ /^D/i) {
# delete child table first
my $ptb = $rp->{$sid}{var}{dn_tab};
my $ctb = $rp->{$sid}{var}{vn_tab};
my $fkc = $rp->{$sid}{var}{fk_col};
my $fkn = $rp->{$sid}{var}{fk_var};
my $scn = $rp->{$sid}{var}{sl_col};
my $t = "PROMPT Deleting $ctb with $scn = $sid...\n";
$t .= "DELETE $ctb WHERE $fkc IN (\n";
$t .= " SELECT $fkc FROM $ptb WHERE $scn = $sid);\n";
$t .= "commit;\n\n";
$rf->{del_ctb} = $t;
( run in 1.016 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )