DBIx-TextIndex
view release on metacpan or search on metacpan
lib/DBIx/TextIndex/DBD.pm view on Meta::CPAN
return $doc_keys;
}
sub delete_doc_key_doc_ids {
my $self = shift;
my $doc_ids = shift;
my $placeholders = join(',', (('?') x ($#$doc_ids +1)));
my $sql = <<END;
DELETE FROM $self->{DOC_KEY_TABLE}
WHERE doc_id in ($placeholders)
END
$self->{INDEX_DBH}->do($sql, undef, @$doc_ids);
}
sub insert_doc_key {
my $self = shift;
my $doc_key = shift;
my $sql = <<END;
INSERT INTO $self->{DOC_KEY_TABLE} (doc_key) VALUES (?)
END
$self->{INDEX_DBH}->do($sql, undef, $doc_key);
my $doc_id = $self->{INDEX_DBH}->last_insert_id(undef, undef,
$self->{DOC_KEY_TABLE}, undef);
return $doc_id;
}
sub fetch_max_indexed_id {
my $self = shift;
return <<END;
SELECT max_indexed_id
FROM $self->{COLLECTION_TABLE}
WHERE collection = ?
END
}
sub fetch_collection_version {
my $self = shift;
return <<END;
SELECT MAX(version) FROM $self->{COLLECTION_TABLE}
END
}
sub collection_count {
my $self = shift;
return <<END;
SELECT COUNT(*) FROM $self->{COLLECTION_TABLE}
END
}
sub update_collection_info {
my $self = shift;
my $field = shift;
return <<END;
UPDATE $self->{COLLECTION_TABLE}
SET $field = ?
WHERE collection = ?
END
}
sub delete_collection_info {
my $self = shift;
return <<END;
DELETE FROM $self->{COLLECTION_TABLE}
WHERE collection = ?
END
}
sub store_collection_info {
my $self = shift;
my @collection_fields = @{$self->{COLLECTION_FIELDS}};
my $collection_fields = join ', ', @collection_fields;
my $place_holders = join ', ', (('?') x ($#collection_fields + 1));
return <<END;
INSERT INTO $self->{COLLECTION_TABLE}
($collection_fields)
VALUES
($place_holders)
END
}
sub fetch_collection_info {
my $self = shift;
my $collection_fields = join ', ', @{$self->{COLLECTION_FIELDS}};
return <<END;
SELECT
$collection_fields
FROM $self->{COLLECTION_TABLE}
WHERE collection = ?
END
}
sub fetch_all_collection_rows {
my $self = shift;
return <<END;
SELECT * FROM $self->{COLLECTION_TABLE}
END
}
sub phrase_scan_cz {
my $self = shift;
my $result_docs = shift;
my $fno = shift;
return <<END;
SELECT $self->{DOC_ID_FIELD}, $self->{DOC_FIELDS}->[$fno]
FROM $self->{DOC_TABLE}
WHERE $self->{DOC_ID_FIELD} IN ($result_docs)
END
}
sub phrase_scan {
my $self = shift;
my $result_docs = shift;
my $fno = shift;
return <<END;
SELECT $self->{DOC_ID_FIELD}
FROM $self->{DOC_TABLE}
WHERE $self->{DOC_ID_FIELD} IN ($result_docs)
AND $self->{DOC_FIELDS}->[$fno] LIKE ?
END
}
sub fetch_docweights {
my $self = shift;
my $fields = shift;
return <<END;
SELECT field_no, avg_docweight, docweights
FROM $self->{DOCWEIGHTS_TABLE}
WHERE field_no in ($fields)
END
}
sub fetch_all_docs_vector {
my $self = shift;
return <<END;
SELECT all_docs_vector
FROM $self->{ALL_DOCS_VECTOR_TABLE}
END
}
sub update_all_docs_vector {
my $self = shift;
return <<END;
REPLACE INTO $self->{ALL_DOCS_VECTOR_TABLE}
(id, all_docs_vector)
VALUES (1, ?)
END
}
sub fetch_mask {
my $self = shift;
return <<END;
SELECT docs_vector
FROM $self->{MASK_TABLE}
WHERE mask = ?
END
}
sub fetch_term_pos {
my $self = shift;
my $table = shift;
return <<END;
SELECT term_pos
FROM $table
WHERE term = ?
END
}
sub fetch_term_docs {
my $self = shift;
my $table = shift;
return <<END;
SELECT term_docs
FROM $table
WHERE term = ?
END
}
sub fetch_term_freq_and_docs {
my $self = shift;
my $table = shift;
return <<END;
select docfreq_t, term_docs
from $table
where term = ?
END
}
sub fetch_terms {
my $self = shift;
my $table = shift;
return <<END;
SELECT term
FROM $table
WHERE term LIKE ?
END
}
sub ping_doc {
my $self = shift;
return <<END;
SELECT 1
FROM $self->{DOC_TABLE}
WHERE $self->{DOC_ID_FIELD} = ?
END
}
sub fetch_doc {
my $self = shift;
my $field = shift;
return <<END;
SELECT $field
FROM $self->{DOC_TABLE}
WHERE $self->{DOC_ID_FIELD} = ?
END
}
sub fetch_doc_all_fields {
my $self = shift;
my $fields = join(', ', @{$self->{DOC_FIELDS}});
return <<END;
SELECT $fields
FROM $self->{DOC_TABLE}
WHERE $self->{DOC_ID_FIELD} = ?
END
}
sub update_docweights {
my $self = shift;
return <<END;
REPLACE INTO $self->{DOCWEIGHTS_TABLE} (field_no, avg_docweight, docweights)
VALUES (?, ?, ?)
END
}
sub update_docweights_execute {
my $self = shift;
my ($sth, $fno, $avg_w_d, $packed_w_d) = @_;
$sth->execute($fno, $avg_w_d, $packed_w_d);
}
sub inverted_replace {
my $self = shift;
my $table = shift;
return <<END;
REPLACE INTO $table
(term, docfreq_t, term_docs, term_pos)
VALUES (?, ?, ?, ?)
END
}
sub fetch_delete_queue {
my $self = shift;
my ($delete_queue) = $self->{INDEX_DBH}->selectrow_array(<<END, undef, 1);
SELECT delete_queue
FROM $self->{DELETE_QUEUE_TABLE}
WHERE ID = ?
END
return $delete_queue ? $delete_queue : undef;
}
sub update_delete_queue {
my $self = shift;
my $delete_queue = shift;
$self->{INDEX_DBH}->do(<<END, undef, $delete_queue, 1);
REPLACE INTO $self->{DELETE_QUEUE_TABLE} (delete_queue, id)
VALUES (?, ?)
END
}
sub inverted_replace_execute {
my $self = shift;
my ($sth, $term, $docfreq_t, $term_docs, $term_pos) = @_;
$sth->execute(
$term,
$docfreq_t,
$term_docs,
$term_pos,
) or warn $self->{INDEX_DBH}->err;
}
sub inverted_select {
my $self = shift;
my $table = shift;
return <<END;
SELECT docfreq_t, term_docs, term_pos
FROM $table
WHERE term = ?
END
}
sub total_terms {
my $self = shift;
my $table = shift;
return <<END;
SELECT SUM(docfreq_t)
FROM $table
END
}
sub create_mask_table {
my $self = shift;
return <<END;
CREATE TABLE $self->{MASK_TABLE} (
mask varchar(100) NOT NULL,
docs_vector mediumblob NOT NULL,
primary key mask_key (mask)
)
END
}
sub create_docweights_table {
my $self = shift;
( run in 1.969 second using v1.01-cache-2.11-cpan-39bf76dae61 )