artanis
[Top][All Lists]
Advanced

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

Re: [Artanis] Foreign Key for Migrations


From: Jonathan Schmeling
Subject: Re: [Artanis] Foreign Key for Migrations
Date: Fri, 22 Mar 2019 04:24:28 +0000

So, shortly after sending that E-mail, I remembered that I hadn't 
removed all of the previous stuff related to models in the controller 
after deleting the controller so…of course it failed.

I'm gonna try the stuff you mentioned, now that I got it to work.

In the mean time, what is the difference between the migration and 
models since I have a feeling I don't fully understand. Is it just that 
models will handle creating the tables, now, rather than migrations but 
migrations are still useful for creating dummy/test data in the tables?

Jonathan

On 3/18/19 12:53 PM, Nala Ginrut wrote:
> Jonathan Schmeling writes:
>
>> web_1  | app/models/PEOPLE.scm:4:0: In procedure module-lookup: Unbound 
>> variable: PEOPLE
> For this issue, please update to the latest commit, I just fixed few
> hours ago. However, you shouldn't encounter this issue since I've told
> you to define the people table in app/models/PEOPLE.scm.
> So even after fix, it will throw an error to force you define PEOPLE.
>
> PS: Define it in the migration is useless here, since migration and
> model are different things.
>
>
>> web_1  | Backtrace:
>> web_1  |            0 (primitive-load "/myapp/app/controllers/#{}#.scm")
>> web_1  |
>> web_1  | ERROR: In procedure primitive-load:
>> web_1  | In procedure open-file: No such file or directory: 
>> "/myapp/app/controllers/#{}#.scm"
> This issue is unrelated to models, it means you've created a controller
> whose name is a null string. I don't know how you made it, but you need to
> check your code.
>
>> But I'm not certain what to make of this error, unfortunately.
>>
>> Jonathan
>> On Sunday, March 17, 2019, 2:49:49 PM CDT, Nala Ginrut <address@hidden> 
>> wrote:
>>
>>
>>
>> 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<mailto: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

reply via email to

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