jmoiron/modl — pull request #29 by sqs (2014-11-14 22:06:22+00:00)
Title: Use existing nonzero values in autoincr fields instead of overwriting with new autoincr value

Previously, if a field mapped to an auto-incremented column, its value
was thrown away during inserts and was replaced by the
auto-incremented value reported by the database. This commit changes
that behavior. Now, if the field value is nonzero, the existing value
is inserted into the database and the auto-incrementing sequence is
not used. If the field value is 0, the previous behavior still
applies.

This breaks code that expects modl to overwrite nonzero autoincr
fields with the next value from the auto-incrementing sequence.

Motivation: When writing tests for code that uses modl, it's nice to be able to insert rows with a known ID, as opposed to having to insert it and then read it back to see the ID. Also, if you need to insert something with a known ID in your application, you need to use raw SQL (or create a new DbMap without the key's autoincr prop set) because there is currently no way to do so in modl.

Issues/questions for @jmoiron:

* Is query plan caching thread-safe? I don't see any explicit locks. I can see how the choice of types and values makes it possibly thread-safe, but that's based on my fuzzy mental model of Go internal data structure semantics.
* As the commit message and this PR notes, this could break existing code.