This file is indexed.

/usr/share/perl5/DBIx/FullTextSearch/Table.pm is in libdbix-fulltextsearch-perl 0.73-10.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package DBIx::FullTextSearch::TableString;
use vars qw! @ISA !;
@ISA = qw! DBIx::FullTextSearch::String DBIx::FullTextSearch::Table !;

sub index_document {
	my ($self, $id, $data) = @_;
	my @data_sets = $self->get_the_data_from_table($id);
	push @data_sets, $data if $data;
	$self->SUPER::index_document($id, \@data_sets);
}

package DBIx::FullTextSearch::TableNum;
use vars qw! @ISA !;
@ISA = qw! DBIx::FullTextSearch::Table !;

sub index_document {
	my ($self, $id, $extra_data) = @_;
	my @data_sets = $self->get_the_data_from_table($id);
	push @data_sets, $extra_data if $extra_data;
	$self->SUPER::index_document($id, \@data_sets);
}


package DBIx::FullTextSearch::Table;
use DBIx::FullTextSearch;
use strict;
use vars qw! @ISA !;
@ISA = qw! DBIx::FullTextSearch !;

sub _open_tables {
	my $self = shift;
	if (defined $self->{'doc_id_table'}) {
		eval 'use DBIx::FullTextSearch::String';
		bless $self, 'DBIx::FullTextSearch::TableString';
	}
	else {
		bless $self, 'DBIx::FullTextSearch::TableNum';
	}
}

# we do not create any new tables, we just check that the parameters are
# OK (the table and columns exist, etc.)
sub _create_tables {
	my $fts = shift;
	my ($table, $column, $id) = @{$fts}{ qw! table_name column_name
		column_id_name ! };
	if (not defined $table and $column =~ /\./) {
		($table, $column) = ($column =~ /^(.*)\.(.*)$/s);
	}
	my $id_type;

	if (not defined $table) {
		return "The parameter table_name has to be specified with the table frontend.";
	}
	if (not defined $column) {
		return "The parameter column_name has to be specified with the table frontend.";
	}
	my $dbh = $fts->{'dbh'};
	my $sth = $dbh->prepare("show columns from $table");
	$sth->{'PrintError'} = 0;
	$sth->{'RaiseError'} = 0;
	$sth->execute or return "The table `$table' doesn't exist.";

	my $info = $dbh->selectall_arrayref($sth,
			{ 'PrintError' => 0, 'RaiseError' => 0 });
	if (not defined $info) {
		return "The table `$table' doesn't exist.";
	}

# use Data::Dumper; print Dumper $info;

	if (not defined $id) {
		# search for column with primary key
		my $pri_num = 0;
		for my $i (0 .. $#$info) {
			if ($info->[$i][3] eq 'PRI') {
				$pri_num++;
				$id = $info->[$i][0];
				$id_type = $info->[$i][1];
			}
		}
		if ($pri_num > 1) {
			return 'The primary key has to be one-column.';
		}	
		if ($pri_num == 0) {
			return "No primary key found in the table `$table'.";
		}
	}
	else {
		# find '$id' column
		for my $i (0 .. $#$info) {
			if ($info->[$i][0] eq $id){
				$id_type = $info->[$i][1];
				last;
			}
		}
	}

	unless(defined $id_type){
		return "No key named '$id' found in the table '$table'";
	}

	my $testcol = $dbh->prepare("select $column from $table where 1 = 0");
	$testcol->execute or
		return "Column `$column' doesn't exist in table `$table'.";
	$testcol->finish;

	$fts->{'column_id_name'} = $id;

	my $errstr;

        if ($id_type =~ /([a-z]*int)/) {
                $fts->{'doc_id_bits'} = $DBIx::FullTextSearch::INT_TO_BITS{$1};
		bless $fts, 'DBIx::FullTextSearch::TableNum';
	}
	else {
		my ($length) = ($id_type =~ /^\w+\((\d+)\)$/);
		$fts->{'name_length'} = $1;
		eval 'use DBIx::FullTextSearch::String';
		bless $fts, 'DBIx::FullTextSearch::TableString';
		$errstr = $fts->DBIx::FullTextSearch::String::_create_tables($fts);
	}
### use Data::Dumper; print Dumper $fts;
	return $errstr;
}

sub get_the_data_from_table {
	my ($self, $id) = @_;
	my $dbh = $self->{'dbh'};
	my $get_data = ( defined $self->{'get_data_sth'}
		? $self->{'get_data_sth'}
		: $self->{'get_data_sth'} = $dbh->prepare("
			select $self->{'column_name'} from $self->{'table_name'}
			where $self->{'column_id_name'} = ?
			") );

	my @data_ary = $dbh->selectrow_array($get_data, {}, $id);
	return wantarray ? @data_ary : join(" ", @data_ary);
}

1;