Skip to content

Commit

Permalink
Added support for halfvec, bit, and sparsevec types to Laravel schema
Browse files Browse the repository at this point in the history
  • Loading branch information
ankane committed May 17, 2024
1 parent f6cff70 commit 0d6279c
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
36 changes: 36 additions & 0 deletions src/laravel/Schema.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,44 @@ public static function register()
}
});

PostgresGrammar::macro('typeHalfvec', function (ColumnDefinition $column) {
if ($column->get('dimensions')) {
return 'halfvec(' . intval($column->get('dimensions')) . ')';
} else {
return 'halfvec';
}
});

PostgresGrammar::macro('typeBit', function (ColumnDefinition $column) {
if ($column->get('length')) {
return 'bit(' . intval($column->get('length')) . ')';
} else {
return 'bit';
}
});

PostgresGrammar::macro('typeSparsevec', function (ColumnDefinition $column) {
if ($column->get('dimensions')) {
return 'sparsevec(' . intval($column->get('dimensions')) . ')';
} else {
return 'sparsevec';
}
});

Blueprint::macro('vector', function ($column, $dimensions = null) {
return $this->addColumn('vector', $column, compact('dimensions'));
});

Blueprint::macro('halfvec', function ($column, $dimensions = null) {
return $this->addColumn('halfvec', $column, compact('dimensions'));
});

Blueprint::macro('bit', function ($column, $length = null) {
return $this->addColumn('bit', $column, compact('length'));
});

Blueprint::macro('sparsevec', function ($column, $dimensions = null) {
return $this->addColumn('sparsevec', $column, compact('dimensions'));
});
}
}
3 changes: 3 additions & 0 deletions tests/LaravelTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
Capsule::schema()->create('items', function ($table) {
$table->increments('id');
$table->vector('embedding', 3)->nullable();
$table->halfvec('half_embedding', 3)->nullable();
$table->bit('binary_embedding', 3)->nullable();
$table->sparsevec('sparse_embedding', 3)->nullable();
});

class Item extends Model
Expand Down

0 comments on commit 0d6279c

Please sign in to comment.