- Timestamp:
- 2018-11-05T20:51:24+13:00 (5 years ago)
- Location:
- main/trunk/greenstone2/perllib
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/perllib/docprint.pm
r32573 r32575 129 129 } 130 130 131 # used by GreenstoneSQLPlugin when reading back from sqldb 131 # Unescape variants are used by GreenstoneSQLPlugin when reading text back from SQL db 132 # Pass by ref version 133 sub unescape_textref { 134 my ($textref) = @_; 135 # special characters in the xml encoding 136 $$textref =~ s/& &/&&/g; 137 $$textref =~ s/&/&/g; # this has to be first... 138 $$textref =~ s/</</g; 139 $$textref =~ s/>/>/g; 140 $$textref =~ s/"/"/g; 141 142 return $textref; 143 } 144 145 # Pass by value version 132 146 sub unescape_text { 133 147 my ($text) = @_; 134 # special characters in the xml encoding 135 $text =~ s/& &/&&/g; 136 $text =~ s/&/&/g; # this has to be first... 137 $text =~ s/</</g; 138 $text =~ s/>/>/g; 139 $text =~ s/"/"/g; 140 141 return $text; 148 my $textref = &unescape_textref(\$text); 149 return $$textref; 142 150 } 143 151 -
main/trunk/greenstone2/perllib/gssql.pm
r32574 r32575 424 424 ## The 2 select statements used by GreenstoneSQLPlugin 425 425 426 #https://metacpan.org/pod/release/TIMB/DBI-1.634_50/DBI.pm#selectall_arrayref 426 # Using fetchall_arrayref on statement handle, to run on prepared and executed stmt 427 # https://metacpan.org/pod/release/TIMB/DBI-1.634_50/DBI.pm#fetchall_arrayref 428 # instead of selectall_arrayref on database handle which will prepare, execute and fetch 429 # https://metacpan.org/pod/release/TIMB/DBI-1.634_50/DBI.pm#selectall_arrayref 430 # 427 431 # Returns the statement handle that prepared and executed 428 432 # a "SELECT * FROM <COLL>_metadata WHERE did = $oid" SQL statement. … … 433 437 sub select_from_metatable_matching_docid { 434 438 my $self= shift (@_); 435 my ($oid ) = @_;436 437 my $dbh = $self->{'db_handle'}; 438 my $ meta_table = $self->get_metadata_table_name();439 440 my $sth = $dbh->prepare_cached(qq{SELECT * FROM $ meta_table WHERE did = ?});439 my ($oid, $outhandle) = @_; 440 441 my $dbh = $self->{'db_handle'}; 442 my $tablename = $self->get_metadata_table_name(); 443 444 my $sth = $dbh->prepare_cached(qq{SELECT * FROM $tablename WHERE did = ?}); 441 445 $sth->execute( $oid ); # will print msg on fail 442 443 return $sth; # caller can call fetchrow_array() on returned statement handle, sth 444 } 445 446 447 #https://metacpan.org/pod/release/TIMB/DBI-1.634_50/DBI.pm#selectall_arrayref 446 447 print $outhandle "### SQL select stmt: ".$sth->{'Statement'}."\n" 448 if ($self->{'verbosity'} > 2); 449 450 my $rows_ref = $sth->fetchall_arrayref(); 451 # "If an error occurs, fetchall_arrayref returns the data fetched thus far, which may be none. 452 # You should check $sth->err afterwards (or use the RaiseError attribute) to discover if the 453 # data is complete or was truncated due to an error." 454 # https://metacpan.org/pod/release/TIMB/DBI-1.634_50/DBI.pm#fetchall_arrayref 455 # https://www.oreilly.com/library/view/programming-the-perl/1565926994/ch04s05.html 456 warn("Data fetching from $tablename terminated early by error: " . $dbh->err) if $dbh->err; 457 return $rows_ref; 458 } 459 460 461 # See select_from_metatable_matching_docid() above. 448 462 # Returns the statement handle that prepared and executed 449 463 # a "SELECT * FROM <COLL>_metadata WHERE did = $oid" SQL statement. … … 451 465 sub select_from_texttable_matching_docid { 452 466 my $self= shift (@_); 453 my ($oid ) = @_;454 455 my $dbh = $self->{'db_handle'}; 456 my $ fulltxt_table = $self->get_fulltext_table_name();457 458 my $sth = $dbh->prepare_cached(qq{SELECT * FROM $ fulltxt_table WHERE did = ?});467 my ($oid, $outhandle) = @_; 468 469 my $dbh = $self->{'db_handle'}; 470 my $tablename = $self->get_fulltext_table_name(); 471 472 my $sth = $dbh->prepare_cached(qq{SELECT * FROM $tablename WHERE did = ?}); 459 473 $sth->execute( $oid ); # will print msg on fail 460 474 461 return $sth; # caller can call fetchrow_array() on returned statement handle, sth 475 print $outhandle "### SQL select stmt: ".$sth->{'Statement'}."\n" 476 if ($self->{'verbosity'} > 2); 477 478 my $rows_ref = $sth->fetchall_arrayref(); 479 # Need explicit warning: 480 warn("Data fetching from $tablename terminated early by error: " . $dbh->err) if $dbh->err; 481 return $rows_ref; 482 462 483 } 463 484 -
main/trunk/greenstone2/perllib/plugins/GreenstoneSQLPlugin.pm
r32571 r32575 308 308 # read in meta for the collection (i.e. select * from <col>_metadata table 309 309 310 my $sth = $gs_sql->select_from_metatable_matching_docid($oid); 311 print $outhandle "### SQL select stmt: ".$sth->{'Statement'}."\n" 312 if $self->{'verbosity'} > 2; 310 my $records = $gs_sql->select_from_metatable_matching_docid($oid, $outhandle); 313 311 314 312 print $outhandle "----------SQL DB contains meta-----------\n" if $self->{'verbosity'} > 2; 315 313 # https://www.effectiveperlprogramming.com/2010/07/set-custom-dbi-error-handlers/ 316 while( my @row = $sth->fetchrow_array() ) { 317 #print $outhandle "row: @row\n"; 318 my ($primary_key, $did, $sid, $metaname, $metaval) = @row; 314 315 foreach my $row (@$records) { 316 #print $outhandle "row: @$row\n"; 317 my ($primary_key, $did, $sid, $metaname, $metaval) = @$row; 319 318 320 319 # get rid of the artificial "root" introduced in section id when saving to sql db … … 337 336 338 337 339 my $ sth = $gs_sql->select_from_texttable_matching_docid($oid);340 print $outhandle "### stmt: ".$sth->{'Statement'}."\n" if $self->{'verbosity'} > 2;338 my $records = $gs_sql->select_from_texttable_matching_docid($oid, $outhandle); 339 341 340 342 341 print $outhandle "----------\nSQL DB contains txt entries for-----------\n" 343 342 if $self->{'verbosity'} > 2; 344 while( my ($primary_key, $did, $sid, $text) = $sth->fetchrow_array() ) { 343 344 foreach my $row (@$records) { 345 my ($primary_key, $did, $sid, $text) = @$row; 345 346 346 347 # get rid of the artificial "root" introduced in section id when saving to sql db … … 352 353 # TODO - pass by ref? 353 354 # TODO: we accessed the db in utf8 mode, so, we can call doc_obj->add_utf8_text directly: 354 $doc_obj->add_utf8_text($sid, &docprint::unescape_text($text)); 355 my $textref = &docprint::unescape_textref(\$text); 356 $doc_obj->add_utf8_text($sid, $$textref); 355 357 } 356 358 print $outhandle "----------FIN READING DOC's TXT FROM SQL DB------------\n"
Note:
See TracChangeset
for help on using the changeset viewer.