Example #1
0
 protected function _encloseName($name)
 {
     return $this->tools->encloseName($name);
 }
 function __construct($connector)
 {
     parent::__construct($connector);
 }
 /**
  * constructor.
  * @param array  $attributes  list of attributes of a simpleXmlElement
  * @param jDaoParser $parser the parser on the dao file
  * @param jDbTools $tools
  */
 function __construct($aAttributes, $parser, $tools)
 {
     $needed = array('name', 'fieldname', 'table', 'datatype', 'required', 'minlength', 'maxlength', 'regexp', 'sequence', 'default', 'autoincrement');
     // Allowed attributes names
     $allowed = array('name', 'fieldname', 'table', 'datatype', 'required', 'minlength', 'maxlength', 'regexp', 'sequence', 'default', 'autoincrement', 'updatepattern', 'insertpattern', 'selectpattern', 'comment');
     foreach ($aAttributes as $attributeName => $attributeValue) {
         if (!in_array($attributeName, $allowed)) {
             throw new jDaoXmlException($parser->selector, 'unknown.attr', array($attributeName, 'property'));
         }
     }
     $params = $parser->getAttr($aAttributes, $needed);
     if ($params['name'] === null) {
         throw new jDaoXmlException($parser->selector, 'missing.attr', array('name', 'property'));
     }
     $this->name = $params['name'];
     if (!preg_match('/^[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*$/', $this->name)) {
         throw new jDaoXmlException($parser->selector, 'property.invalid.name', $this->name);
     }
     $this->fieldName = $params['fieldname'] !== null ? $params['fieldname'] : $this->name;
     $this->table = $params['table'] !== null ? $params['table'] : $parser->getPrimaryTable();
     $tables = $parser->getTables();
     if (!isset($tables[$this->table])) {
         throw new jDaoXmlException($parser->selector, 'property.unknown.table', $this->name);
     }
     $this->required = $this->requiredInConditions = $parser->getBool($params['required']);
     $this->maxlength = $params['maxlength'] !== null ? intval($params['maxlength']) : null;
     $this->minlength = $params['minlength'] !== null ? intval($params['minlength']) : null;
     $this->regExp = $params['regexp'];
     $this->autoIncrement = $parser->getBool($params['autoincrement']);
     if ($params['datatype'] === null) {
         throw new jDaoXmlException($parser->selector, 'missing.attr', array('datatype', 'property'));
     }
     $params['datatype'] = trim(strtolower($params['datatype']));
     if ($params['datatype'] == '') {
         throw new jDaoXmlException($parser->selector, 'wrong.attr', array($params['datatype'], $this->fieldName, 'property'));
     }
     $this->datatype = strtolower($params['datatype']);
     $ti = $tools->getTypeInfo($this->datatype);
     $this->unifiedType = $ti[1];
     if (!$this->autoIncrement) {
         $this->autoIncrement = $ti[6];
     }
     if ($this->unifiedType == 'integer' || $this->unifiedType == 'numeric') {
         if ($params['sequence'] !== null) {
             $this->sequenceName = $params['sequence'];
             $this->autoIncrement = true;
         }
     }
     $this->isPK = in_array($this->fieldName, $tables[$this->table]['pk']);
     if (!$this->isPK && $this->table == $parser->getPrimaryTable()) {
         foreach ($tables as $table => $info) {
             if ($table == $this->table) {
                 continue;
             }
             if (isset($info['fk']) && in_array($this->fieldName, $info['fk'])) {
                 $this->isFK = true;
                 break;
             }
         }
     } else {
         $this->required = true;
         $this->requiredInConditions = true;
     }
     if ($this->autoIncrement) {
         $this->required = false;
         $this->requiredInConditions = true;
     }
     if ($params['default'] !== null) {
         $this->defaultValue = $tools->stringToPhpValue($this->unifiedType, $params['default']);
     }
     // insertpattern is allowed on primary keys noy autoincremented
     if ($this->isPK && !$this->autoIncrement && isset($aAttributes['insertpattern'])) {
         $this->insertPattern = (string) $aAttributes['insertpattern'];
     }
     if ($this->isPK) {
         $this->updatePattern = '';
     }
     // we ignore *pattern attributes on PK and FK fields
     if (!$this->isPK && !$this->isFK) {
         if (isset($aAttributes['updatepattern'])) {
             $this->updatePattern = (string) $aAttributes['updatepattern'];
         }
         if (isset($aAttributes['insertpattern'])) {
             $this->insertPattern = (string) $aAttributes['insertpattern'];
         }
         if (isset($aAttributes['selectpattern'])) {
             $this->selectPattern = (string) $aAttributes['selectpattern'];
         }
     }
     // no update and insert patterns for field of external tables
     if ($this->table != $parser->getPrimaryTable()) {
         $this->updatePattern = '';
         $this->insertPattern = '';
         $this->required = false;
         $this->requiredInConditions = false;
         $this->ofPrimaryTable = false;
     } else {
         $this->ofPrimaryTable = true;
     }
     // field comment
     if (isset($aAttributes['comment'])) {
         $this->comment = (string) $aAttributes['comment'];
     }
 }