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');