Mojolicious-Plugin-DBViewer

 view release on metacpan or  search on metacpan

lib/Mojolicious/Plugin/DBViewer/templates/dbviewer/auto/select.html.ep  view on Meta::CPAN

    '>',,
    '>=',
    'is null',
    'is not null',
    'is space',
    'is not space'
  ];
  my $rule = [
    database => {default => ''} => [
      'safety_name'
    ],
    table => {default => ''} => [
      'safety_name'
    ],
    c1 => [
      'safety_name || blank'
    ],
    c2 => [
      'safety_name || blank'
    ],
    c3 => [
      'safety_name || blank'
    ],
    v1 => [
      'not_blank'
    ],
    v2 => [
      'not_blank'
    ],
    v3 => [
      'not_blank'
    ],
    op1 => [
      {in_array => $ops}
    ],
    op2 => [
      {in_array => $ops}
    ],
    op3 => [
      {in_array => $ops}
    ],
    sk1 => [
      'safety_name'
    ],
    sk2 => [
      'safety_name'
    ],
    so1 => [
      'any'
    ],
    so2 => [
      'any'
    ],
    u => {default => 'and'} => [
      {in_array => ['and', 'or']}
    ],
    j => [
      'any'
    ]
  ];
  my $vresult = $dbviewer->validator->validate($params, $rule);
  my $vparams = $vresult->data;
  my $database = $vparams->{database};
  my $table = $vparams->{table};
  my $join_mode = $vparams->{j};
  
  # Paramters

  # DBI
  my $dbi = $dbviewer->dbi;
  
  my $union = $vparams->{u};
  my $charset = stash('charset');
  my $where = $dbi->where;

  my $merged_param = {};
  my @clauses;
  
  for my $num (1 .. 3) {
    my $column = $vparams->{"c$num"};
    my $op = $vparams->{"op$num"};
    my $value = $vparams->{"v$num"};

    my $db_op;
    my $param;
    my $clause;

    if (defined $column && $column ne '' && defined $op && $op ne '') {

      my $db_value;

      if ($op eq 'contains') {
        $db_value = "%$value%";
        $db_value = Encode::encode($charset, $db_value);
        $clause = ":${column}{like}";
        $param = {$column => $db_value};
      }
      elsif ($op eq 'in') {
        my $values = $value;
        $values =~ s/^ +//;
        $values =~ s/ +$//;
        my @values = split / +/, $values;
        for my $value (@values) {
          $value = Encode::encode($charset, $value);
        }
        $clause = "$column in (" . join(',', (":$column") x @values) . ")";
        $param = {$column => \@values};
      }
      elsif ($op eq 'is null' || $op eq 'is not null') {
        $clause = "$column $op";
        $param = {};
      }
      elsif ($op eq 'is space' || $op eq 'is not space') {
        $db_op = $op eq 'is space' ? '=' : '<>';
        $clause = "$column $db_op ''";
        $param = {};
      }
      else {
        $db_op = $op;
        $db_value = $value;
        $clause = ":${column}{$db_op}";



( run in 0.749 second using v1.01-cache-2.11-cpan-437f7b0c052 )