public function testAddColumnWithNoAdapterSpecified() { try { $table = new \Phinx\Db\Table('ntable'); $table->addColumn('realname', 'string'); $this->fail('Expected the table object to throw an exception'); } catch (\RuntimeException $e) { $this->assertInstanceOf('RuntimeException', $e, 'Expected exception of type RuntimeException, got ' . get_class($e)); $this->assertRegExp('/An adapter must be specified to add a column./', $e->getMessage()); } }
public function testAddColumnWithAnInvalidColumnType() { try { $adapter = new MysqlAdapter(array()); $column = new \Phinx\Db\Table\Column(); $column->setType('badtype'); $table = new \Phinx\Db\Table('ntable', array(), $adapter); $table->addColumn($column); } catch (\InvalidArgumentException $e) { $this->assertInstanceOf('InvalidArgumentException', $e, 'Expected exception of type InvalidArgumentException, got ' . get_class($e)); $this->assertRegExp('/^An invalid column type /', $e->getMessage()); } }
public function testInsertData() { $table = new \Phinx\Db\Table('table1', array(), $this->adapter); $table->addColumn('column1', 'string')->addColumn('column2', 'integer')->insert(array("column1", "column2"), array(array('value1', 1), array('value2', 2)))->save(); $rows = $this->adapter->fetchAll('SELECT * FROM table1'); $this->assertEquals('value1', $rows[0]['column1']); $this->assertEquals('value2', $rows[1]['column1']); $this->assertEquals(1, $rows[0]['column2']); $this->assertEquals(2, $rows[1]['column2']); }
public function dropForeignKey() { $refTable = new \Phinx\Db\Table('ref_table', array(), $this->adapter); $refTable->addColumn('field1', 'string')->save(); $table = new \Phinx\Db\Table('table', array(), $this->adapter); $table->addColumn('ref_table_id', 'integer')->save(); $fk = new \Phinx\Db\Table\ForeignKey(); $fk->setReferencedTable($refTable)->setColumns(array('ref_table_id'))->setReferencedColumns(array('id')); $this->adapter->addForeignKey($table, $fk); $this->adapter->dropForeignKey($table->getName(), array('ref_table_id')); $this->assertFalse($this->adapter->hasForeignKey($table->getName(), array('ref_table_id'))); }
/** * Test that column names are properly escaped when creating Foreign Keys */ public function testForignKeysArePropertlyEscaped() { $userId = 'user'; $sessionId = 'session'; $local = new \Phinx\Db\Table('users', array('primary_key' => $userId, 'id' => $userId), $this->adapter); $local->create(); $foreign = new \Phinx\Db\Table('sessions', array('primary_key' => $sessionId, 'id' => $sessionId), $this->adapter); $foreign->addColumn('user', 'integer')->addForeignKey('user', 'users', $userId)->create(); $this->assertTrue($foreign->hasForeignKey('user')); }
public function testNullWithoutDefaultValue() { $this->markTestSkipped('Skipping for now. See Github Issue #265.'); // construct table with default/null combinations $table = new \Phinx\Db\Table('table1', array(), $this->adapter); $table->addColumn("aa", "string", array("null" => true))->addColumn("bb", "string", array("null" => false))->addColumn("cc", "string", array("null" => true, "default" => "some1"))->addColumn("dd", "string", array("null" => false, "default" => "some2"))->save(); // load table info $columns = $this->adapter->getColumns("table1"); $this->assertEquals(count($columns), 5); $aa = $columns[1]; $bb = $columns[2]; $cc = $columns[3]; $dd = $columns[4]; $this->assertEquals("aa", $aa->getName()); $this->assertEquals(true, $aa->isNull()); $this->assertEquals(null, $aa->getDefault()); $this->assertEquals("bb", $bb->getName()); $this->assertEquals(false, $bb->isNull()); $this->assertEquals(null, $bb->getDefault()); $this->assertEquals("cc", $cc->getName()); $this->assertEquals(true, $cc->isNull()); $this->assertEquals("some1", $cc->getDefault()); $this->assertEquals("dd", $dd->getName()); $this->assertEquals(false, $dd->isNull()); $this->assertEquals("some2", $dd->getDefault()); }
public function testAddColumnWithComment() { $table = new \Phinx\Db\Table('table1', array(), $this->adapter); $table->addColumn('column1', 'string', array('comment' => $comment = 'Comments from "column1"'))->save(); $rows = $this->adapter->fetchAll('select * from sqlite_master where `type` = \'table\''); foreach ($rows as $row) { if ($row['tbl_name'] == 'table1') { $sql = $row['sql']; } } $this->assertRegExp('/\\/\\* Comments from "column1" \\*\\//', $sql); }
public function testInsertData() { $data = array(array('column1' => 'value1', 'column2' => 1), array('column1' => 'value2', 'column2' => 2), array('column1' => 'value3', 'column2' => 3, 'column3' => 'foo')); $table = new \Phinx\Db\Table('table1', array(), $this->adapter); $table->addColumn('column1', 'string')->addColumn('column2', 'integer')->addColumn('column3', 'string', array('default' => 'test'))->insert($data)->save(); $rows = $this->adapter->fetchAll('SELECT * FROM table1'); $this->assertEquals('value1', $rows[0]['column1']); $this->assertEquals('value2', $rows[1]['column1']); $this->assertEquals('value3', $rows[2]['column1']); $this->assertEquals(1, $rows[0]['column2']); $this->assertEquals(2, $rows[1]['column2']); $this->assertEquals(3, $rows[2]['column2']); $this->assertEquals('test', $rows[0]['column3']); $this->assertEquals('foo', $rows[2]['column3']); }
public function testAddColumnWithComment() { $table = new \Phinx\Db\Table('table1', array(), $this->adapter); $table->addColumn('column1', 'string', array('comment' => $comment = 'Comments from "column1"'))->save(); $rows = $this->adapter->fetchAll('SELECT column_name, column_comment FROM information_schema.columns WHERE table_name = "table1"'); $columnWithComment = $rows[1]; $this->assertEquals($comment, $columnWithComment['column_comment'], 'Dont set column comment correctly'); }
public function testTimestampWithTimezone() { $table = new \Phinx\Db\Table('tztable', array('id' => false), $this->adapter); $table->addColumn('timestamp_tz', 'timestamp', array('timezone' => true))->addColumn('time_tz', 'time', array('timezone' => true))->addColumn('date_notz', 'date', array('timezone' => true))->addColumn('time_notz', 'timestamp')->save(); $this->assertTrue($this->adapter->hasColumn('tztable', 'timestamp_tz')); $this->assertTrue($this->adapter->hasColumn('tztable', 'time_tz')); $this->assertTrue($this->adapter->hasColumn('tztable', 'date_notz')); $this->assertTrue($this->adapter->hasColumn('tztable', 'time_notz')); $columns = $this->adapter->getColumns('tztable'); foreach ($columns as $column) { if (substr($column->getName(), -4) === 'notz') { $this->assertFalse($column->isTimezone(), 'column: ' . $column->getName()); } else { $this->assertTrue($column->isTimezone(), 'column: ' . $column->getName()); } } }
public function testHasColumnReservedName() { $tableQuoted = new \Phinx\Db\Table('group', array(), $this->adapter); $tableQuoted->addColumn('value', 'string')->save(); $this->assertFalse($tableQuoted->hasColumn('column2')); $this->assertTrue($tableQuoted->hasColumn('value')); }
public function testAddIndexTwoTablesSameIndex() { $table = new \Phinx\Db\Table('table1', array(), $this->adapter); $table->addColumn('email', 'string')->save(); $table2 = new \Phinx\Db\Table('table2', array(), $this->adapter); $table2->addColumn('email', 'string')->save(); $this->assertFalse($table->hasIndex('email')); $this->assertFalse($table2->hasIndex('email')); $table->addIndex('email')->save(); $table2->addIndex('email')->save(); $this->assertTrue($table->hasIndex('email')); $this->assertTrue($table2->hasIndex('email')); }