summaryrefslogtreecommitdiff
path: root/src/Query/Grammars/FirebirdGrammar.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Query/Grammars/FirebirdGrammar.php')
-rwxr-xr-xsrc/Query/Grammars/FirebirdGrammar.php32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/Query/Grammars/FirebirdGrammar.php b/src/Query/Grammars/FirebirdGrammar.php
index f7780dd..50cf731 100755
--- a/src/Query/Grammars/FirebirdGrammar.php
+++ b/src/Query/Grammars/FirebirdGrammar.php
@@ -79,6 +79,38 @@ class FirebirdGrammar extends Grammar
}
/**
+ * Compile a delete statement into SQL.
+ *
+ * @param \Illuminate\Database\Query\Builder $query
+ * @return string
+ */
+ public function compileDelete(Builder $query)
+ {
+ if (isset($query->joins) || isset($query->limit)) {
+ return $this->compileDeleteWithJoinsOrLimit($query);
+ }
+
+ return parent::compileDelete($query);
+ }
+
+ /**
+ * Compile a delete statement with joins or limit into SQL.
+ *
+ * @param \Illuminate\Database\Query\Builder $query
+ * @return string
+ */
+ protected function compileDeleteWithJoinsOrLimit(Builder $query)
+ {
+ $table = $this->wrapTable($query->from);
+
+ $alias = last(preg_split('/\s+as\s+/i', $query->from));
+
+ $selectSql = $this->compileSelect($query->select($alias.'.p_id'));
+
+ return "delete from {$table} where {$this->wrap('p_id')} in ({$selectSql})";
+ }
+
+ /**
* Compile the "limit" portions of the query.
*
* @param \Illuminate\Database\Query\Builder $query