markTestSkipped('MSSQL does not support explicit value for an IDENTITY column.'); } public function testCastValues() { $model = new Type(); $model->int_col = 123; $model->int_col2 = 456; $model->smallint_col = 42; $model->char_col = '1337'; $model->char_col2 = 'test'; $model->char_col3 = 'test123'; $model->float_col = 3.742; $model->float_col2 = 42.1337; $model->bool_col = true; $model->bool_col2 = false; $model->save(false); /** @var Type $model */ $model = Type::find()->one(); $this->assertSame(123, $model->int_col); $this->assertSame(456, $model->int_col2); $this->assertSame(42, $model->smallint_col); $this->assertSame('1337', trim((string) $model->char_col)); $this->assertSame('test', $model->char_col2); $this->assertSame('test123', $model->char_col3); //$this->assertSame(3.742, $model->float_col); //$this->assertSame(42.1337, $model->float_col2); //$this->assertSame(true, $model->bool_col); //$this->assertSame(false, $model->bool_col2); } /** * @throws Exception */ public function testSaveWithTrigger(): void { $db = $this->getConnection(); // drop trigger if exist $sql = 'IF (OBJECT_ID(N\'[dbo].[test_alert]\') IS NOT NULL) BEGIN DROP TRIGGER [dbo].[test_alert]; END'; $db->createCommand($sql)->execute(); // create trigger $sql = 'CREATE TRIGGER [dbo].[test_alert] ON [dbo].[test_trigger] AFTER INSERT AS BEGIN INSERT INTO [dbo].[test_trigger_alert] ( [stringcol] ) SELECT [stringcol] FROM [inserted] END'; $db->createCommand($sql)->execute(); $record = new TestTrigger(); $record->stringcol = 'test'; $this->assertTrue($record->save(false)); $this->assertEquals(1, $record->id); $testRecord = TestTriggerAlert::findOne(1); $this->assertEquals('test', $testRecord->stringcol); } /** * @throws Exception */ public function testSaveWithComputedColumn(): void { $db = $this->getConnection(); $sql = 'IF OBJECT_ID(\'TESTFUNC\') IS NOT NULL EXEC(\'DROP FUNCTION TESTFUNC\')'; $db->createCommand($sql)->execute(); $sql = 'CREATE FUNCTION TESTFUNC(@Number INT) RETURNS VARCHAR(15) AS BEGIN RETURN (SELECT CONVERT(VARCHAR(15),@Number)) END'; $db->createCommand($sql)->execute(); $sql = 'ALTER TABLE [dbo].[test_trigger] ADD [computed_column] AS dbo.TESTFUNC([ID])'; $db->createCommand($sql)->execute(); $record = new TestTrigger(); $record->stringcol = 'test'; $this->assertTrue($record->save(false)); $this->assertEquals(1, $record->id); } /** * @throws Exception */ public function testSaveWithRowVersionColumn(): void { $db = $this->getConnection(); $sql = 'ALTER TABLE [dbo].[test_trigger] ADD [RV] rowversion'; $db->createCommand($sql)->execute(); $record = new TestTrigger(); $record->stringcol = 'test'; $this->assertTrue($record->save(false)); $this->assertEquals(1, $record->id); $this->assertEquals('test', $record->stringcol); } /** * @throws Exception */ public function testSaveWithRowVersionNullColumn(): void { $db = $this->getConnection(); $sql = 'ALTER TABLE [dbo].[test_trigger] ADD [RV] rowversion NULL'; $db->createCommand($sql)->execute(); $record = new TestTrigger(); $record->stringcol = 'test'; $record->RV = new Expression('DEFAULT'); $this->assertTrue($record->save(false)); $this->assertEquals(1, $record->id); $this->assertEquals('test', $record->stringcol); } }