/** * Executes the statement in unbuffered mode (if possible) * * @internal * * @param fUnbufferedResult $result The object to place the result into * @param array $params The parameters for the statement * @param mixed &$extra A variable to place extra information needed by some database extensions * @param boolean $different If this statement is different than the last statement run on the fDatabase instance * @return void */ public function executeUnbufferedQuery($result, $params, &$extra, $different) { if ($different && $this->used) { $this->regenerateStatement(); } $this->used = TRUE; $extension = $this->database->getExtension(); $connection = $this->database->getConnection(); $statement = $this->statement; $params = $this->prepareParams($params); // For the extensions that require the statement be passed to the result // object, we store it in a stdClass object so the result object knows // not to free it when done $statement_holder = new stdClass(); $statement_holder->statement = NULL; switch ($extension) { case 'ibm_db2': $extra = $statement; if (db2_execute($statement, $params)) { $statement_holder->statement = $statement; } else { $result->setResult(FALSE); } break; case 'mssql': $result->setResult(mssql_query($result->getSQL(), $this->connection, 20)); break; case 'mysql': $result->setResult(mysql_unbuffered_query($result->getSQL(), $this->connection)); break; case 'mysqli': $extra = $this->statement; if ($statement->execute()) { $statement_holder->statement = $statement; } else { $result->setResult(FALSE); } break; case 'oci8': $result->setResult(oci_execute($statement, $this->database->isInsideTransaction() ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS)); break; case 'odbc': $extra = odbc_execute($statement, $params); if ($extra) { odbc_longreadlen($statement, 1048576); odbc_binmode($statement, ODBC_BINMODE_CONVERT); $statement_holder->statement = $statement; } else { $result->setResult($extra); } break; case 'pgsql': $result->setResult(pg_execute($connection, $this->identifier, $params)); break; case 'sqlite': $result->setResult(sqlite_unbuffered_query($connection, $this->database->escape($statement, $params), SQLITE_ASSOC, $extra)); break; case 'sqlsrv': $extra = sqlsrv_execute($statement); if ($extra) { $statement_holder->statement = $statement; } else { $result->setResult($extra); } break; case 'pdo': $extra = $statement->execute(); if ($extra) { $result->setResult($statement); } else { $result->setResult($extra); } break; } if ($statement_holder->statement) { $result->setResult($statement_holder); } return $result; }
/** * Executes an unbuffered SQL query * * @param fUnbufferedResult $result The result object for the query * @return void */ private function executeUnbufferedQuery($result) { $old_level = error_reporting(error_reporting() & ~E_WARNING); if ($this->extension == 'mssql') { $result->setResult(mssql_query($result->getSQL(), $this->connection, 20)); } elseif ($this->extension == 'mysql') { $result->setResult(mysql_unbuffered_query($result->getSQL(), $this->connection)); } elseif ($this->extension == 'mysqli') { $result->setResult(mysqli_query($this->connection, $result->getSQL(), MYSQLI_USE_RESULT)); } elseif ($this->extension == 'oci8') { $oci_statement = oci_parse($this->connection, $result->getSQL()); $result->setResult(oci_execute($oci_statement, $this->inside_transaction ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS) ? $oci_statement : FALSE); } elseif ($this->extension == 'odbc') { $result->setResult(odbc_exec($this->connection, $result->getSQL())); } elseif ($this->extension == 'pgsql') { $result->setResult(pg_query($this->connection, $result->getSQL())); } elseif ($this->extension == 'sqlite') { $result->setResult(sqlite_unbuffered_query($this->connection, $result->getSQL(), SQLITE_ASSOC, $sqlite_error_message)); } elseif ($this->extension == 'sqlsrv') { $result->setResult(sqlsrv_query($this->connection, $result->getSQL())); } elseif ($this->extension == 'pdo') { $result->setResult($this->connection->query($result->getSQL())); } error_reporting($old_level); if ($this->extension == 'sqlite') { $this->checkForError($result, $sqlite_error_message); } elseif ($this->extension == 'oci8') { $this->checkForError($result, $oci_statement); } else { $this->checkForError($result); } }
/** * Executes the statement in unbuffered mode (if possible) * * @internal * * @param fUnbufferedResult $result The object to place the result into * @param array $params The parameters for the statement * @param mixed &$extra A variable to place extra information needed by some database extensions * @param boolean $different If this statement is different than the last statement run on the fDatabase instance * @return void */ public function executeUnbufferedQuery($result, $params, &$extra, $different) { if (is_array($params) && count($params) == 1 && is_array($params[0]) && count($this->placeholders) > 1) { $params = $params[0]; } if ($different && $this->used) { $this->regenerateStatement(); } $this->used = TRUE; $extension = $this->database->getExtension(); if ($extension == 'pdo' && $this->database->getType() == 'mssql') { $extension = 'pdo_dblib'; } $connection = $this->database->getConnection(); $statement = $this->statement; $params = $this->prepareParams($params); // For the extensions that require the statement be passed to the result // object, we store it in a stdClass object so the result object knows // not to free it when done $statement_holder = new stdClass(); $statement_holder->statement = NULL; switch ($extension) { case 'ibm_db2': $extra = $statement; if (db2_execute($statement, $params)) { $statement_holder->statement = $statement; } else { $result->setResult(FALSE); } break; case 'mssql': $result->setResult(mssql_query($result->getSQL(), $this->connection, 20)); break; case 'mysql': $result->setResult(mysql_unbuffered_query($result->getSQL(), $this->connection)); break; case 'mysqli': $extra = $this->statement; if ($statement->execute()) { $statement_holder->statement = $statement; } else { $result->setResult(FALSE); } break; case 'oci8': $result->setResult(oci_execute($statement, $this->database->isInsideTransaction() ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS)); break; case 'pgsql': $result->setResult(pg_execute($connection, $this->identifier, $params)); break; case 'sqlite': $result->setResult(sqlite_unbuffered_query($connection, $this->database->escape($statement, $params), SQLITE_ASSOC, $extra)); break; case 'sqlsrv': $extra = sqlsrv_execute($statement); if ($extra) { $statement_holder->statement = $statement; } else { $result->setResult($extra); } break; case 'pdo': $extra = $statement->execute(); if ($extra) { $result->setResult($statement); } else { $result->setResult($extra); } break; case 'pdo_dblib': $sql = $this->database->escape($statement, $params); $result->setResult($res = $connection->query($sql)); break; } if ($statement_holder->statement) { $result->setResult($statement_holder); } return $result; }