/** * create FROM clause for all SELECT query * @return array FROM string and WHERE string */ protected final function _getFromClause() { $tables = $this->_dataParser->getTables(); foreach ($tables as $table_name => $table) { $tables[$table_name]['realname'] = '\'.$this->_conn->prefixTable(\'' . $table['realname'] . '\').\''; } $primarytable = $tables[$this->_dataParser->getPrimaryTable()]; $ptrealname = $this->_encloseName($primarytable['realname']); $ptname = $this->_encloseName($primarytable['name']); list($sqlFrom, $sqlWhere) = $this->genOuterJoins($tables, $ptname); if ($primarytable['name'] != $primarytable['realname']) { $sqlFrom = $ptrealname . $this->aliasWord . $ptname . $sqlFrom; } else { $sqlFrom = $ptrealname . $sqlFrom; } foreach ($this->_dataParser->getInnerJoins() as $tablejoin) { $table = $tables[$tablejoin]; $tablename = $this->_encloseName($table['name']); if ($table['name'] != $table['realname']) { $sqlFrom .= ', ' . $this->_encloseName($table['realname']) . $this->aliasWord . $tablename; } else { $sqlFrom .= ', ' . $this->_encloseName($table['realname']); } foreach ($table['fk'] as $k => $fk) { $sqlWhere .= ' AND ' . $ptname . '.' . $this->_encloseName($fk) . '=' . $tablename . '.' . $this->_encloseName($table['pk'][$k]); } } $sqlWhere = $sqlWhere != '' ? ' WHERE ' . substr($sqlWhere, 4) : ''; return array(' FROM ' . $sqlFrom, $sqlWhere); }
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); } } }