A big +1 for interface or base class,I think a base class would be fine. 

@Justin, asfaik , DB2 does not allow underlines in table names. I am not a 
friend of such default assumptions. 

@Andrea, look at http://jira.codehaus.org/browse/GEOT-2015, it would be a 
good idea to have an additional method 

String getSequenceNameForPrimaryKey(String schema, String table, Connection 
cx); 

I really would like to have the possibility of a db specific implementation. 
Users with special requirements should be able to add their own. 

Until now, I have not checked how DB2 behaves in case of updatable views. 
Another reason for a big +1 for a class/interface. 

 


Justin Deoliveira writes: 

> 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
> Geotools-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/geotools-devel
 


------------------------------------------------------------------------------
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
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to