<?php
namespace ShSo\Lacassa\Schema;
use Illuminate\Database\Connection;
use Illuminate\Database\Schema\Blueprint as BaseBluprint;
use Illuminate\Database\Schema\Grammars\Grammar as BaseGrammar;
class Blueprint extends BaseBluprint
{
/**
* The Cassandra object for this blueprint.
*
* @var MongoConnection
*/
protected $connection;
protected $primary;
/**
* @return void
*/
public function __construct(Connection $connection, $table)
{
$this->connection = $connection;
$this->table = $table;
}
/**
* Get the columns on the blueprint that should be added.
*
* @return array
*/
public function getAddedColumns()
{
return array_filter(
$this->columns, function ($column) {
return !$column->change;
}
);
}
/**
* Get the raw SQL statements for the blueprint.
*
* @param \Illuminate\Database\Connection $connection
* @param \Illuminate\Database\Schema\Grammars\Grammar $grammar
*
* @return array
*/
public function toSql(Connection $connection, BaseGrammar $grammar)
{
$this->addImpliedCommands();
$statements = [];
// Each type of command has a corresponding compiler function on the schema
// grammar which is used to build the necessary SQL statements to build
// the blueprint element, so we'll just call that compilers function.
foreach ($this->commands as $command) {
$method = 'compile'.ucfirst($command->name);
if (method_exists($grammar, $method)) {
if (!is_null($sql = $grammar->$method($this, $command, $connection))) {
$statements = array_merge($statements, (array) $sql);
}
}
}
return $statements;
}
/**
* Specify the primary key(s) for the table.
*
* @param string|array $columns
* @param string $name
* @param string|null $algorithm
*
* @return \Illuminate\Support\Fluent
*/
public function primary($columns, $name = null, $algorithm = null)
{
$columns = (array) $columns;
//$index = $index ?: $this->createIndexName($type, $columns);
$this->primary = $command = $this->createCommand('primary', compact('columns', 'algorithm'));
return $command;
}
/**
* @return void
*/
public function compilePrimary()
{
$primaryKey = $this->primary;
if ($primaryKey) {
if ('primary' == $primaryKey->name) {
return sprintf('primary key (%s) ', implode(', ', $primaryKey->columns));
}
}
}
/**
* Create a new ascii column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function ascii($column)
{
return $this->addColumn('ascii', $column);
}
/**
* Create a new bigint column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function bigint($column)
{
return $this->addColumn('bigint', $column);
}
/**
* Create a new blob column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function blob($column)
{
return $this->addColumn('blob', $column);
}
/**
* Create a new boolean column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function boolean($column)
{
return $this->addColumn('boolean', $column);
}
/**
* Create a new counter column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function counter($column)
{
return $this->addColumn('counter', $column);
}
/**
* Create a new frozen column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function frozen($column)
{
return $this->addColumn('frozen', $column);
}
/**
* Create a new inet column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function inet($column)
{
return $this->addColumn('inet', $column);
}
/**
* Create a new int column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function int($column)
{
return $this->addColumn('int', $column);
}
/**
* Create a new list column on the table.
*
* @param string $column
* @param string $collectionType
*
* @return \Illuminate\Support\Fluent
*/
public function listCollection($column, $collectionType)
{
return $this->addColumn('list', $column, compact('collectionType'));
}
/**
* Create a new map column on the table.
*
* @param string $column
* @param string $collectionType1
* @param string $collectionType2
*
* @return \Illuminate\Support\Fluent
*/
public function mapCollection($column, $collectionType1, $collectionType2)
{
return $this->addColumn('map', $column, compact('collectionType1', 'collectionType2'));
}
/**
* Create a new set column on the table.
*
* @param string $column
* @param string $collectionType
*
* @return \Illuminate\Support\Fluent
*/
public function setCollection($column, $collectionType)
{
return $this->addColumn('set', $column, compact('collectionType'));
}
/**
* Create a new timestamp column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function timestamp($column)
{
return $this->addColumn('timestamp', $column);
}
/**
* Create a new timeuuid column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function timeuuid($column)
{
return $this->addColumn('timeuuid', $column);
}
/**
* Create a new tuple column on the table.
*
* @param string $column
* @param string $tuple1type
* @param string $tuple2type
* @param string $tuple3type
*
* @return \Illuminate\Support\Fluent
*/
public function tuple($column, $tuple1type, $tuple2type, $tuple3type)
{
return $this->addColumn('tuple', $column, compact('tuple1type', 'tuple2type', 'tuple3type'));
}
/**
* Create a new uuid column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function uuid($column)
{
return $this->addColumn('uuid', $column);
}
/**
* Create a new varchar column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function varchar($column)
{
return $this->addColumn('varchar', $column);
}
/**
* Create a new varint column on the table.
*
* @param string $column
*
* @return \Illuminate\Support\Fluent
*/
public function varint($column)
{
return $this->addColumn('varint', $column);
}
}