[erlang-questions] Chicago Boss Array Fields in Models

Ivan Carmenates García co7eb@REDACTED
Fri May 30 16:21:13 CEST 2014


Hi David, thanks for answer me.

Okay, in the case of arrays maybe I could normalize even more the database
to include new tables for the arrayed fields, but what about execute? I
mean, when I need to make more complex queries to the database like using
many tables in the query with many filters, then I will have in the result
all the records of all the tables mixed, that is fine for me still, because
I can intentionality extract the values from the result and make a proplist
with the values to pass it to the template like this: {ok, [{result, [{name,
Name}, {post, Post }]}]}, to access from the template in this way:
result.name, result.post.

But still it is a little bit awkward to extract the nice values from the
result of an execute, could be over there a function that translate that
result to a nice proplist? Ex: if boss_db:execute/1 returns a list of
columns with its names and types and a list of values, a proplist could be
made as a kind of return value from execute, the proplist will have the
following structure, from the execute result: 

[{column,<<"id">>,int4,4,-1,0},
     {column,<<"username">>,varchar,-1,29,0},
     {column,<<"email">>,varchar,-1,259,0},
     {column,<<"password">>,varchar,-1,259,0},
     {column,<<"password_old">>,varchar,-1,259,0},
     {column,<<"activated">>,bool,1,-1,0},
     {column,<<"activation_token">>,varchar,-1,259,0},
     {column,<<"activation_token_created_date">>,timestamp,8,-1,
             0}],
[{<<"2">>,<<"john">>,<<"john@REDACTED">>,
      <<"55f5d08a12e5c9857c45c05be7ae468a">>,
      <<"55f5d08a12e5c9857c45c05be7ae468a">>,<<"f">>,
      <<"97cc79a8ea3d1ddbcc35dd82016056359b489412">>,
      <<"2014-05-26 15:09:34">>}]}

Second value of each line tuple is the field name and the key in the
proplist,
And the corresponded value is the value of the key in the proplist.

[{id, "2"},
 {username, "john"},
 {email, " john@REDACTED"},
 {password , "55f5d08a12e5c9857c45c05be7ae468a"},
 {password_old, "55f5d08a12e5c9857c45c05be7ae468a"},
 {activated, "true"},
 {activation_token, "97cc79a8ea3d1ddbcc35dd82016056359b489412"},
 {activation_token_created_date, "2014-05-26 15:09:34"}]

Of cource the proplist values and keys without any ugly binary format.



Best regards,
Ivan.





-----Mensaje original-----
De: erlang-questions-bounces@REDACTED
[mailto:erlang-questions-bounces@REDACTED] En nombre de David Welton
Enviado el: viernes, 30 de mayo de 2014 04:57 a.m.
Para: Manuel A. Rubio Bombadil
CC: Erlang Questions
Asunto: Re: [erlang-questions] Chicago Boss Array Fields in Models

> I think arrays is not well supported for retrieve information from 
> postgres, I afraid, if you go to a psql terminal and run a simple:
>
> SELECT emails FROM users;

You can get the raw data out without much trouble:

create table foo (emails varchar[]);

insert into foo (emails) values ('{"a", "b", "c"}');

boss_db:execute("select * from foo", []).
{ok,[{column,<<"emails">>,{array,varchar},-1,-1,1}],
    [{[<<"a">>,<<"b">>,<<"c">>]}]}

Keep in mind that, with Chicago Boss and Postgres

boss_db:execute("select * from foo", []).

uses a different underlying function than

boss_db:execute("select * from foo")

With the latter returning mostly binaries.


> You realise the output is the same that you get with boss_db. Perhaps 
> you should normalice the data, create another table for emails and 
> another model using -has or -belongs instead.

Normalizing the data might be a good idea in any case.

--
David N. Welton

http://www.welton.it/davidw/

http://www.dedasys.com/
_______________________________________________
erlang-questions mailing list
erlang-questions@REDACTED
http://erlang.org/mailman/listinfo/erlang-questions




More information about the erlang-questions mailing list