Ejemplo n.º 1
0
 /**
  * get autoincrement PK field
  */
 protected function getAutoIncrementPKField($using = null)
 {
     if ($using === null) {
         $using = $this->_dataParser->getProperties();
     }
     $tb = $this->_dataParser->getTables();
     $tb = $tb[$this->_dataParser->getPrimaryTable()]['realname'];
     foreach ($using as $id => $field) {
         if (!$field->isPK) {
             continue;
         }
         if ($field->autoIncrement) {
             return $field;
         }
     }
     return null;
 }
Ejemplo n.º 2
0
 protected function import($xml, $tools)
 {
     if (isset($xml['import'])) {
         $import = (string) $xml['import'];
         jApp::pushCurrentModule($this->selector->module);
         // Keep the same driver as current used
         $importSel = new jSelectorDaoDb($import, $this->selector->driver, $this->selector->dbType);
         jApp::popCurrentModule();
         $doc = new DOMDocument();
         if (!$doc->load($importSel->getPath())) {
             throw new jException('jelix~daoxml.file.unknown', $importSel->getPath());
         }
         $parser = new jDaoParser($importSel);
         $parser->parse(simplexml_import_dom($doc), $tools);
         $this->_properties = $parser->getProperties();
         $this->_tables = $parser->getTables();
         $this->_primaryTable = $parser->getPrimaryTable();
         $this->_methods = $parser->getMethods();
         $this->_ojoins = $parser->getOuterJoins();
         $this->_ijoins = $parser->getInnerJoins();
         $this->_eventList = $parser->getEvents();
         $this->_userRecord = $parser->getUserRecord();
         $this->_importedDao = $parser->getImportedDao();
         $this->hasOnlyPrimaryKeys = $parser->hasOnlyPrimaryKeys;
         if ($this->_importedDao) {
             $this->_importedDao[] = $importSel;
         } else {
             $this->_importedDao = array($importSel);
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * 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'];
     }
 }