Revision 292

Date:
2013/03/23 13:45:29
Author:
ahitrov
Revision Log:
JSON serializer is default
Files:

Legend:

 
Added
 
Removed
 
Modified
  • utf8/core/services/dumper_2_json.pl

     
    1 #!/usr/bin/perl
    2
    3 use strict;
    4 use warnings "all";
    5 use locale;
    6
    7 use FindBin;
    8 BEGIN {
    9 require "$FindBin::RealBin/../lib/Modules.pm";
    10 }
    11
    12 use Contenido::Globals;
    13 use Contenido::Init;
    14 use ErrorTee;
    15 use PidFile;
    16 use Data::Dumper;
    17 use JSON::XS;
    18
    19 # begin
    20 Contenido::Init->init();
    21
    22 my $keeper_module = $state->project.'::Keeper';
    23 $keeper = $keeper_module->new($state);
    24
    25 #PidFile->new($keeper, compat=>1); # db-based locking (run only on one host)
    26 #PidFile->new($keeper, compat=>1, per_host=>1); # db-based locking (run on whole cluster)
    27
    28 ############################################
    29 # please use:
    30 # $state->{log_dir} for logging
    31 # $state->{tmp_dir} for temporary files
    32 ###########################################
    33 my $table = $ARGV[0] || 'sections';
    34 my $LIMIT = 10;
    35 my $OFFSET = 0;
    36 my $json = JSON::XS->new;
    37
    38 print "Alter table:\n";
    39 my $res = $keeper->SQL->do("alter table $table add column data__json text");
    40 print "Reading from $table...\n";
    41 my $i = 2;
    42 while ( $i ) {
    43 my $sql = $keeper->SQL->prepare("select id, data from $table order by id limit $LIMIT offset $OFFSET");
    44 my $res = $sql->execute;
    45 if ( $res ne '0E0' ) {
    46 while ( my $ln = $sql->fetchrow_hashref ) {
    47 next unless $ln->{data};
    48 my $VAR1; eval "$ln->{data}";
    49 my $STRUCT = $VAR1;
    50 print Dumper $STRUCT;
    51 if ( ref $STRUCT eq 'HASH' ) {
    52 while ( my ($field, $val) = each %$STRUCT ) {
    53 if ( $val && $val =~ /\$VAR1/ ) {
    54 my $VAL = eval "$val";
    55 if ( ref $VAL ) {
    56 print Dumper $VAL;
    57 $STRUCT->{$field} = $json->encode($VAL);
    58 }
    59 }
    60 }
    61 }
    62 my $DATA = Encode::decode('utf-8', $json->encode( $STRUCT ));
    63 my $store = $keeper->SQL->prepare("update $table set data__json = ? where id = ?");
    64 $store->execute( $DATA, $ln->{id} );
    65 }
    66 } else {
    67 print "Stop\n";
    68 last;
    69 }
    70 $OFFSET += $LIMIT;
    71 }
    72 print "Rename column [data] to [data__dumper]\n";
    73 $keeper->SQL->do("alter table $table rename COLUMN data TO data__dumper");
    74 print "Rename column [data__json] to [data]\n";
    75 $keeper->SQL->do("alter table $table rename COLUMN data__json TO data");
  • utf8/core/skel/project/config.mk.proto

     
    13 13 BASE_USER = @NAME@
    14 14 BASE_PASSWD =
    15 15
    16 SERIALIZE_WITH = json
    17
    16 18 # Custom Apache handler
    17 19 #DEFAULT_HANDLER = HTML::Mason::ApacheHandler
    18 20
  • utf8/core/skel/project/services/dumper_2_json.pl

     
    1 #!/usr/bin/perl
    2
    3 use strict;
    4 use warnings "all";
    5 use locale;
    6
    7 use FindBin;
    8 BEGIN {
    9 require "$FindBin::RealBin/../lib/Modules.pm";
    10 }
    11
    12 use Contenido::Globals;
    13 use Contenido::Init;
    14 use ErrorTee;
    15 use PidFile;
    16 use Data::Dumper;
    17 use JSON::XS;
    18
    19 # begin
    20 Contenido::Init->init();
    21
    22 my $keeper_module = $state->project.'::Keeper';
    23 $keeper = $keeper_module->new($state);
    24
    25 #PidFile->new($keeper, compat=>1); # db-based locking (run only on one host)
    26 #PidFile->new($keeper, compat=>1, per_host=>1); # db-based locking (run on whole cluster)
    27
    28 ############################################
    29 # please use:
    30 # $state->{log_dir} for logging
    31 # $state->{tmp_dir} for temporary files
    32 ###########################################
    33 my $table = $ARGV[0] || 'sections';
    34 my $LIMIT = 10;
    35 my $OFFSET = 0;
    36 my $json = JSON::XS->new;
    37
    38 print "Alter table:\n";
    39 my $res = $keeper->SQL->do("alter table $table add column data__json text");
    40 print "Reading from $table...\n";
    41 my $i = 2;
    42 while ( $i ) {
    43 my $sql = $keeper->SQL->prepare("select id, data from $table order by id limit $LIMIT offset $OFFSET");
    44 my $res = $sql->execute;
    45 if ( $res ne '0E0' ) {
    46 while ( my $ln = $sql->fetchrow_hashref ) {
    47 next unless $ln->{data};
    48 my $VAR1; eval "$ln->{data}";
    49 my $STRUCT = $VAR1;
    50 print Dumper $STRUCT;
    51 if ( ref $STRUCT eq 'HASH' ) {
    52 while ( my ($field, $val) = each %$STRUCT ) {
    53 if ( $val && $val =~ /\$VAR1/ ) {
    54 my $VAL = eval "$val";
    55 if ( ref $VAL ) {
    56 print Dumper $VAL;
    57 $STRUCT->{$field} = $json->encode($VAL);
    58 }
    59 }
    60 }
    61 }
    62 my $DATA = Encode::decode('utf-8', $json->encode( $STRUCT ));
    63 my $store = $keeper->SQL->prepare("update $table set data__json = ? where id = ?");
    64 $store->execute( $DATA, $ln->{id} );
    65 }
    66 } else {
    67 print "Stop\n";
    68 last;
    69 }
    70 $OFFSET += $LIMIT;
    71 }
    72 print "Rename column [data] to [data__dumper]\n";
    73 $keeper->SQL->do("alter table $table rename COLUMN data TO data__dumper");
    74 print "Rename column [data__json] to [data]\n";
    75 $keeper->SQL->do("alter table $table rename COLUMN data__json TO data");

Небольшая справка по веткам

cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.

koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.

utf8 – актуальная ветка, заточенная под UTF-8.

Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.