diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..757fee3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea \ No newline at end of file diff --git a/README.md b/README.md index eb262e3..16104f2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,20 @@ # DM DB driver for Laravel 4|5|6|7|8|9 via DM8 +## 查询写法 +> 1. 使用 `selectRaw` 或者 `DB::raw` 函数查询时,如果当前数据库是忽略大小写的,一律返回小写字段名, + + +## 推荐更新版本到最新版 + +> 修改部分适配 Laravel +> 1. 适配 InsertGetId,当表主键非 id 时,需要指定主键列名 +> 2. 修复 DmBuilder 中 DmAutoIncrementHelper 引用 +> 3. 适配 withCount, 主要是 x_table as y 情况 前缀补充,原包,没有在 y 前面追加前缀,和 Laravel 不兼容 +> 4. 适配 cast json ,数组参数转 json 入库 +> 5. 兼容 mysql group_concat 函数,内部转化为 wm_concat 函数 +> 6. 修复表单验证中 exists 和 unique,去除对 getCount 和 getMultiCount 的重写。原包是对 oracle 进行大小写不敏感设置,但是达梦数据库不支持 +> 7. 修复自动递增,匹配 laravel migration。原包中将 migration 中的 int 和 bigint 均转化为 number 无法使 auto_increment 生效 + ## Laravel-DM8 Laravel-DM8 is an Dm Database Driver package for [Laravel](http://laravel.com/). Laravel-DM8 is an extension of [Illuminate/Database](https://github.com/illuminate/database) that uses [DM8](https://eco.dameng.com/document/dm/zh-cn/faq/faq-php.html#PHP-Startup-Unable-to-load-dynamic-library) extension to communicate with Dm. Thanks to @yajra. @@ -29,7 +44,7 @@ Laravel-DM8 is an Dm Database Driver package for [Laravel](http://laravel.com/). ## Quick Installation ```bash -composer require jackfinal/laravel-dm8 +composer require maxlcoder/laravel-dm8 ``` ## Service Provider (Optional on Laravel 5.5+) diff --git a/composer.json b/composer.json index a578781..87a806d 100644 --- a/composer.json +++ b/composer.json @@ -1,11 +1,11 @@ { - "name": "jackfinal/laravel-dm8", + "name": "maxlcoder/laravel-dm8", "description": "php_dm dm8", "license": "MIT", "authors": [ { - "name": "Jack Final", - "email": "final_m@foxmail.com" + "name": "Woody", + "email": "liurenlin77@gmail.com" } ], "require": { diff --git a/src/Dm8/Connectors/DmConnector.php b/src/Dm8/Connectors/DmConnector.php index 0a30ba8..6e120af 100755 --- a/src/Dm8/Connectors/DmConnector.php +++ b/src/Dm8/Connectors/DmConnector.php @@ -15,7 +15,7 @@ class DmConnector extends Connector implements ConnectorInterface * @var array */ protected $options = [ - PDO::ATTR_CASE => PDO::CASE_LOWER, + PDO::ATTR_CASE => PDO::CASE_NATURAL, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, diff --git a/src/Dm8/Dm8Connection.php b/src/Dm8/Dm8Connection.php index 92b93a1..d9fd767 100755 --- a/src/Dm8/Dm8Connection.php +++ b/src/Dm8/Dm8Connection.php @@ -31,12 +31,12 @@ class Dm8Connection extends Connection protected $schema; /** - * @var \Yajra\Oci8\Schema\Sequence + * @var \LaravelDm8\Dm8\Schema\Sequence */ protected $sequence; /** - * @var \Yajra\Oci8\Schema\Trigger + * @var \LaravelDm8\Dm8\Schema\Trigger */ protected $trigger; @@ -107,7 +107,7 @@ public function setSessionVars(array $sessionVars) /** * Get sequence class. * - * @return \Yajra\Oci8\Schema\Sequence + * @return \LaravelDm8\Dm8\Schema\Sequence */ public function getSequence() { @@ -117,8 +117,8 @@ public function getSequence() /** * Set sequence class. * - * @param \Yajra\Oci8\Schema\Sequence $sequence - * @return \Yajra\Oci8\Schema\Sequence + * @param \LaravelDm8\Dm8\Schema\Sequence $sequence + * @return \LaravelDm8\Dm8\Schema\Sequence */ public function setSequence(Sequence $sequence) { @@ -138,8 +138,8 @@ public function getTrigger() /** * Set oracle trigger class. * - * @param \Yajra\Oci8\Schema\Trigger $trigger - * @return \Yajra\Oci8\Schema\Trigger + * @param \LaravelDm8\Dm8\Schema\Trigger $trigger + * @return \LaravelDm8\Dm8\Schema\Trigger */ public function setTrigger(Trigger $trigger) { @@ -191,11 +191,11 @@ public function setDateFormat($format = 'YYYY-MM-DD HH24:MI:SS') /** * Get doctrine driver. * - * @return \Doctrine\DBAL\Driver\OCI8\Driver|\Yajra\Oci8\PDO\Oci8Driver + * @return \Doctrine\DBAL\Driver\OCI8\Driver|\LaravelDm8\Dm8\PDO\DmDriver */ protected function getDoctrineDriver() { - return class_exists(Version::class) ? new DoctrineDriver : new Oci8Driver(); + return class_exists(Version::class) ? new DoctrineDriver : new DmDriver(); } /** @@ -326,7 +326,7 @@ public function createStatementFromFunction($functionName, array $bindings) /** * Get the default query grammar instance. * - * @return \Illuminate\Database\Grammar|\Yajra\Oci8\Query\Grammars\OracleGrammar + * @return \Illuminate\Database\Grammar|\LaravelDm8\Dm8\Query\Grammars\DmGrammar */ protected function getDefaultQueryGrammar() { @@ -336,7 +336,7 @@ protected function getDefaultQueryGrammar() /** * Set the table prefix and return the grammar. * - * @param \Illuminate\Database\Grammar|\Yajra\Oci8\Query\Grammars\OracleGrammar|\Yajra\Oci8\Schema\Grammars\OracleGrammar $grammar + * @param \Illuminate\Database\Grammar|\LaravelDm8\Dm8\Query\Grammars\DmGrammar|\LaravelDm8\Dm8\Schema\Grammars\DmGrammar $grammar * @return \Illuminate\Database\Grammar */ public function withTablePrefix(Grammar $grammar) @@ -347,7 +347,7 @@ public function withTablePrefix(Grammar $grammar) /** * Set the schema prefix and return the grammar. * - * @param \Illuminate\Database\Grammar|\Yajra\Oci8\Query\Grammars\OracleGrammar|\Yajra\Oci8\Schema\Grammars\OracleGrammar $grammar + * @param \Illuminate\Database\Grammar|\LaravelDm8\Dm8\Query\Grammars\DmGrammar|\LaravelDm8\Dm8\Schema\Grammars\DmGrammar $grammar * @return \Illuminate\Database\Grammar */ public function withSchemaPrefix(Grammar $grammar) @@ -370,7 +370,7 @@ protected function getConfigSchemaPrefix() /** * Get the default schema grammar instance. * - * @return \Illuminate\Database\Grammar|\Yajra\Oci8\Schema\Grammars\OracleGrammar + * @return \Illuminate\Database\Grammar|\LaravelDm8\Dm8\Schema\Grammars\DmGrammar */ protected function getDefaultSchemaGrammar() { @@ -380,7 +380,7 @@ protected function getDefaultSchemaGrammar() /** * Get the default post processor instance. * - * @return \Yajra\Oci8\Query\Processors\OracleProcessor + * @return \LaravelDm8\Dm8\Query\Processors\DmProcessor */ protected function getDefaultPostProcessor() { @@ -452,23 +452,23 @@ protected function causedByLostConnection(Throwable $e) } /** - * Set oracle NLS session to case insensitive search & sort. + * Set dm NLS session to case insensitive search & sort. * * @return $this */ public function useCaseInsensitiveSession() { - return $this->setSessionVars(['NLS_COMP' => 'LINGUISTIC', 'NLS_SORT' => 'BINARY_CI']); + return $this->setSessionVars(['CASE_SENSITIVE' => 'FALSE']); } /** - * Set oracle NLS session to case sensitive search & sort. + * Set dm NLS session to case sensitive search & sort. * * @return $this */ public function useCaseSensitiveSession() { - return $this->setSessionVars(['NLS_COMP' => 'BINARY', 'NLS_SORT' => 'BINARY']); + return $this->setSessionVars(['CASE_SENSITIVE' => 'TRUE']); } /** diff --git a/src/Dm8/Eloquent/DmEloquent.php b/src/Dm8/Eloquent/DmEloquent.php index 7f4652d..9efbfce 100644 --- a/src/Dm8/Eloquent/DmEloquent.php +++ b/src/Dm8/Eloquent/DmEloquent.php @@ -6,8 +6,8 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Query\Builder as IlluminateQueryBuilder; use LaravelDm8\Dm8\Dm8Connection; -use LaravelDm8\Dm8\Query\Grammars\OracleGrammar; -use LaravelDm8\Dm8\Query\OracleBuilder as QueryBuilder; +use LaravelDm8\Dm8\Query\Grammars\DmGrammar; +use LaravelDm8\Dm8\Query\DmBuilder as QueryBuilder; class DmEloquent extends Model { @@ -161,14 +161,14 @@ public function getQualifiedKeyName() /** * Get a new query builder instance for the connection. * - * @return \Illuminate\Database\Query\Builder|\Yajra\Oci8\Query\OracleBuilder + * @return \Illuminate\Database\Query\Builder|\LaravelDm8\Dm8\Query\DmBuilder */ protected function newBaseQueryBuilder() { $conn = $this->getConnection(); $grammar = $conn->getQueryGrammar(); - if ($grammar instanceof OracleGrammar) { + if ($grammar instanceof DmGrammar) { return new QueryBuilder($conn, $grammar, $conn->getPostProcessor()); } diff --git a/src/Dm8/Query/DmBuilder.php b/src/Dm8/Query/DmBuilder.php index 198cb17..7909af6 100644 --- a/src/Dm8/Query/DmBuilder.php +++ b/src/Dm8/Query/DmBuilder.php @@ -2,7 +2,10 @@ namespace LaravelDm8\Dm8\Query; +use Closure; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Database\Eloquent\Builder as EloquentBuilder; +use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Expression; @@ -70,14 +73,14 @@ public function getCountForPagination($columns = ['*']) */ public function insertLob(array $values, array $binaries, $sequence = 'id') { - /** @var \Yajra\Oci8\Query\Grammars\OracleGrammar $grammar */ + /** @var \LaravelDm8\Dm8\Query\Grammars\DmGrammar $grammar */ $grammar = $this->grammar; $sql = $grammar->compileInsertLob($this, $values, $binaries, $sequence); $values = $this->cleanBindings($values); $binaries = $this->cleanBindings($binaries); - /** @var \Yajra\Oci8\Query\Processors\OracleProcessor $processor */ + /** @var \LaravelDm8\Dm8\Query\Processors\DmProcessor $processor */ $processor = $this->processor; return $processor->saveLob($this, $sql, $values, $binaries); @@ -95,14 +98,14 @@ public function updateLob(array $values, array $binaries, $sequence = 'id') { $bindings = array_values(array_merge($values, $this->getBindings())); - /** @var \Yajra\Oci8\Query\Grammars\OracleGrammar $grammar */ + /** @var \LaravelDm8\Dm8\Query\Grammars\DmGrammar $grammar */ $grammar = $this->grammar; $sql = $grammar->compileUpdateLob($this, $values, $binaries, $sequence); $values = $this->cleanBindings($bindings); $binaries = $this->cleanBindings($binaries); - /** @var \Yajra\Oci8\Query\Processors\OracleProcessor $processor */ + /** @var \LaravelDm8\Dm8\Query\Processors\DmProcessor $processor */ $processor = $this->processor; return $processor->saveLob($this, $sql, $values, $binaries); @@ -117,7 +120,7 @@ public function updateLob(array $values, array $binaries, $sequence = 'id') * @param mixed $values * @param string $boolean * @param bool $not - * @return \Illuminate\Database\Query\Builder|\Yajra\Oci8\Query\OracleBuilder + * @return \Illuminate\Database\Query\Builder|\LaravelDm8\Dm8\Query\DmBuilder */ public function whereIn($column, $values, $boolean = 'and', $not = false) { @@ -148,15 +151,23 @@ public function whereIn($column, $values, $boolean = 'and', $not = false) */ protected function runSelect() { + $expression = $this->toSql(); + if (strpos($expression, ' group_concat(') !== false) { + $expression = str_replace(' group_concat(', ' wm_concat(', $expression); + } + if (strpos($expression, ' GROUP_CONCAT(') !== false) { + $expression = str_replace(' GROUP_CONCAT(', ' WM_CONCAT(', $expression); + } + if ($this->lock) { $this->connection->beginTransaction(); - $result = $this->connection->select($this->toSql(), $this->getBindings(), ! $this->useWritePdo); + $result = $this->connection->select($expression, $this->getBindings(), ! $this->useWritePdo); $this->connection->commit(); return $result; } - return $this->connection->select($this->toSql(), $this->getBindings(), ! $this->useWritePdo); + return $this->connection->select($expression, $this->getBindings(), ! $this->useWritePdo); } /** @@ -260,4 +271,30 @@ public function clone() { return clone $this; } + + + /** + * Add a new "raw" select expression to the query. + * 达梦函数转化 + * + * @param string $expression + * @param array $bindings + * @return $this + */ + public function selectRaw($expression, array $bindings = []) + { + if (strpos($expression, ' group_concat(') !== false) { + $expression = str_replace(' group_concat(', ' wm_concat(', $expression); + } + if (strpos($expression, ' GROUP_CONCAT(') !== false) { + $expression = str_replace(' GROUP_CONCAT(', ' WM_CONCAT(', $expression); + } + $this->addSelect(new Expression($expression)); + + if ($bindings) { + $this->addBinding($bindings, 'select'); + } + + return $this; + } } diff --git a/src/Dm8/Query/Grammars/DmGrammar.php b/src/Dm8/Query/Grammars/DmGrammar.php index 2f735c1..5b8666f 100644 --- a/src/Dm8/Query/Grammars/DmGrammar.php +++ b/src/Dm8/Query/Grammars/DmGrammar.php @@ -233,7 +233,7 @@ public function wrapTable($table) $tableName = $this->wrap($this->tablePrefix.$table, true); $segments = explode(' ', $table); if (count($segments) > 1) { - $tableName = $this->wrap($this->tablePrefix.$segments[0]).' '.$segments[1]; + $tableName = $this->wrap($this->tablePrefix.$segments[0]).' ' . $this->tablePrefix . $segments[1]; } return $this->getSchemaPrefix().$tableName; @@ -282,23 +282,23 @@ protected function wrapValue($value) * @param string $sequence * @return string */ - public function compileInsertGetId(Builder $query, $values, $sequence = 'id') - { - if (empty($sequence)) { - $sequence = 'id'; - } + public function compileInsertGetId(Builder $query, $values, $sequence = 'id') + { + if (empty($sequence)) { + $sequence = 'id'; + } - $backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 4)[2]['object']; + $backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 4)[2]['object']; - if ($backtrace instanceof EloquentBuilder) { - $model = $backtrace->getModel(); - if ($model->sequence && ! isset($values[$model->getKeyName()]) && $model->incrementing) { - $values[$sequence] = null; - } - } + if ($backtrace instanceof EloquentBuilder) { + $model = $backtrace->getModel(); + if ($model->sequence && ! isset($values[$model->getKeyName()]) && $model->incrementing) { + $values[$sequence] = null; + } + } - return $this->compileInsert($query, $values).' returning '.$this->wrap($sequence).' into ?'; - } + return $this->compileInsert($query, $values).' returning '.$this->wrap($sequence).' into ?'; + } /** * Compile an insert statement into SQL. @@ -590,4 +590,24 @@ protected function compileUnionAggregate(Builder $query) return $sql.' from ('.$this->compileSelect($query).') '.$this->wrapTable('temp_table'); } + + /** + * Prepare the bindings for an update statement. + * + * Booleans, integers, and doubles are inserted into JSON updates as raw values. + * + * @param array $bindings + * @param array $values + * @return array + */ + public function prepareBindingsForUpdate(array $bindings, array $values) + { + $values = collect($values)->reject(function ($value, $column) { + return $this->isJsonSelector($column) && is_bool($value); + })->map(function ($value) { + return is_array($value) ? json_encode($value) : $value; + })->all(); + + return parent::prepareBindingsForUpdate($bindings, $values); + } } diff --git a/src/Dm8/Query/Processors/DmProcessor.php b/src/Dm8/Query/Processors/DmProcessor.php index afd661a..82b85e7 100644 --- a/src/Dm8/Query/Processors/DmProcessor.php +++ b/src/Dm8/Query/Processors/DmProcessor.php @@ -19,25 +19,26 @@ class DmProcessor extends Processor * @param string $sequence * @return int */ - public function processInsertGetId(Builder $query, $sql, $values, $sequence = null) - { - $connection = $query->getConnection(); + public function processInsertGetId(Builder $query, $sql, $values, $sequence = null) + { + $connection = $query->getConnection(); - $connection->recordsHaveBeenModified(); - $start = microtime(true); + $connection->recordsHaveBeenModified(); + $start = microtime(true); - $id = 0; - $parameter = 1; - $statement = $this->prepareStatement($query, $sql); - $values = $this->incrementBySequence($values, $sequence); - $parameter = $this->bindValues($values, $statement, $parameter); - $statement->bindParam($parameter, $id, PDO::PARAM_INT, -1); - $statement->execute(); + $id = 0; + $parameter = 1; + $statement = $this->prepareStatement($query, $sql); + $values = $this->incrementBySequence($values, $sequence); + $parameter = $this->bindValues($values, $statement, $parameter); + $statement->bindParam($parameter, $id, PDO::PARAM_INT, -1); + $statement->execute(); - $connection->logQuery($sql, $values, $start); + $values[] = '?'; + $connection->logQuery($sql, $values, $start); - return (int) $id; - } + return (int) $id; + } /** * Get prepared statement. @@ -48,7 +49,7 @@ public function processInsertGetId(Builder $query, $sql, $values, $sequence = nu */ private function prepareStatement(Builder $query, $sql) { - /** @var \Yajra\Oci8\Oci8Connection $connection */ + /** @var \LaravelDm8\Dm8\Dm8Connection $connection */ $connection = $query->getConnection(); $pdo = $connection->getPdo(); @@ -69,9 +70,9 @@ protected function incrementBySequence(array $values, $sequence) if (! isset($builderArgs[1][0][$sequence])) { if ($builder instanceof EloquentBuilder) { - /** @var \Yajra\Oci8\Eloquent\OracleEloquent $model */ + /** @var \LaravelDm8\Dm8\Eloquent\DmEloquent $model */ $model = $builder->getModel(); - /** @var \Yajra\Oci8\Oci8Connection $connection */ + /** @var \LaravelDm8\Dm8\Dm8Connection $connection */ $connection = $model->getConnection(); if ($model->sequence && $model->incrementing) { $values[] = (int) $connection->getSequence()->nextValue($model->sequence); diff --git a/src/Dm8/Schema/Comment.php b/src/Dm8/Schema/Comment.php index 03fec00..586814e 100644 --- a/src/Dm8/Schema/Comment.php +++ b/src/Dm8/Schema/Comment.php @@ -26,9 +26,9 @@ public function __construct(Connection $connection) /** * Set table and column comments. * - * @param \Yajra\Oci8\Schema\OracleBlueprint $blueprint + * @param \LaravelDm8\Dm8\Schema\DmBlueprint $blueprint */ - public function setComments(OracleBlueprint $blueprint) + public function setComments(DmBlueprint $blueprint) { $this->commentTable($blueprint); @@ -41,9 +41,9 @@ public function setComments(OracleBlueprint $blueprint) * Run the comment on table statement. * Comment set by $table->comment = 'comment';. * - * @param \Yajra\Oci8\Schema\OracleBlueprint $blueprint + * @param \LaravelDm8\Dm8\Schema\DmBlueprint $blueprint */ - private function commentTable(OracleBlueprint $blueprint) + private function commentTable(DmBlueprint $blueprint) { $table = $this->wrapValue($blueprint->getTable()); @@ -67,9 +67,9 @@ protected function wrapValue($value) * Add comments set via fluent setter. * Comments set by $table->string('column')->comment('comment');. * - * @param \Yajra\Oci8\Schema\OracleBlueprint $blueprint + * @param \LaravelDm8\Dm8\Schema\DmBlueprint $blueprint */ - private function fluentComments(OracleBlueprint $blueprint) + private function fluentComments(DmBlueprint $blueprint) { foreach ($blueprint->getColumns() as $column) { if (isset($column['comment'])) { @@ -98,9 +98,9 @@ private function commentColumn($table, $column, $comment) * Add comments on columns. * Comments set by $table->commentColumns = ['column' => 'comment'];. * - * @param \Yajra\Oci8\Schema\OracleBlueprint $blueprint + * @param \LaravelDm8\Dm8\Schema\DmBlueprint $blueprint */ - private function commentColumns(OracleBlueprint $blueprint) + private function commentColumns(DmBlueprint $blueprint) { foreach ($blueprint->commentColumns as $column => $comment) { $this->commentColumn($blueprint->getTable(), $column, $comment); diff --git a/src/Dm8/Schema/DmAutoIncrementHelper.php b/src/Dm8/Schema/DmAutoIncrementHelper.php index 57b1fd5..6ce3043 100644 --- a/src/Dm8/Schema/DmAutoIncrementHelper.php +++ b/src/Dm8/Schema/DmAutoIncrementHelper.php @@ -13,12 +13,12 @@ class DmAutoIncrementHelper protected $connection; /** - * @var \Yajra\Oci8\Schema\Trigger + * @var \LaravelDm8\Dm8\Schema\Trigger */ protected $trigger; /** - * @var \Yajra\Oci8\Schema\Sequence + * @var \LaravelDm8\Dm8\Schema\Sequence */ protected $sequence; @@ -105,6 +105,7 @@ private function createObjectName($prefix, $table, $col, $type) */ public function dropAutoIncrementObjects($table) { + return true; // drop sequence and trigger object $prefix = $this->connection->getTablePrefix(); // get the actual primary column name from table diff --git a/src/Dm8/Schema/DmBuilder.php b/src/Dm8/Schema/DmBuilder.php index c81a5e9..2757712 100644 --- a/src/Dm8/Schema/DmBuilder.php +++ b/src/Dm8/Schema/DmBuilder.php @@ -9,12 +9,12 @@ class DmBuilder extends Builder { /** - * @var \Yajra\Oci8\Schema\OracleAutoIncrementHelper + * @var \LaravelDm8\Dm8\Schema\DmAutoIncrementHelper */ public $helper; /** - * @var \Yajra\Oci8\Schema\Comment + * @var \LaravelDm8\Dm8\Schema\Comment */ public $comment; @@ -47,7 +47,7 @@ public function create($table, Closure $callback) $this->comment->setComments($blueprint); - $this->helper->createAutoIncrementObjects($blueprint, $table); + // $this->helper->createAutoIncrementObjects($blueprint, $table); } /** @@ -59,7 +59,7 @@ public function create($table, Closure $callback) */ protected function createBlueprint($table, Closure $callback = null) { - $blueprint = new OracleBlueprint($table, $callback); + $blueprint = new DmBlueprint($table, $callback); $blueprint->setTablePrefix($this->connection->getTablePrefix()); return $blueprint; @@ -131,7 +131,7 @@ public function dropIfExists($table) */ public function hasTable($table) { - /** @var \Yajra\Oci8\Schema\Grammars\OracleGrammar $grammar */ + /** @var \LaravelDm8\Dm8\Schema\Grammars\DmGrammar $grammar */ $grammar = $this->grammar; $sql = $grammar->compileTableExists(); @@ -154,7 +154,7 @@ public function getColumnListing($table) { $database = $this->connection->getConfig('username'); $table = $this->connection->getTablePrefix().$table; - /** @var \Yajra\Oci8\Schema\Grammars\OracleGrammar $grammar */ + /** @var \LaravelDm8\Dm8\Schema\Grammars\DmGrammar $grammar */ $grammar = $this->grammar; $results = $this->connection->select($grammar->compileColumnExists($database, $table)); diff --git a/src/Dm8/Schema/Grammars/DmGrammar.php b/src/Dm8/Schema/Grammars/DmGrammar.php index 8bf0676..7fa290e 100644 --- a/src/Dm8/Schema/Grammars/DmGrammar.php +++ b/src/Dm8/Schema/Grammars/DmGrammar.php @@ -454,6 +454,23 @@ public function compileRenameColumn(Blueprint $blueprint, Fluent $command, Conne return (array) $rs; } + + /** + * Compile a table comment command. + * + * @param \Illuminate\Database\Schema\Blueprint $blueprint + * @param \Illuminate\Support\Fluent $command + * @return string + */ + public function compileTableComment(Blueprint $blueprint, Fluent $command) + { + return sprintf('COMMENT ON TABLE %s is %s', + $this->wrapTable($blueprint), + "'".str_replace("'", "''", $command->comment)."'" + ); + } + + /** * Create the column definition for a char type. * @@ -528,9 +545,7 @@ protected function typeLongText(Fluent $column) */ protected function typeInteger(Fluent $column) { - $length = ($column->length) ? $column->length : 10; - - return "number({$length},0)"; + return 'int'; } /** @@ -541,9 +556,7 @@ protected function typeInteger(Fluent $column) */ protected function typeBigInteger(Fluent $column) { - $length = ($column->length) ? $column->length : 19; - - return "number({$length},0)"; + return 'bigint'; } /** @@ -554,9 +567,7 @@ protected function typeBigInteger(Fluent $column) */ protected function typeMediumInteger(Fluent $column) { - $length = ($column->length) ? $column->length : 7; - - return "number({$length},0)"; + return 'int'; } /** @@ -567,9 +578,7 @@ protected function typeMediumInteger(Fluent $column) */ protected function typeSmallInteger(Fluent $column) { - $length = ($column->length) ? $column->length : 5; - - return "number({$length},0)"; + return 'smallint'; } /** @@ -580,9 +589,7 @@ protected function typeSmallInteger(Fluent $column) */ protected function typeTinyInteger(Fluent $column) { - $length = ($column->length) ? $column->length : 3; - - return "number({$length},0)"; + return 'tinyint'; } /** @@ -593,7 +600,7 @@ protected function typeTinyInteger(Fluent $column) */ protected function typeFloat(Fluent $column) { - return "number({$column->total}, {$column->places})"; + return $this->typeDouble($column); } /** @@ -604,7 +611,11 @@ protected function typeFloat(Fluent $column) */ protected function typeDouble(Fluent $column) { - return "number({$column->total}, {$column->places})"; + if ($column->total && $column->places) { + return "double({$column->total}, {$column->places})"; + } + + return 'double'; } /** @@ -615,7 +626,7 @@ protected function typeDouble(Fluent $column) */ protected function typeDecimal(Fluent $column) { - return "number({$column->total}, {$column->places})"; + return "decimal({$column->total}, {$column->places})"; } /** @@ -626,7 +637,7 @@ protected function typeDecimal(Fluent $column) */ protected function typeBoolean(Fluent $column) { - return 'char(1)'; + return 'tinyint(1)'; } /** @@ -813,6 +824,7 @@ protected function modifyIncrement(Blueprint $blueprint, Fluent $column) { if (in_array($column->type, $this->serials) && $column->autoIncrement) { $blueprint->primary($column->name); + return ' auto_increment'; } } diff --git a/src/Dm8/Schema/Sequence.php b/src/Dm8/Schema/Sequence.php index 6787c47..925aab4 100644 --- a/src/Dm8/Schema/Sequence.php +++ b/src/Dm8/Schema/Sequence.php @@ -7,7 +7,7 @@ class Sequence { /** - * @var \Illuminate\Database\Connection|\Yajra\Oci8\Oci8Connection + * @var \Illuminate\Database\Connection|\LaravelDm8\Dm8\Dm8Connection */ protected $connection; diff --git a/src/Dm8/Schema/Trigger.php b/src/Dm8/Schema/Trigger.php index b8f64eb..83bcac6 100644 --- a/src/Dm8/Schema/Trigger.php +++ b/src/Dm8/Schema/Trigger.php @@ -11,7 +11,7 @@ class Trigger use Dm8ReservedWords; /** - * @var \Illuminate\Database\Connection|\Yajra\Oci8\Oci8Connection + * @var \Illuminate\Database\Connection|\LaravelDm8\Dm8\Dm8Connection */ protected $connection; diff --git a/src/Dm8/Validation/Dm8DatabasePresenceVerifier.php b/src/Dm8/Validation/Dm8DatabasePresenceVerifier.php index 4cba752..13efb7c 100755 --- a/src/Dm8/Validation/Dm8DatabasePresenceVerifier.php +++ b/src/Dm8/Validation/Dm8DatabasePresenceVerifier.php @@ -18,20 +18,20 @@ class Dm8DatabasePresenceVerifier extends DatabasePresenceVerifier * @param array $extra * @return int */ - public function getCount($collection, $column, $value, $excludeId = null, $idColumn = null, array $extra = []) - { - $connection = $this->table($collection)->getConnection(); - - if (! $connection instanceof Dm8Connection) { - return parent::getCount($collection, $column, $value, $excludeId, $idColumn, $extra); - } - - $connection->useCaseInsensitiveSession(); - $count = parent::getCount($collection, $column, $value, $excludeId, $idColumn, $extra); - $connection->useCaseSensitiveSession(); - - return $count; - } +// public function getCount($collection, $column, $value, $excludeId = null, $idColumn = null, array $extra = []) +// { +// $connection = $this->table($collection)->getConnection(); +// +// if (! $connection instanceof Dm8Connection) { +// return parent::getCount($collection, $column, $value, $excludeId, $idColumn, $extra); +// } +// +// $connection->useCaseInsensitiveSession(); +// $count = parent::getCount($collection, $column, $value, $excludeId, $idColumn, $extra); +// $connection->useCaseSensitiveSession(); +// +// return $count; +// } /** * Count the number of objects in a collection with the given values. @@ -42,18 +42,18 @@ public function getCount($collection, $column, $value, $excludeId = null, $idCol * @param array $extra * @return int */ - public function getMultiCount($collection, $column, array $values, array $extra = []) - { - $connection = $this->table($collection)->getConnection(); - - if (! $connection instanceof Dm8Connection) { - return parent::getMultiCount($collection, $column, $values, $extra); - } - - $connection->useCaseInsensitiveSession(); - $count = parent::getMultiCount($collection, $column, $values, $extra); - $connection->useCaseSensitiveSession(); - - return $count; - } +// public function getMultiCount($collection, $column, array $values, array $extra = []) +// { +// $connection = $this->table($collection)->getConnection(); +// +// if (! $connection instanceof Dm8Connection) { +// return parent::getMultiCount($collection, $column, $values, $extra); +// } +// +// $connection->useCaseInsensitiveSession(); +// $count = parent::getMultiCount($collection, $column, $values, $extra); +// $connection->useCaseSensitiveSession(); +// +// return $count; +// } }