Resolução de problemas em luasql-postgres

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Resolução de problemas em luasql-postgres

Eric Chiesse
Olá,

Eu resolvi um problema de instalação do módulo luasql-postgres via luarocks no windows.

A solução envolve mudanças tanto no luasql quando no LuaRocks.

Já estou em contato com o pessoal do LuaRocks para propor uma correção do lado deles.

Do lado do LuaSQL foram 2 os problemas que achei:
1 - Erro de compilação devido a uma sintaxe não padrão para a alocação de um array.
2 - Rockspec usando "pq" como dependência sendo que no windows deve ser passado "libpq".

Gostaria de saber como posso enviar minhas alterações para o pessoal do projeto LuaSQL para que possam ser analisadas.

Saudações

---
Eric Chiesse

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Resolução de problemas em luasql-postgres

Lourival Vieira Neto
2013/11/10 Eric Chiesse <[hidden email]>:
>(...)
> Gostaria de saber como posso enviar minhas alterações para o pessoal do
> projeto LuaSQL para que possam ser analisadas.

Olá Eric,

Eu postaria os patches na lua-l, caso não tivesse o contato dos mantenedores.
--
Lourival Vieira Neto

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Resolução de problemas em luasql-postgres

Tomás Guisasola-2
In reply to this post by Eric Chiesse
  Olá Eric

  Eu sou o responsável pela implementação do driver Postgres da LuaSQL.

> Já estou em contato com o pessoal do LuaRocks para propor uma correção do
> lado deles.
  Você poderia dizer o que é?

> Do lado do LuaSQL foram 2 os problemas que achei:
> 1 - Erro de compilação devido a uma sintaxe não padrão para a alocação de
> um array.
  Qual foi a correção?  Ou qual foi o erro?

> 2 - Rockspec usando "pq" como dependência sendo que no windows deve ser
> passado "libpq".
  Isso é uma correção no rockspec, não no código propriamente
dito, certo?  Você pode me dizer qual foi a correção que você fez?

  Abraço,
  Tomás

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Resolução de problemas em luasql-postgres

Eric Chiesse
Tomás, acabei de me inscrever no Github.

Vou fazer o seguinte, te passo um pull request.

Vou passar abaixo uma explicação rápida dos problemas pois estou sem o código agora:

---
Eric


Em 11 de novembro de 2013 11:49, Tomas Guisasola Gorham <[hidden email]> escreveu:
        Olá Eric

        Eu sou o responsável pela implementação do driver Postgres da LuaSQL.


Já estou em contato com o pessoal do LuaRocks para propor uma correção do
lado deles.
        Você poderia dizer o que é?


Do lado do LuaSQL foram 2 os problemas que achei:
1 - Erro de compilação devido a uma sintaxe não padrão para a alocação de
um array.
        Qual foi a correção?  Ou qual foi o erro?

Em ls_postgres.c na linha 374. Está assim:
char to[len*sizeof(char)*2+1];
O compilador do visual studio (2008) reclama (não lembro agora o erro) pois a declaração de um array deve ter uma constante conhecida em tempo de compilação. Corrigi usando malloc e free.

 


2 - Rockspec usando "pq" como dependência sendo que no windows deve ser
passado "libpq".
        Isso é uma correção no rockspec, não no código propriamente
dito, certo?  Você pode me dizer qual foi a correção que você fez?

Isso, só no rockspec.
Esse é um ponto mais chato. Eu acho que o problema é de fato do luarocks pois no linux eu imagino que a dependência correta seja "pq" mas no windows não existe a mesma convenção de modo que na seção de dependências deve ser passado "libpq". O Hisham já até me respondeu essa questão mas ainda não tive tempo de ver. Neste exato momento, meu sentimento é que acertando no windows vai quebrar no linux mas ainda não consegui testar em outro SO.

Mando mais detalhes depois quando puder ver de novo o código.

Obrigado.

Eric

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Resolução de problemas em luasql-postgres

Lourival Vieira Neto
2013/11/11 Eric Chiesse <[hidden email]>:
> (...)
> char to[len*sizeof(char)*2+1];
>
> O compilador do visual studio (2008) reclama (não lembro agora o erro) pois
> a declaração de um array deve ter uma constante conhecida em tempo de
> compilação. Corrigi usando malloc e free.

Isso é válido em C99. Acredito que o VS tenha alguma flag para ligar
esse suporte.

--
Lourival Vieira Neto

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Re: [lua-br] Resolução de problemas em luasql-postgres

Tomás Guisasola-2
In reply to this post by Eric Chiesse
  Olá Eric

> Vou fazer o seguinte, te passo um pull request.
  Tá bom, mas a explicação abaixo já é o bastante.  Veja a seguir.

