]> iEval git - gruntmaster-data.git/blobdiff - redis-to-postgres
From Redis to Postgres - Part 1
[gruntmaster-data.git] / redis-to-postgres
diff --git a/redis-to-postgres b/redis-to-postgres
new file mode 100755 (executable)
index 0000000..5ed1575
--- /dev/null
@@ -0,0 +1,102 @@
+#!/usr/bin/perl -w
+use v5.14;
+use Gruntmaster::Data;
+use Gruntmaster::OldData;
+
+use JSON qw/encode_json/;
+
+my $db = Gruntmaster::Data->connect('dbi:Pg:');
+
+for (users) {
+       $db->users->create({
+               id => $_,
+               name => user_name,
+               email => user_email,
+               town => user_town,
+               university => user_university,
+               level => user_level,
+               user_lastjob() ? (lastjob => user_lastjob) : ()
+       })
+}
+
+my @jobs;
+
+for (problems) {
+       my $meta = problem_meta;
+       $db->problems->create({
+               id => $_,
+               author => problem_author,
+               generator => problem_generator() // $meta->{generator},
+               judge => problem_judge() // $meta->{judge},
+               level => problem_level,
+               name => problem_name,
+               olimit => problem_olimit() // $meta->{olimit},
+               owner => problem_owner,
+               private => (problem_private() ? 1 : 0),
+               runner => problem_runner() // $meta->{runner},
+               statement => problem_statement,
+               testcnt => problem_testcnt() // $meta->{testcnt},
+               timeout => problem_timeout() // $meta->{timeout},
+               exists $meta->{files} ? (versource => $meta->{files}{ver}{content}, verformat => $meta->{files}{ver}{format}) : ()
+       })
+}
+
+for (contests) {
+       $db->contests->create({
+               id => $_,
+               name => contest_name,
+               start => contest_start,
+               stop => contest_end,
+               owner => contest_owner,
+       });
+       local $Gruntmaster::OldData::contest = $_;
+       for (problems) {
+               $db->contest_problems->create({
+                       contest => $Gruntmaster::OldData::contest,
+                       problem => $_,
+               });
+       }
+       for (1 .. jobcard) {
+               eval {
+                       my $meta = job_inmeta;
+                       push @jobs, {
+                               contest   => $Gruntmaster::OldData::contest,
+                               daemon    => job_daemon,
+                               date      => job_date,
+                               defined job_errors() ? (errors  => job_errors) : (),
+                               extension => job_extension,
+                               format    => $meta->{files}{prog}{format},
+                               job_private() ? (private => job_private) : (),
+                               problem => job_problem,
+                               result => job_result,
+                               result_text => job_result_text,
+                               results => encode_json job_results,
+                               source => $meta->{files}{prog}{content},
+                               owner  => job_user,
+                       };
+               }
+       }
+}
+
+for (1 .. jobcard) {
+       eval{
+               my $meta = job_inmeta;
+               push @jobs, {
+                       daemon    => job_daemon,
+                       date      => job_date,
+                       defined job_errors() ? (errors  => job_errors) : (),
+                       extension => job_extension,
+                       format    => $meta->{files}{prog}{format},
+                       job_private() ? (private => job_private) : (),
+                       problem => job_problem,
+                       result => job_result,
+                       result_text => job_result_text,
+                       results => encode_json job_results,
+                       source => $meta->{files}{prog}{content},
+                       owner  => job_user,
+               };
+       }
+}
+
+@jobs = map { $_->{owner} = $_->{owner} eq 'S7012MY' ? 'Petru' : $_->{owner}; $_} @jobs;
+$db->jobs->create($_) for sort {$a->{date} <=> $b->{date}} @jobs;
This page took 0.022659 seconds and 4 git commands to generate.