Lançado Adianti Framework 8.1!
Clique aqui para saber mais
A palavra "data" é palavra reservada do TRecord e cria conflito A palavra "data" é palavra reservada do TRecord e cria conflito com nome de coluna de tabela de bd SQLite Otto Fuchshuber Estou recebendo as seguintes mensagens num estudo que estou fazendo para portar um aplicativo para o framework Adianti: (trechos dos programas e o layout de uma tabela do SQLite reproduzidos abaixo) Reserved property name (data) in class LancImoveis Warning: Illegal s...
OF
A palavra "data" é palavra reservada do TRecord e cria conflito  
A palavra "data" é palavra reservada do TRecord e cria conflito com nome de coluna de tabela de bd SQLite
Otto Fuchshuber

Estou recebendo as seguintes mensagens num estudo que estou fazendo para portar um aplicativo para o framework Adianti:
(trechos dos programas e o layout de uma tabela do SQLite reproduzidos abaixo)

Reserved property name (data) in class LancImoveis
Warning: Illegal string offset 'codigoimovel' in C:xampphtdocsadiantiframeworkCap3libadiantidatabaseTRecord.php on line 179

O nome reservado 'data' não é do PHP e sim do TRecord do Adianti.
Alterei uma outra tabela mudando o nome da coluna data para datta e os erros e avisos desapareceram.
Mas não é muito atrativo fazer estas alterações em todas tabelas que tem uma coluna data.
Não sei bem como funciona o namespace no PHP mas como há herança de TRecord (que tem o namespace AdiantiDatabase) creio que de pouco adiantaria (se eu já soubesse como se faz)

Existe alguma maneira prática de sair desse impasse?

  1. <?php
  2. class LancImoveis extends TRecord
  3. {
  4.     const TABLENAME    'lancimoveis';
  5.     const PRIMARYKEY   'chave';
  6.     const IDPOLICY     'max'// {max, serial}
  7.     const CACHECONTROL 'TAPCache';
  8.     public function __construct($chave NULL)
  9.     {
  10.         parent::__construct($chave);
  11.         parent::addAttribute('data');
  12.         parent::addAttribute('codigoimovel');
  13.         parent::addAttribute('nomeimovel');
  14.         parent::addAttribute('codredatributo');
  15.         parent::addAttribute('codigoatributo');
  16.         parent::addAttribute('nomeatributo');
  17.         parent::addAttribute('codhistorico');
  18.         parent::addAttribute('textohistorico');
  19.         parent::addAttribute('complemento');
  20.         parent::addAttribute('grupo');
  21.         parent::addAttribute('bloco');
  22.     }
  23. (...)
  24.     
  1. <?php
  2. class LancImoveisObjectLoad extends TPage
  3. {
  4.     public function __construct()
  5.     {
  6.         parent::__construct();
  7.         try
  8.         {
  9.             TTransaction::open('IMOVEISLOCACOES');    
  10.     parent::__construct();
  11.         try
  12.         {
  13.             TTransaction::open('IMOVEISLOCACOES');
  14.             $lancimovel= new LancImoveis(1);
  15.             echo 'chave          : ' $lancimovel->chave          "<br>\n";
  16.             echo 'data           : ' $lancimovel->data           "<br>\n";
  17.             
  18. (...)            
  19. CREATE TABLE [lancimoveis] (
  20. [chaveINTEGER  PRIMARY KEY NOT NULL,
  21. [dataVARCHAR(8)  NOT NULL,
  22. [codigoimovelINTEGER  NOT NULL,
  23. [nomeimovelVARCHAR(70)  NULL,
  24. [codredatributoINTEGER  NOT NULL,
  25. [codigoatributoVARCHAR(15)  NOT NULL,
  26. [nomeatributoVARCHAR(70)  NULL,
  27. [codhistoricoINTEGER  NULL,
  28. [textohistoricoVARCHAR(70)  NULL,
  29. [complementoVARCHAR(100)  NULL,
  30. [grupoINTEGER DEFAULT '0' NOT NULL,
  31. [blocoINTEGER DEFAULT '0' NULL
  32. )

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (4)


WP

infelizmente não, vai ter que mudar o nome da coluna mesmo, caso contrario não podera usar essa coluna no Framework
OF

Obrigado, William pela (triste) informação. Talvez numa versão futura 'data' possa ser substituído por algo como _data ou coisa parecida.
FC

Em varias linguagens de programação a palavra data é reservada, no Adianti o conselho é usar data_nascimento por exemplo.
OF

Eu fiz uma pesquisa rápida quanto a keywords e reserved words no Google.
'data' (sem as aspas) não é palavra exclusiva nas seguintes linguagens:
C#, C++, Java, Ruby on Rails, PHP, Javascript (ECMAscript).

'data' (sem as aspas) é palavra exclusiva em Cobol (IBM) e Fortran, que são juntas com o LISP as mais antigas linguagens ainda em uso ativo.

Não é mencionado como palava exclusiva em
https://adianti.com.br/index.doc.php?doc=php/reserved.html
que só lista palavas exclusivas do PHP

List of Reserved Words
Table of Contents

List of Keywords
Predefined Classes
Predefined Constants

Aparece em vários lucares em TRecord.php do Adianti Framework como por exemplo:

if ($property == 'data')

{

throw new Exception(AdiantiCoreTranslator::translate('Reserved property name (^1) in class ^2', $property, get_class($this)));

}

Mas que não consta do código do TRecord.class.php no livro do Pablo Dall'Oglio , pápina 266, PHP Programando com Orientação a Objetos, segunda edição, Novatec, Setembro 2007.

Mas vou por ora retornar à minha linha principal de estudo e mudar nas tabelas que tenham a coluna data para datta.

Obrigado, Felipe, pelo esclarecimento.