>>> 1 - Erro de compilação devido a uma sintaxe não padrão para a alocação de
>>> um array.
>>         Qual foi a correção?  Ou qual foi o erro?
> Em ls_postgres.c na linha 374. Está assim:
>
> char to[len*sizeof(char)*2+1];
>
> O compilador do visual studio (2008) reclama (não lembro agora o erro) pois
> a declaração de um array deve ter uma constante conhecida em tempo de
> compilação. Corrigi usando malloc e free.
  Pelo que sei (mas não sei muito), o padrão C89 (que é o usado
pela Microsoft) não aceitava esse tipo de construção, mas o C99 já
aceitava, daí eu apostei que em breve já estariam usando, mas parece
que os compiladores da Microsoft pararam no tempo :-(
  Seja como for, a solução usando malloc e free tem que ser feita
com cuidado para evitar que um erro de memória de Lua deixe essa área
de memória recém alocada sem referências.  E como erros de memória de
Lua podem acontecer em praticamente qualquer chamada, isso dá um certo
trabalho de implementar direito.  Eu vou ver o que fazer, mas se quiser
mandar uma sugestão, não tem problema.

>>  2 - Rockspec usando "pq" como dependência sendo que no windows deve ser
>>> passado "libpq".
>>         Isso é uma correção no rockspec, não no código propriamente
>> dito, certo?  Você pode me dizer qual foi a correção que você fez?
> Isso, só no rockspec.
> Esse é um ponto mais chato. Eu acho que o problema é de fato do luarocks
> pois no linux eu imagino que a dependência correta seja "pq" mas no windows
> não existe a mesma convenção de modo que na seção de dependências deve ser
> passado "libpq". O Hisham já até me respondeu essa questão mas ainda não
> tive tempo de ver. Neste exato momento, meu sentimento é que acertando no
> windows vai quebrar no linux mas ainda não consegui testar em outro SO.
  Certo. Me copie a resposta dele para eu ficar por dentro desse
tipo de solução.

  Abraço,
  Tomás

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Re: [lua-br] Resolução de problemas em luasql-postgres

Roberto Ierusalimschy
> Pelo que sei (mas não sei muito), o padrão C89 (que é o usado
> pela Microsoft) não aceitava esse tipo de construção, mas o C99 já
> aceitava, daí eu apostei que em breve já estariam usando, mas parece
> que os compiladores da Microsoft pararam no tempo :-(

A Microsoft declarou há vários anos atrás que não tinha nenhuma
intenção de dar suporte a C99. Algumas coisas eles acabam dando
suporte (em geral porque também existem em C++), mas não se pode
contar com isso. Essa é uma das (mas não a única) razões de Lua
usar C89 como referência.

-- Roberto

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Re: [lua-br] Resolução de problemas em luasql-postgres

Eric Chiesse
Tomás, mandei um pull request pelo GitHub.

Quando puder dá uma avaliada.

Abraço.

---
Eric


Em 11 de novembro de 2013 15:56, Roberto Ierusalimschy <[hidden email]> escreveu:
>       Pelo que sei (mas não sei muito), o padrão C89 (que é o usado
> pela Microsoft) não aceitava esse tipo de construção, mas o C99 já
> aceitava, daí eu apostei que em breve já estariam usando, mas parece
> que os compiladores da Microsoft pararam no tempo :-(

A Microsoft declarou há vários anos atrás que não tinha nenhuma
intenção de dar suporte a C99. Algumas coisas eles acabam dando
suporte (em geral porque também existem em C++), mas não se pode
contar com isso. Essa é uma das (mas não a única) razões de Lua
usar C89 como referência.

-- Roberto

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: [lua-br] Resolução de problemas em luasql-postgres

Tomás Guisasola-2
  Olá Eric

  O diff que eu vi pelo GitHub é o seguinte:

@@ -371,14 +371,17 @@ static int conn_escape (lua_State *L) {
    conn_data *conn = getconnection (L);
    size_t len;
    const char *from = luaL_checklstring (L, 2, &len);
-  char to[len*sizeof(char)*2+1];
+  char *to = malloc(len*sizeof(char)*2+1);
    int error;
+    int ret = 1;
    len = PQescapeStringConn (conn->pg_conn, to, from, len, &error);
    if (error == 0) { /* success ! */
      lua_pushlstring (L, to, len);
-    return 1;
-  } else
-    return luasql_failmsg (L, "cannot escape string. PostgreSQL: ", PQerrorMessage (conn->pg_conn));
+    } else {
+    ret = luasql_failmsg (L, "cannot escape string. PostgreSQL: ", PQerrorMessage (conn->pg_conn));
+    }
+    free(to);
+    return ret;
  }

  Essa implementação tem alguns problemas que eram resolvidos
muito mais facilmente do outro jeito.  Primeiro, se a malloc falhar,
a PQescapeStringConn será invocada com um parâmetro nulo, o que não
deve ser bom.  Segundo, supondo que a malloc alocou a memória, se a
lua_pushlstring ou a luasql_failmsg falharem, a memória alocada pela
malloc não vai ser liberada.
  O primeiro problema é fácil de se resolver com um teste no
resultado da malloc, mas o segundo eu não tenho certeza...  Acho que era
melhor usar Lua para alocar essa memória, de modo que o coletor de lixo
ficasse responsável por desalocaá-la em caso de erro...  Vou olhar isso
com calma e depois te dou um retorno.

  Abraço,
  Tomás

On Sat, 30 Nov 2013, Eric Chiesse wrote:

> Tomás, mandei um pull request pelo GitHub.
>
> Quando puder dá uma avaliada.
>
> Abraço.
>
> ---
> Eric
>
>
> Em 11 de novembro de 2013 15:56, Roberto Ierusalimschy <
> [hidden email]> escreveu:
>
>>>       Pelo que sei (mas não sei muito), o padrão C89 (que é o usado
>>> pela Microsoft) não aceitava esse tipo de construção, mas o C99 já
>>> aceitava, daí eu apostei que em breve já estariam usando, mas parece
>>> que os compiladores da Microsoft pararam no tempo :-(
>>
>> A Microsoft declarou há vários anos atrás que não tinha nenhuma
>> intenção de dar suporte a C99. Algumas coisas eles acabam dando
>> suporte (em geral porque também existem em C++), mas não se pode
>> contar com isso. Essa é uma das (mas não a única) razões de Lua
>> usar C89 como referência.
>>
>> -- Roberto
>>
>> --
>> Lua BR - http://groups.google.com/group/lua-br
>> ---
>> Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR"
>> dos Grupos do Google.
>> Para cancelar a inscrição neste grupo e parar de receber seus e-mails,
>> envie um e-mail para [hidden email].
>> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
>>
>
>

--

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.