I wonder if we really need an interface? Could we just roll support for
a primary key metadata table into the regular lookup chain? What sorts
of alternative strategies might be used?
Not against the idea, I like the design but like to avoid adding
abstractions unless its necessary. A few comments/suggestions:
* Make PrimaryKeyFinder an abstract class just to be safe. Not a strong
preference though.
* Make the default primary key metadata table named
"_geotools_pk_metadata".
Andrea Aime wrote:
> Hi,
> recently I've had a few requests to make primary key
> lookup more flexible in JDBC-NG datastores, and finally I've
> got someone that could be interested in sponsoring some
> improvements (provided they stay inside a small budget).
>
> The current code uses a set of heuristics to find out
> what a pk is and how it should be managed:
> - use the table metadata to find the pk columns
> - failing that, see if there is an unique index
> If no pk column is found, we assume the table is not
> writable and the fids are going to be randomly generated.
>
> Once the pk is determined, the heuristics to manage
> it are:
> - we try to see if the column is auto-incrementing
> - we try to see if the column is backed by a sequence
> - otherwise we assume the FeatureId to be inserted
> will drive the creation of the PK itself
>
> This is a bit un-flexible for a few reasons:
> - people might want to get stable fids out of views
> (for queriying them later)
> - in most databases the mapping between sequence
> and column cannot be determined easily
>
> What I'm proposing is that we roll out and interface
> for a primary key lookup strategy, and that we provide
> three default implementations of it:
> - one based on the current heuristics
> - one based on a lookup table I'm going to describe later
> - a composite one that we can use to chain in fallback
> multiple strategies
>
> The interface would be simple:
>
> interface PrimaryKeyFinder {
> PrimaryKey getPrimaryKey(String schema, String table, Connection cx);
> }
> (or shall we do an abstract class with no implementation to allow
> adding methods in the future? Can't foresee any atm).
>
> And JDBCDataStore would expose a getter and a setter for it.
>
> The table based implementation would be the first in
> the default chain, allowing admins to override the pk
> lookup. The table would look like:
> - schema: schema name
> - table: table name
> - column: column name
> - idx: column index if pk is multicolumn (nullable)
> - policy: pk assignment policy: "assigned", "sequence", "autogenerated"
> - sequence: full name of the sequence to be used to generate
> the next value, if any
>
> The JDBCFactory would expose an optional PK_METADATA_TABLE
> option that would name the table, with a default value of
> "pk_lookup_table"
>
> If anyone needs a different kind of lookup strategy based on
> some internal rules she could just implement her own strategy.
> This would be limited by the fact PrimaryKey is pure description
> with no logic, but I guess we can cross that bridge another time.
>
> How does this sound?
>
> Cheers
> Andrea
>
>
>
>
--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.
------------------------------------------------------------------------------
Join us December 9, 2009 for the Red Hat Virtual Experience,
a free event focused on virtualization and cloud computing.
Attend in-depth sessions from your desk. Your couch. Anywhere.
http://p.sf.net/sfu/redhat-sfdev2dev
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel