@@ -476,137 +476,133 @@ sub search {
476
476
$search_query -> {' me.is_obsolete' } = ' f' ;
477
477
}
478
478
479
- my $skip_next = 0;
480
479
if ( scalar (@stockprop_filtered_stock_ids )>0){
481
480
$search_query -> {' me.stock_id' } = {' in' => \@stockprop_filtered_stock_ids };
482
- } elsif ($self -> stockprops_values && scalar (keys %{$self -> stockprops_values})>0 && scalar (@stockprop_filtered_stock_ids )<1){
483
- # skip since stockprop value privided and not found
484
- $skip_next = 1;
485
481
}
486
482
487
483
# skip rest of query if no results
488
484
my @result ;
489
485
my $records_total = 0;
490
- if ($skip_next < 1){
491
- my $rs = $schema -> resultset(" Stock::Stock" )-> search(
492
- $search_query ,
493
- {
494
- join => [' type' , ' organism' , ' stockprops' , $stock_join ],
495
- ' +select' => [ ' type.name' , ' organism.species' , ' organism.common_name' , ' organism.genus' ],
496
- ' +as' => [ ' cvterm_name' , ' species' , ' common_name' , ' genus' ],
497
- order_by => ' me.name' ,
498
- distinct => 1
499
- });
500
486
501
- $records_total = $rs -> count();
502
- if (defined ($limit ) && defined ($offset )){
503
- $rs = $rs -> slice($offset , $limit );
504
- }
487
+ my $rs = $schema -> resultset(" Stock::Stock" )-> search(
488
+ $search_query ,
489
+ {
490
+ join => [' type' , ' organism' , ' stockprops' , $stock_join ],
491
+ ' +select' => [ ' type.name' , ' organism.species' , ' organism.common_name' , ' organism.genus' ],
492
+ ' +as' => [ ' cvterm_name' , ' species' , ' common_name' , ' genus' ],
493
+ order_by => ' me.name' ,
494
+ distinct => 1
495
+ });
496
+
497
+ $records_total = $rs -> count();
498
+ if (defined ($limit ) && defined ($offset )){
499
+ $rs = $rs -> slice($offset , $limit );
500
+ }
501
+
502
+ my $owners_hash ;
503
+ if (!$self -> minimal_info){
504
+ my $stock_lookup = CXGN::Stock::StockLookup-> new({ schema => $schema } );
505
+ $owners_hash = $stock_lookup -> get_owner_hash_lookup();
506
+ }
507
+
508
+
509
+ my %result_hash ;
510
+ my @result_stock_ids ;
511
+ while (my $a = $rs -> next()) {
512
+ my $uniquename = $a -> uniquename;
513
+ my $stock_id = $a -> stock_id;
514
+ push @result_stock_ids , $stock_id ;
505
515
506
- my $owners_hash ;
507
516
if (!$self -> minimal_info){
508
- my $stock_lookup = CXGN::Stock::StockLookup-> new({ schema => $schema } );
509
- $owners_hash = $stock_lookup -> get_owner_hash_lookup();
517
+ # my $stock_object = CXGN::Stock::Accession->new({schema=>$self->bcs_schema, stock_id=>$stock_id});
518
+ my @owners = $owners_hash -> {$stock_id } ? @{$owners_hash -> {$stock_id }} : ();
519
+ my $type_id = $a -> type_id ;
520
+ my $type = $a -> get_column(' cvterm_name' );
521
+ my $organism_id = $a -> organism_id;
522
+ my $species = $a -> get_column(' species' );
523
+ my $stock_name = $a -> name;
524
+ my $common_name = $a -> get_column(' common_name' );
525
+ my $genus = $a -> get_column(' genus' );
526
+
527
+ $result_hash {$stock_id } = {
528
+ stock_id => $stock_id ,
529
+ uniquename => $uniquename ,
530
+ stock_name => $stock_name ,
531
+ stock_type => $type ,
532
+ stock_type_id => $type_id ,
533
+ species => $species ,
534
+ genus => $genus ,
535
+ common_name => $common_name ,
536
+ organism_id => $organism_id ,
537
+ owners => \@owners ,
538
+ };
539
+ } else {
540
+ $result_hash {$stock_id } = {
541
+ stock_id => $stock_id ,
542
+ uniquename => $uniquename
543
+ };
510
544
}
545
+ }
511
546
512
-
513
- my %result_hash ;
514
- my @result_stock_ids ;
515
- while (my $a = $rs -> next()) {
516
- my $uniquename = $a -> uniquename;
517
- my $stock_id = $a -> stock_id;
518
- push @result_stock_ids , $stock_id ;
519
-
520
- if (!$self -> minimal_info){
521
- # my $stock_object = CXGN::Stock::Accession->new({schema=>$self->bcs_schema, stock_id=>$stock_id});
522
- my @owners = $owners_hash -> {$stock_id } ? @{$owners_hash -> {$stock_id }} : ();
523
- my $type_id = $a -> type_id ;
524
- my $type = $a -> get_column(' cvterm_name' );
525
- my $organism_id = $a -> organism_id;
526
- my $species = $a -> get_column(' species' );
527
- my $stock_name = $a -> name;
528
- my $common_name = $a -> get_column(' common_name' );
529
- my $genus = $a -> get_column(' genus' );
530
-
531
- $result_hash {$stock_id } = {
532
- stock_id => $stock_id ,
533
- uniquename => $uniquename ,
534
- stock_name => $stock_name ,
535
- stock_type => $type ,
536
- stock_type_id => $type_id ,
537
- species => $species ,
538
- genus => $genus ,
539
- common_name => $common_name ,
540
- organism_id => $organism_id ,
541
- owners => \@owners ,
542
- };
543
- } else {
544
- $result_hash {$stock_id } = {
545
- stock_id => $stock_id ,
546
- uniquename => $uniquename
547
- };
548
- }
549
- }
547
+ # Comma separated list of query placeholders for the result stock ids
548
+ my $id_ph = scalar (@result_stock_ids ) > 0 ? join " ," , (" ?" ) x @result_stock_ids : " NULL" ;
549
+
550
+ # Get additional stock properties (pedigree, synonyms, donor info)
551
+ my $stock_query = " SELECT stock_id, uniquename, organism_id, stock_synonym
552
+ FROM materialized_stockprop
553
+ WHERE stock_id IN ($id_ph );" ;
554
+ my $sth = $schema -> storage()-> dbh()-> prepare($stock_query );
555
+ $sth -> execute(@result_stock_ids );
556
+
557
+ # Add additional organism and stock properties to the result hash for each stock
558
+ while (my @r = $sth -> fetchrow_array()) {
559
+ my $stock_id = $r [0];
560
+ my $organism_id = $r [2];
561
+ my $syn_json = $r [3] ? decode_json(encode(" utf8" ,$r [3])) : {};
562
+ my @synonyms = sort keys %{$syn_json };
563
+
564
+ # add stock props to the result hash
565
+ $result_hash {$stock_id }{synonyms } = \@synonyms ;
566
+ }
550
567
551
- # Comma separated list of query placeholders for the result stock ids
552
- my $id_ph = scalar (@result_stock_ids ) > 0 ? join " ," , (" ?" ) x @result_stock_ids : " NULL" ;
553
-
554
- # Get additional stock properties (pedigree, synonyms, donor info)
555
- my $stock_query = " SELECT stock_id, uniquename, organism_id, stock_synonym
556
- FROM materialized_stockprop
557
- WHERE stock_id IN ($id_ph );" ;
558
- my $sth = $schema -> storage()-> dbh()-> prepare($stock_query );
559
- $sth -> execute(@result_stock_ids );
560
-
561
- # Add additional organism and stock properties to the result hash for each stock
562
- while (my @r = $sth -> fetchrow_array()) {
563
- my $stock_id = $r [0];
564
- my $organism_id = $r [2];
565
- my $syn_json = $r [3] ? decode_json(encode(" utf8" ,$r [3])) : {};
566
- my @synonyms = sort keys %{$syn_json };
567
-
568
- # add stock props to the result hash
569
- $result_hash {$stock_id }{synonyms } = \@synonyms ;
570
- }
568
+ if ($self -> stockprop_columns_view && scalar (keys %{$self -> stockprop_columns_view})>0 && scalar (@result_stock_ids )>0){
569
+ my @stockprop_view = keys %{$self -> stockprop_columns_view};
570
+ my $result_stock_ids_sql = join " ," , @result_stock_ids ;
571
+ my $stockprop_where = " WHERE stock_id IN ($result_stock_ids_sql )" ;
572
+
573
+ $self -> _refresh_materialized_stockprop(\@stockprop_view );
571
574
572
- if ($self -> stockprop_columns_view && scalar (keys %{$self -> stockprop_columns_view})>0 && scalar (@result_stock_ids )>0){
573
- my @stockprop_view = keys %{$self -> stockprop_columns_view};
574
- my $result_stock_ids_sql = join " ," , @result_stock_ids ;
575
- my $stockprop_where = " WHERE stock_id IN ($result_stock_ids_sql )" ;
576
-
577
- $self -> _refresh_materialized_stockprop(\@stockprop_view );
578
-
579
- my $stockprop_select_sql .= ' , "' . join (' ","' , @stockprop_view ) . ' "' ;
580
- my $stockprop_query = " SELECT stock_id $stockprop_select_sql FROM materialized_stockprop $stockprop_where ;" ;
581
- my $h = $schema -> storage-> dbh()-> prepare($stockprop_query );
582
- $h -> execute();
583
- while (my ($stock_id , @stockprop_select_return ) = $h -> fetchrow_array()) {
584
- for my $s (0 .. scalar (@stockprop_view )-1){
585
- # my $stockprop_vals = $stockprop_select_return[$s] ? decode_json $stockprop_select_return[$s] : {};
586
- my $stockprop_vals = $stockprop_select_return [$s ] ? decode_json(encode(" utf8" ,$stockprop_select_return [$s ])) : {};
587
- my @stockprop_vals_string ;
588
- foreach (sort { $stockprop_vals -> {$a } cmp $stockprop_vals -> {$b } } (keys %$stockprop_vals ) ){
589
- push @stockprop_vals_string , $_ ;
590
- }
591
- my $stockprop_vals_string = join ' ,' , @stockprop_vals_string ;
592
- $result_hash {$stock_id }-> {$stockprop_view [$s ]} = $stockprop_vals_string ;
575
+ my $stockprop_select_sql .= ' , "' . join (' ","' , @stockprop_view ) . ' "' ;
576
+ my $stockprop_query = " SELECT stock_id $stockprop_select_sql FROM materialized_stockprop $stockprop_where ;" ;
577
+ my $h = $schema -> storage-> dbh()-> prepare($stockprop_query );
578
+ $h -> execute();
579
+ while (my ($stock_id , @stockprop_select_return ) = $h -> fetchrow_array()) {
580
+ for my $s (0 .. scalar (@stockprop_view )-1){
581
+ # my $stockprop_vals = $stockprop_select_return[$s] ? decode_json $stockprop_select_return[$s] : {};
582
+ my $stockprop_vals = $stockprop_select_return [$s ] ? decode_json(encode(" utf8" ,$stockprop_select_return [$s ])) : {};
583
+ my @stockprop_vals_string ;
584
+ foreach (sort { $stockprop_vals -> {$a } cmp $stockprop_vals -> {$b } } (keys %$stockprop_vals ) ){
585
+ push @stockprop_vals_string , $_ ;
593
586
}
587
+ my $stockprop_vals_string = join ' ,' , @stockprop_vals_string ;
588
+ $result_hash {$stock_id }-> {$stockprop_view [$s ]} = $stockprop_vals_string ;
594
589
}
590
+ }
595
591
596
- while (my ($uniquename , $info ) = each %result_hash ){
597
- foreach (@stockprop_view ){
598
- if (!$info -> {$_ }){
599
- $info -> {$_ } = ' ' ;
600
- }
592
+ while (my ($uniquename , $info ) = each %result_hash ){
593
+ foreach (@stockprop_view ){
594
+ if (!$info -> {$_ }){
595
+ $info -> {$_ } = ' ' ;
601
596
}
602
597
}
603
598
}
599
+ }
604
600
605
- foreach (sort keys %result_hash ){
606
- push @result , $result_hash {$_ };
607
- }
601
+ foreach (sort keys %result_hash ){
602
+ push @result , $result_hash {$_ };
608
603
}
609
604
605
+
610
606
print STDERR " CXGN::Stock::SearchVector search end\n " ;
611
607
return (\@result , $records_total );
612
608
}
0 commit comments