Re: Autoincrement support for Sqlite3

Victor <[email protected]> Wed, 16 Oct 2013 17:40:42 +0300
Newsgroups gmane.lisp.clsql.general
Message-ID <op.w41xp4ll4lizsz@vanyakin-nb>
Hi Russ,

Thanks for your advice. I was finally able to make autoincrement to work
to a degree when a very simple and basic test passes (from the gist)

The changes are here:

https://github.com/vityok/clsql/commit/4332610851d855ebc858f231f06cff81c675e5f2

Sample gist is here:

https://gist.github.com/vityok/6993172

I will submit a pull request to merge in these changes. Please modify
them to better fit the rest of the library.

Thanks,
Victor


On Tue, 15 Oct 2013 20:17:29 +0300, Russ Tyndall <[email protected]> wrote:

> Hello,
>
> I don't have time to pursue this work and don't have need of it
> personally (we define databases in the database then generate
> clsql-view-classes with clsql-orm).
>
> However, I will offer a few pieces of advice:
>   * The constraint name could be manipulated through some combination of
> database-constraint-statement, make-constraints-description (by
> investigating the backend of the current connection). (see
> sql/expressions.lisp)
>   * Almost every string written to the database goes through
> database-output-sql which can be specialized on databases of type
> sqlite3 and thus almost everything can be customized to output exactly
> what you need it to.
>   * create-view-from-class calls %install-class which in turn calls
> database-generate-column-definition for each column.  The result of this
> is passed to the create-table function that you already have working.
> This can be specialized on database and so could be one entry point to
> accomplishing your goals.
>
> The company I work for Acceleration.net is available for hire if this
> work is important to you.  Anything accomplished would obviously be open
> source and part of clsql moving forward. Otherwise if you do accomplish
> this work, I will be happy to review your work, and merge it when
> ready.  Feel free to push patches / issue pull requests to
> https://github.com/UnwashedMeme/clsql/ for review or merging.
>
> Thank you for pursuing this work and endeavoring to make clsql better.
>
> Cheers and hope this helps,
> Russ Tyndall
> Acceleration.net
>
>
>
> On 10/15/2013 6:06 AM, Victor wrote:
>> On Tue, 08 Oct 2013 16:43:59 +0300, Victor <[email protected]> wrote:
>>
>>> On Fri, 27 Sep 2013 19:42:52 +0300, Victor <[email protected]> wrote:
>>>
>>>> Hi,
>>>>
>>>> Thanks a lot for creating such a wonderful and useful library.
>>>>
>>>> However, lack of autoincrement fields support for Sqlite3 databases is very inconvenient.
>>>>
>>>> I wanted to share a patch (partially it was submitted before) that makes it possible to work with autoincrement fields in Sqlite3 with clsql.
>>>>
>>>> Additional modifications might be necessary, but this patch at least makes it possible to insert objects into the database.
>>>>
>>>> I hope that CLSQL will have a full support for autoincrement fields in the Sqlite3 databases.
>>>
>>> These modifications are not enough: the way how CLSQL creates tables is also important as it does not work with Sqlite3 when there are Autoincrement fields.
>>>
>>> The problem is that CLSQL tries to define primary keys also in the end of the columns list as a kind of constraints.
>>>
>> Hi all,
>>
>> Apparently the issue with autoincrement field support in Sqlite3 was
>> raised a number of times before:
>>
>> http://lists.b9.com/pipermail/clsql-help/2006-January/000552.html
>>
>> However, I did not find enough patches that would add a fully
>> functional autoincrement implementation for Sqlite3 databases.
>>
>> The problem is that Sqlite expects a very specific autoincrement field
>> declaration (see http://www.sqlite.org/autoinc.html ):
>>
>>       INTEGER PRIMARY KEY AUTOINCREMENT
>>
>> But CLSQL is tuned to work with the AUTO_INCREMENT keyword and it also
>> provides key declarations in the constraints part of the table
>> definition.
>>
>> With some simple hacking and patching I am able to create tables with
>> CLSQL CREATE-TABLE function:
>>
>>       (clsql:create-table [item] '(([id] integer :primary-key :autoincrement)
>>                                    ([name] varchar)))
>>
>> But this is not so convenient as DEF-VIEW-FROM-CLASS function and it
>> also requires manually patching CLSQL after it is downloaded by
>> Quicklisp (which is not good at all).
>>
>> Could somebody please help making CLSQL produce proper autoincrement
>> key definition for the Sqlite3 database?
>>
>> Probably a somewhat easier work-around is to use the ROWID column as a
>> key. But it requires a view-class to have a slot that is retrieved
>>   from the database but is not defined in the CREATE TABLE command and
>> is not assigned on INSERT.
>>
>> Any help is appreciated.
>>
>> Thanks,
>> Victor
>>
>> _______________________________________________
>> CLSQL mailing list
>> [email protected]
>> http://lists.b9.com/cgi-bin/mailman/listinfo/clsql
>


-- 
Tu ne cede malis, sed contra audentior ito --- LvM