/**
  * Adds a table to the statement
  * @param zibo\library\database\manipulation\expression\TableExpression $table
  * @return null;
  */
 public function addTable(TableExpression $table)
 {
     $alias = $table->getAlias();
     if ($alias) {
         $this->tables[$alias] = $table;
     } else {
         $this->tables[$table->getName()] = $table;
     }
 }
 public function testSelectStatementWithTablesAndJoins()
 {
     $table1 = new TableExpression('table1', 't1');
     $table2 = new TableExpression('table2_with_long_name', 'table2');
     $joinCondition = new SimpleCondition(new FieldExpression('id', $table1), new FieldExpression('id_t1', $table2), '=');
     $table1->addJoin(new JoinExpression(JoinExpression::TYPE_INNER, $table2, $joinCondition));
     $statement = new SelectStatement();
     $statement->addField(new FieldExpression('field1', $table1, 'f1'));
     $statement->addTable($table1);
     $sql = $this->parser->parseStatement($statement);
     $this->assertNotNull($sql);
     $this->assertEquals('SELECT `t1`.`field1` AS `f1` FROM `table1` AS `t1` INNER JOIN `table2_with_long_name` AS `table2` ON `t1`.`id` = `table2`.`id_t1`', $sql);
 }
 public function testConstructWithAlias()
 {
     $table = new TableExpression('table', 'alias');
     $this->assertEquals('table', $table->getName());
     $this->assertEquals('alias', $table->getAlias());
 }
 /**
  * Create the SQL of the joins of a table for a FROM expression
  * @param zibo\library\database\manipulation\expression\TableExpression $table
  * @return string SQL representation of the joins
  */
 protected function parseTableExpressionJoins(TableExpression $table)
 {
     $sql = '';
     $joins = $table->getJoins();
     if (!$joins) {
         return $sql;
     }
     foreach ($joins as $join) {
         $sql .= ' ' . $join->getType() . ' JOIN ' . $this->parseTableExpressionForFrom($join->getTable()) . ' ON ' . $this->parseCondition($join->getCondition(), false);
     }
     return $sql;
 }
示例#5
0
 /**
  * Create a condition to localize a model
  * @param zibo\library\database\manipulation\expression\TableExpression $table Table expression of the table with the shared data
  * @param zibo\library\database\manipulation\expression\TableExpression $localizedTable Table expression of the table with the localized data
  * @return zibo\library\database\manipulation\condition\NestedCondition Condition to localize the provided table
  */
 private function createLocalizeCondition(TableExpression $table, TableExpression $localizedTable)
 {
     $expressionPrimaryKey = new FieldExpression(ModelTable::PRIMARY_KEY, $table, $table->getAlias() . self::ALIAS_SEPARATOR . ModelTable::PRIMARY_KEY);
     $expressionData = new FieldExpression(LocalizedModel::FIELD_DATA, $localizedTable, $localizedTable->getAlias() . self::ALIAS_SEPARATOR . LocalizedModel::FIELD_DATA);
     $expressionLocaleField = new FieldExpression(LocalizedModel::FIELD_LOCALE, $localizedTable, $localizedTable->getAlias() . self::ALIAS_SEPARATOR . LocalizedModel::FIELD_LOCALE);
     $expressionLocale = new ScalarExpression($this->locale);
     $dataCondition = new SimpleCondition($expressionPrimaryKey, $expressionData, Condition::OPERATOR_EQUALS);
     $localeCondition = new SimpleCondition($expressionLocaleField, $expressionLocale, Condition::OPERATOR_EQUALS);
     $localizeCondition = new NestedCondition();
     $localizeCondition->addCondition($dataCondition);
     $localizeCondition->addCondition($localeCondition);
     return $localizeCondition;
 }