diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 2681f1e4..f9016505 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -884,6 +884,9 @@ + + + @@ -900,7 +903,14 @@ comment]]> type]]> + + + + + + bindTo($self)($initial)]]> + diff --git a/src/Driver/MySQL/Schema/MySQLColumn.php b/src/Driver/MySQL/Schema/MySQLColumn.php index 28ee7321..b3e3aea1 100644 --- a/src/Driver/MySQL/Schema/MySQLColumn.php +++ b/src/Driver/MySQL/Schema/MySQLColumn.php @@ -112,6 +112,7 @@ class MySQLColumn extends AbstractColumn //Additional types 'json' => 'json', + 'snowflake' => ['type' => 'bigint', 'size' => 20], 'ulid' => ['type' => 'varchar', 'size' => 26], 'uuid' => ['type' => 'varchar', 'size' => 36], ]; diff --git a/src/Driver/Postgres/Schema/PostgresColumn.php b/src/Driver/Postgres/Schema/PostgresColumn.php index f726c203..e0188e24 100644 --- a/src/Driver/Postgres/Schema/PostgresColumn.php +++ b/src/Driver/Postgres/Schema/PostgresColumn.php @@ -181,6 +181,7 @@ class PostgresColumn extends AbstractColumn //Additional types 'json' => 'json', 'jsonb' => 'jsonb', + 'snowflake' => 'bigint', 'ulid' => ['type' => 'character varying', 'size' => 26], 'uuid' => 'uuid', 'point' => 'point', diff --git a/src/Driver/SQLServer/Schema/SQLServerColumn.php b/src/Driver/SQLServer/Schema/SQLServerColumn.php index 9e960698..91382c74 100644 --- a/src/Driver/SQLServer/Schema/SQLServerColumn.php +++ b/src/Driver/SQLServer/Schema/SQLServerColumn.php @@ -98,6 +98,7 @@ class SQLServerColumn extends AbstractColumn //Additional types 'json' => ['type' => 'varchar', 'size' => 0], + 'snowflake' => 'bigint', 'ulid' => ['type' => 'varchar', 'size' => 26], 'uuid' => ['type' => 'varchar', 'size' => 36], ]; diff --git a/src/Driver/SQLite/Schema/SQLiteColumn.php b/src/Driver/SQLite/Schema/SQLiteColumn.php index cef671e0..78d2451f 100644 --- a/src/Driver/SQLite/Schema/SQLiteColumn.php +++ b/src/Driver/SQLite/Schema/SQLiteColumn.php @@ -87,6 +87,7 @@ class SQLiteColumn extends AbstractColumn //Additional types 'json' => 'text', + 'snowflake' => 'bigint', 'ulid' => ['type' => 'varchar', 'size' => 26], 'uuid' => ['type' => 'varchar', 'size' => 36], ]; diff --git a/src/Schema/AbstractColumn.php b/src/Schema/AbstractColumn.php index 283d29ad..34fda068 100644 --- a/src/Schema/AbstractColumn.php +++ b/src/Schema/AbstractColumn.php @@ -50,6 +50,7 @@ * @method $this|AbstractColumn tinyBinary() * @method $this|AbstractColumn longBinary() * @method $this|AbstractColumn json() + * @method $this|AbstractColumn snowflake() * @method $this|AbstractColumn ulid() * @method $this|AbstractColumn uuid() */ diff --git a/src/Schema/AbstractTable.php b/src/Schema/AbstractTable.php index a0eb97ac..20497740 100644 --- a/src/Schema/AbstractTable.php +++ b/src/Schema/AbstractTable.php @@ -51,6 +51,7 @@ * @method AbstractColumn binary($column) * @method AbstractColumn tinyBinary($column) * @method AbstractColumn longBinary($column) + * @method AbstractColumn snowflake($column) * @method AbstractColumn ulid($column) * @method AbstractColumn uuid($column) */ diff --git a/tests/Database/Functional/Driver/Common/Schema/ConsistencyTest.php b/tests/Database/Functional/Driver/Common/Schema/ConsistencyTest.php index d060575b..d5802a9e 100644 --- a/tests/Database/Functional/Driver/Common/Schema/ConsistencyTest.php +++ b/tests/Database/Functional/Driver/Common/Schema/ConsistencyTest.php @@ -360,6 +360,92 @@ public function testTime(): void $this->assertTrue($schema->column('target')->compare($column)); } + public function testSnowflake(): void + { + $schema = $this->schema('table'); + $this->assertFalse($schema->exists()); + + $column = $schema->snowflake('target'); + + $schema->save(); + + $schema = $this->schema('table'); + $this->assertTrue($schema->exists()); + $this->assertTrue($schema->column('target')->compare($column)); + $this->assertSame('int', $schema->column('target')->getType()); + + $this->database->table('table')->insertOne( + [ + 'target' => 7340580095540599922, + ], + ); + + $this->assertEquals( + [ + 'target' => 7340580095540599922, + ], + $this->database->table('table')->select()->fetchAll()[0], + ); + } + + public function testSnowflakeCallingColumnMethod(): void + { + $schema = $this->schema('table'); + $this->assertFalse($schema->exists()); + + $column = $schema->column('target')->snowflake(); + + $schema->save(); + + $schema = $this->schema('table'); + $this->assertTrue($schema->exists()); + $this->assertTrue($schema->column('target')->compare($column)); + $this->assertSame('int', $schema->column('target')->getType()); + + $this->database->table('table')->insertOne( + [ + 'target' => 7340580095540599922, + ], + ); + + $this->assertEquals( + [ + 'target' => 7340580095540599922, + ], + $this->database->table('table')->select()->fetchAll()[0], + ); + } + + public function testSnowflakePrimary(): void + { + $schema = $this->schema('table'); + $this->assertFalse($schema->exists()); + + $column = $schema->snowflake('target')->nullable(false); + $schema->setPrimaryKeys(['target']); + $schema->save(); + + $schema = $this->schema('table'); + $this->assertTrue($schema->exists()); + + $this->assertTrue($schema->column('target')->compare($column)); + $this->assertSame('int', $schema->column('target')->getType()); + $this->assertSame(['target'], $schema->getPrimaryKeys()); + + $this->database->table('table')->insertOne( + [ + 'target' => 7340580095540599922, + ], + ); + + $this->assertEquals( + [ + 'target' => 7340580095540599922, + ], + $this->database->table('table')->select()->fetchAll()[0], + ); + } + public function testUlid(): void { $schema = $this->schema('table');