diff --git a/src/Firebird/Connection.php b/src/Firebird/Connection.php index c507ab3..720b2af 100644 --- a/src/Firebird/Connection.php +++ b/src/Firebird/Connection.php @@ -153,4 +153,28 @@ public function table($table) return $query->from($table); } + + public function beginTransaction() + { + if ( $this->transactions == 0 && $this->pdo->getAttribute(PDO::ATTR_AUTOCOMMIT) == 1 ) { + $this->pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0); + } + parent::beginTransaction(); + } + + public function commit() + { + parent::commit(); + if ( $this->transactions == 0 && $this->pdo->getAttribute(PDO::ATTR_AUTOCOMMIT) == 0 ) { + $this->pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); + } + } + + public function rollBack() + { + parent::rollBack(); + if ( $this->transactions == 0 && $this->pdo->getAttribute(PDO::ATTR_AUTOCOMMIT) == 0 ) { + $this->pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); + } + } } diff --git a/src/Firebird/Query/Grammars/FirebirdGrammar.php b/src/Firebird/Query/Grammars/FirebirdGrammar.php index 5ca4cca..e617349 100644 --- a/src/Firebird/Query/Grammars/FirebirdGrammar.php +++ b/src/Firebird/Query/Grammars/FirebirdGrammar.php @@ -106,4 +106,21 @@ protected function compileOffset(Builder $query, $limit) return 'skip '.(int) $limit; } -} \ No newline at end of file + /** + * Compile an insert and get ID statement into SQL. + * + * @param \Illuminate\Database\Query\Builder $query + * @param array $values + * @param string $sequence + * @return string + */ + public function compileInsertGetId(Builder $query, $values, $sequence) + { + if (is_null($sequence)) { + $sequence = 'id'; + } + + return $this->compileInsert($query, $values).' returning '.$this->wrap($sequence); + } + +} diff --git a/src/Firebird/Query/Processors/FirebirdProcessor.php b/src/Firebird/Query/Processors/FirebirdProcessor.php index c114ca8..c187a24 100644 --- a/src/Firebird/Query/Processors/FirebirdProcessor.php +++ b/src/Firebird/Query/Processors/FirebirdProcessor.php @@ -1,7 +1,46 @@ getConnection()->selectFromWriteConnection($sql, $values); -} \ No newline at end of file + $sequence = $sequence ?: 'id'; + + $result = (array) $results[0]; + + $id = $result[$sequence]; + + return is_numeric($id) ? (int) $id : $id; + } + + /** + * Process the results of a column listing query. + * + * @param array $results + * @return array + */ + public function processColumnListing($results) + { + $mapping = function ($r) { + $r = (object) $r; + + return trim($r->{'RDB$FIELD_NAME'}); + }; + + return array_map($mapping, $results); + } + +} diff --git a/src/Firebird/Schema/Grammars/FirebirdGrammar.php b/src/Firebird/Schema/Grammars/FirebirdGrammar.php index b00fdcd..13eedf4 100644 --- a/src/Firebird/Schema/Grammars/FirebirdGrammar.php +++ b/src/Firebird/Schema/Grammars/FirebirdGrammar.php @@ -31,6 +31,17 @@ public function compileTableExists() return "SELECT RDB\$RELATION_NAME FROM RDB\$RELATIONS WHERE RDB\$RELATION_NAME = ?"; } + /** + * Compile the query to determine the list of columns. + * + * @param string $table + * @return string + */ + public function compileColumnExists($table) + { + return "SELECT RDB\$RELATION_FIELDS.RDB\$FIELD_NAME FROM RDB\$RELATION_FIELDS WHERE RDB\$RELATION_FIELDS.RDB\$RELATION_NAME = '$table' "; + } + /** * Compile a create table command. *