artanis
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Artanis] Foreign Key for Migrations


From: Nala Ginrut
Subject: Re: [Artanis] Foreign Key for Migrations
Date: Mon, 18 Mar 2019 03:49:40 +0800
User-agent: mu4e 1.0; emacs 25.1.1

Hi Jonathan!
I've realized that there's bug in models after I fixed some bugs in
migration before.
Now I think it's fixed in a88c7e189a6a6273399e6e713be407ef55938f65

Please notice that you're forced to define the table in
define-artanis-model from now on, if you just leave it as
(define-artanis-model people) after drawing a model, then
art command will throw error.

Here's an example:
----------------code------------------
(create-artanis-model
people
(id auto (#:not-null #:primary-key))
(first_name char-field (#:maxlen 30 #:not-null))
(last_name char-field (#:maxlen 30 #:not-null)))
----------------end-------------------

And another notion is that the syntax is slightly different from the
mogration, in migration, you should use symbol explicitly:
-----------------code---------------------
(create-table
'people
'(id auto (#:not-null #:primary-key))
'(first_name char-field (#:maxlen 30 #:not-null))
'(last_name char-field (#:maxlen 30 #:not-null)))
-----------------end----------------------

But in Models, the list is quasiquote, so you can use unquote-sign, say
"," to escape the content if you like.

Please try it, and don't hasitate to report bugs. ;-)

Thanks!


Jonathan Schmeling writes:

> Thanks so much for the response! Ahhh; I did wonder if Artanis had anything 
> had anything like that. That is really nice to work with.
>
> So I have a table named PEOPLE; so I ran art draw model PEOPLE and that 
> reated a file named PEOPLE.scm which contains
>
> ;; Model PEOPLE definition of myapp
> ;; Please add your license header here.
> ;; This file is generated automatically by GNU Artanis.
> (create-artanis-model PEOPLE) ; DO NOT REMOVE THIS LINE!!!
>
> I then added to one of my controllers (use-modules (app models PEOPLE)) and 
> running Artanis and visiting endpoints in that controller didn't throw any 
> errors.
>
> So then I added a call similar to the one you had that uses ($PEOPLE …) in 
> the controller; however, then I get the error In procedure module-lookup: 
> Unbound variable: $PEOPLE when I visit the endpoint that uses the function 
> call.
>
> Did I miss something?
>
> Jonathan
> On Saturday, March 16, 2019, 3:31:19 PM CDT, Nala Ginrut <address@hidden> 
> wrote:
>
>
>
> Hi Jonathan!
> Sorry it's my mistake to neglect this part in the doc.
> You don't have to take care of the DB connection management by
> yourself. You may just use `art draw model person' to create the named
> mapping to the "person" table, and there's an exported relational
> mapping object named "$person", you may import (app models person) in
> other controller to use it. It's based on FPRM, but the table name has
> already been wrapped into the closure:
> https://www.gnu.org/software/artanis/manual/manual.html#orgeff2a47
>
> And maybe read its implementation is clearer to you:
> https://gitlab.com/NalaGinrut/artanis/blob/master/artanis/mvc/model.scm#L226
>
> The usage should look like this:
>
> ($person 'set #:name "nala" #:age 100)
>
> BTW, please don't forget to config your DB in conf/artanis.conf first.
>
> Best regards.
>
>
> Jonathan Schmeling writes:
>
>> Gotcha. That makes a lot of sense. Thanks a ton for explaining!
>>
>> Database related, is there a way to query the database from one of the 
>> controller -define methods (like (article-define show …) in the online 
>> documentation)? Using the function map-table-from-DB causes an error and 
>> attaching #:conn #t, like with the get function, also causes an error. Doing 
>> something like (:conn rc "SELECT * FROM PEOPLE") seems to work (or, at 
>> least, not throw an error) but I'm not sure what gets returned. The doc. 
>> says the returned value is described at 
>> https://www.gnu.org/software/artanis/manual/manual.html#org8ba121f but that 
>> section says "TODO".
>> As always, any help is always super appreciated!
>>
>> Jonathan
>>
>> On 2/17/19 12:19 PM, Nala Ginrut wrote:
>>
>>
>> Hi Jonathan!
>> I'm glad you asked this question.
>> The answer is actually written in the fprm.scm code comments that the
>> relational mapping in Artanis is not going to provide database level
>> foreign keys. The solution is to provide higher-abstract-level table
>> operations as a replacement to save users to time to handle by
>> themselves.
>>
>> The pros and cons of foreign keys are discussed a lot in the
>> internet. The modern ORM may choose to drop foreign keys and provide
>> higher layer for it.
>>
>>
>> Unfortunately, this feature has not been implemented yet because of my time 
>> schedule.
>>
>> Of course, this issue is still open, the original plan is more
>> ambitious. I think it's the time to add more features to the relational
>> mapping framework.
>> Welcome to discuss if you like.
>>
>> Best regards.
>>
>> Jonathan Schmeling writes:
>>
>>
>>
>> I'm not sure if it's been asked before but I couldn't find any mention
>> in the doc. – is it feasible to define foreign keys for the create-table
>> function? I want to reference another table's primary keys from a
>> particular table, to link them.
>>
>> Jonathan


--
GNU Powered it
GPL Protected it
GOD Blessed it
HFG - NalaGinrut
Fingerprint F53B 4C56 95B5 E4D5 6093 4324 8469 6772 846A 0058

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]