NAME

Algorithm::SpatialIndex::Storage::DBI - DBI storage backend

SYNOPSIS

use Algorithm::SpatialIndex;
my $dbh = ...;
my $idx = Algorithm::SpatialIndex->new(
  storage      => 'DBI',
  dbh_rw       => $dbh,
  dbh_ro       => $dbh, # defaults to dbh_rw
  table_prefix => 'si_',
);

DESCRIPTION

WARNING: WHILE IT SEEMS TO WORK FOR ME, THIS STORAGE BACKEND IS HIGHLY EXPERIMENTAL AND IN A PROOF-OF-CONCEPT STATE. Unsurprisingly, it is also 20x slower when using SQLite as the storage engine then when using the memory storage backend. Has only been tested with SQLite but has mysql-specific and SQLite specific code paths as well as a general SQL code path which is less careful about race conditions.

Inherits from Algorithm::SpatialIndex::Storage.

This storage backend is persistent.

No implementation of schema migration yet, so expect to have to reinitialize the index after a module upgrade!

ACCESSORS

table_prefix

Returns the prefix of the table names.

coord_types

Returns an array reference containing the coordinate type strings.

item_coord_types

Returns an array reference containing the item coordinate type strings.

node_coord_create_sql

Returns the precomputed SQL fragment of the node coordinate columns (CREATE TABLE syntax).

no_of_subnodes

Returns the no. of subnodes per node.

subnodes_create_sql

Returns the precomputed SQL fragment of the subnode id columns (CREATE TABLE syntax).

config

Returns the hash reference of configuration options read from the config table.

dbh_rw

Returns the read/write database handle.

dbh_ro

Returns the read-only database handle. Falls back to the read/write handle if not defined.

OTHER METHODS

init

Reads the options from the database for previously existing indexes. Creates tables and writes default configuration for those that didn't exist before.

Doesn't do any schema migration at this point.

_read_config_table

Reads the configuration table. Returns whether this succeeded or not. In case of failure, this initializes some of the configuration options from other sources.

_init_tables

Creates the index's tables.

_write_config

Writes the index's configuration to the configuration table.

_coord_types_to_sql

Given an array ref containing coordinate type strings (cf. Algorithm::SpatialIndex::Strategy), stores the SQL fragments for SELECT and CREATE TABLE for the node coordinates.

The coordinates will be called c$i where $i starts at 0.

_subnodes_sql

Given the number of subnodes per node, creates a string of column specifications for interpolation into a CREATE TABLE and one for interpolation into a SELECT. Saves those strings into the object.

The columns are named sn$i with $i starting at 0.

AUTHOR

Steffen Mueller, <smueller@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2010, 2011 by Steffen Mueller

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.1 or, at your option, any later version of Perl 5 you may have available.