|
@@ -102,13 +102,14 @@ require_once "tripal_core.schema.api.inc";
|
|
|
*
|
|
|
* @ingroup tripal_chado_api
|
|
|
*/
|
|
|
-function tripal_core_chado_insert($table, $values) {
|
|
|
+function tripal_core_chado_insert($table, $values, $options) {
|
|
|
$insert_values = array();
|
|
|
$chado_db = tripal_db_persistent_chado();
|
|
|
|
|
|
// Determine plan of action
|
|
|
if ($options['statement_name']) {
|
|
|
$prepared = TRUE;
|
|
|
+ $connection = tripal_db_persistent_chado();
|
|
|
if ($options['prepare']) {
|
|
|
$build_sql = TRUE;
|
|
|
}
|
|
@@ -222,10 +223,7 @@ function tripal_core_chado_insert($table, $values) {
|
|
|
// prepare the statement
|
|
|
if ($prepared) {
|
|
|
$prepare_sql = "PREPARE " . $options['statement_name'] . " (" . implode(', ', $idatatypes) . ") AS INSERT INTO {$table} (" . implode(", ", $ifields) . ") VALUES (" . implode(", ", $iplaceholders) . ")";
|
|
|
-
|
|
|
- $previous_db = tripal_db_set_active('chado');
|
|
|
- $status = db_query($prepare_sql);
|
|
|
- tripal_db_set_active($previous_db);
|
|
|
+ $status = chado_query($prepare_sql);
|
|
|
|
|
|
if (!$status) {
|
|
|
watchdog('tripal_core',"tripal_core_chado_insert: not able to prepare '%name' statement for: %sql", array('%name' => $options['statement_name'], '%sql' => $sql), 'WATCHDOG ERROR');
|
|
@@ -240,10 +238,8 @@ function tripal_core_chado_insert($table, $values) {
|
|
|
if ($prepared) {
|
|
|
|
|
|
$sql = "EXECUTE " . $options['statement_name'] . "(" . implode(", ", $itypes) . ")";
|
|
|
+ $result = chado_query($sql, $ivalues);
|
|
|
|
|
|
- $previous_db = tripal_db_set_active('chado');
|
|
|
- $result = db_query($sql, $ivalues);
|
|
|
- tripal_db_set_active($previous_db);
|
|
|
if ($result) {
|
|
|
// add primary keys to values before return
|
|
|
$primary_key = array();
|
|
@@ -1406,10 +1402,17 @@ function tripal_core_exclude_field_from_feature_by_default() {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Use this function instead of db_query() to avoid switching databases
|
|
|
- * when making query to the chado database
|
|
|
+ * Use this function instead of db_query() to avoid switching databases
|
|
|
+ * when making query to the chado database
|
|
|
+ *
|
|
|
+ * Will use a chado persistent connection if it already exists
|
|
|
+ *
|
|
|
+ * @param $sql
|
|
|
+ * The sql statement to execute
|
|
|
*/
|
|
|
function chado_query($sql) {
|
|
|
+ global $active_db;
|
|
|
+
|
|
|
$args = func_get_args();
|
|
|
array_shift($args);
|
|
|
$sql = db_prefix_tables($sql);
|
|
@@ -1418,9 +1421,22 @@ function chado_query($sql) {
|
|
|
}
|
|
|
_db_query_callback($args, TRUE);
|
|
|
$sql = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $sql);
|
|
|
- $previous_db = tripal_db_set_active('chado');
|
|
|
- $results = _db_query($sql);
|
|
|
- tripal_db_set_active($previous_db);
|
|
|
+
|
|
|
+ // Execute the query on the chado database/schema
|
|
|
+ // Use the persistent chado connection if it already exists
|
|
|
+ $persistent_connection = variable_get('tripal_perisistent_chado',NULL);
|
|
|
+ if ($persistent_connection) {
|
|
|
+ $previously_active_db = $active_db;
|
|
|
+ $active_db = $persistent_connection;
|
|
|
+ $results = _db_query($sql);
|
|
|
+ $active_db = $previously_active_db;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $previous_db = tripal_db_set_active('chado');
|
|
|
+ $results = _db_query($sql);
|
|
|
+ tripal_db_set_active($previous_db);
|
|
|
+ }
|
|
|
+
|
|
|
return $results;
|
|
|
}
|
|
|
|
|
@@ -1860,7 +1876,7 @@ function tripal_db_set_active($dbname) {
|
|
|
* @return
|
|
|
* A postgresql connection object which can be used by pg_prepare, pg_execute, etc.
|
|
|
*/
|
|
|
-function tripal_db_persistent_chado () {
|
|
|
+function tripal_db_persistent_chado() {
|
|
|
global $db_url;
|
|
|
|
|
|
// get connection if it already exists
|
|
@@ -1891,7 +1907,6 @@ function tripal_db_release_persistent_chado () {
|
|
|
variable_del('tripal_perisistent_chado');
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* Purpose: Get max rank for a given set of criteria
|
|
|
* This function was developed with the many property tables in chado in mind
|