summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
Diffstat (limited to 'classes')
-rw-r--r--classes/Misc.php89
-rwxr-xr-xclasses/database/Postgres.php7
-rw-r--r--classes/database/Postgres80.php8
-rwxr-xr-xclasses/plugins/Plugin.php30
-rwxr-xr-xclasses/plugins/Slony.php910
5 files changed, 3 insertions, 1041 deletions
diff --git a/classes/Misc.php b/classes/Misc.php
index fd756ed8..d8e94790 100644
--- a/classes/Misc.php
+++ b/classes/Misc.php
@@ -374,18 +374,6 @@
}
}
break;
- case 'slonystatus':
- switch ($str) {
- case 'insync':
- $out = $lang['strhealthy'];
- break;
- case 'outofsync':
- $out = $lang['stroutofsync'];
- break;
- default:
- $out = $lang['strunknown'];
- }
- break;
default:
// If the string contains at least one instance of >1 space in a row, a tab
// character, a space at the start of a line, or a space at the start of
@@ -671,7 +659,7 @@
* @param $section The name of the tab bar.
*/
function getNavTabs($section) {
- global $data, $lang, $conf, $slony;
+ global $data, $lang, $conf;
$hide_advanced = ($conf['show_advanced'] === false);
@@ -849,14 +837,6 @@
'help' => 'pg.cast',
'icon' => 'Casts',
),
- 'slony' => array (
- 'title' => 'Slony',
- 'url' => 'plugin_slony.php',
- 'urlvars' => array('subject' => 'database', 'action' => 'clusters_properties'),
- 'hide' => !isset($slony),
- 'help' => '',
- 'icon' => 'Replication',
- ),
'export' => array (
'title' => $lang['strexport'],
'url' => 'database.php',
@@ -1159,46 +1139,6 @@
),
);
- case 'slony_cluster':
- return array (
- 'properties' => array (
- 'title' => $lang['strproperties'],
- 'url' => 'plugin_slony.php',
- 'urlvars' => array(
- 'subject' => 'slony_cluster',
- 'action' => 'cluster_properties',
- 'slony_cluster' => field('slony_cluster')
- ),
- 'help' => '',
- 'tree' => false,
- 'icon' => 'Cluster',
- ),
- 'nodes' => array (
- 'title' => $lang['strnodes'],
- 'url' => 'plugin_slony.php',
- 'urlvars' => array(
- 'subject' => 'slony_cluster',
- 'action' => 'nodes_properties',
- 'slony_cluster' => field('slony_cluster')
- ),
- 'branch' => 'nodes',
- 'help' => '',
- 'icon' => 'Nodes',
- ),
- 'sets' => array (
- 'title' => $lang['strrepsets'],
- 'url' => 'plugin_slony.php',
- 'urlvars' => array(
- 'subject' => 'slony_cluster',
- 'action' => 'sets_properties',
- 'slony_cluster' => field('slony_cluster')
- ),
- 'branch' => 'sets',
- 'help' => '',
- 'icon' => 'ReplicationSets',
- ),
- );
-
case 'column':
return array(
'properties' => array (
@@ -1453,17 +1393,6 @@
}
if ($subject == 'schema') $done = true;
- if (isset($_REQUEST['slony_cluster']) && !$done) {
- $trail['slony_cluster'] = array(
- 'title' => 'Slony Cluster',
- 'text' => $_REQUEST['slony_cluster'],
- 'url' => $this->getHREFSubject('slony_cluster'),
- 'help' => 'sl.cluster',
- 'icon' => 'Cluster'
- );
- }
- if ($subject == 'slony_cluster') $done = true;
-
if (isset($_REQUEST['table']) && !$done) {
$trail['table'] = array(
'title' => $lang['strtable'],
@@ -1511,22 +1440,6 @@
'icon' => 'Aggregate'
);
break;
- case 'slony_node':
- $trail[$subject] = array(
- 'title' => 'Slony Node',
- 'text' => $_REQUEST['no_name'],
- 'help' => 'sl.'.$subject,
- 'icon' => 'Node'
- );
- break;
- case 'slony_set':
- $trail[$subject] = array(
- 'title' => $lang['str'.$subject],
- 'text' => $_REQUEST[$subject],
- 'help' => 'sl.'.$subject,
- 'icon' => 'AvailableReplicationSet'
- );
- break;
case 'column':
$trail['column'] = array (
'title' => $lang['strcolumn'],
diff --git a/classes/database/Postgres.php b/classes/database/Postgres.php
index 69073d80..0421989f 100755
--- a/classes/database/Postgres.php
+++ b/classes/database/Postgres.php
@@ -834,15 +834,10 @@ class Postgres extends ADODB_base {
* @return All schemas, sorted alphabetically
*/
function getSchemas() {
- global $conf, $slony;
+ global $conf;
if (!$conf['show_system']) {
$where = "WHERE nspname NOT LIKE 'pg@_%' ESCAPE '@' AND nspname != 'information_schema'";
- if (isset($slony) && $slony->isEnabled()) {
- $temp = $slony->slony_schema;
- $this->clean($temp);
- $where .= " AND nspname != '{$temp}'";
- }
}
else $where = "WHERE nspname !~ '^pg_t(emp_[0-9]+|oast)$'";
diff --git a/classes/database/Postgres80.php b/classes/database/Postgres80.php
index ce15f976..1f29c1cf 100644
--- a/classes/database/Postgres80.php
+++ b/classes/database/Postgres80.php
@@ -110,16 +110,10 @@ class Postgres80 extends Postgres81 {
* @return All schemas, sorted alphabetically
*/
function getSchemas() {
- global $conf, $slony;
+ global $conf;
if (!$conf['show_system']) {
$where = "WHERE nspname NOT LIKE 'pg@_%' ESCAPE '@' AND nspname != 'information_schema'";
- if (isset($slony) && $slony->isEnabled()) {
- $temp = $slony->slony_schema;
- $this->clean($temp);
- $where .= " AND nspname != '{$temp}'";
- }
-
}
else $where = "WHERE nspname !~ '^pg_t(emp_[0-9]+|oast)$'";
$sql = "
diff --git a/classes/plugins/Plugin.php b/classes/plugins/Plugin.php
deleted file mode 100755
index 687d4e2e..00000000
--- a/classes/plugins/Plugin.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-/**
- * A class that implements the plugin system
- *
- * $Id: Plugin.php,v 1.2 2005/06/16 14:40:12 chriskl Exp $
- */
-
-class Plugin {
-
- var $tabname = null;
- var $config = null;
- var $name = null;
-
- /**
- * Constructor
- */
- function Plugin($name) {
- $this->name = $name;
-
- // Read in configuration
- if ($this->config !== null) {
- global $conf;
- include('./conf/' . $name . '.inc.php');
- }
- }
-
-}
-
-?>
diff --git a/classes/plugins/Slony.php b/classes/plugins/Slony.php
deleted file mode 100755
index e73f9dbe..00000000
--- a/classes/plugins/Slony.php
+++ /dev/null
@@ -1,910 +0,0 @@
-<?php
-
-/**
- * A class that implements the Slony 1.0.x support plugin
- *
- * $Id: Slony.php,v 1.15 2007/10/02 21:36:35 ioguix Exp $
- */
-
-include_once('./classes/plugins/Plugin.php');
-
-class Slony extends Plugin {
-
- var $slony_version;
- var $slony_schema;
- var $slony_cluster;
- var $slony_owner;
- var $slony_comment;
- var $enabled = null;
-
- /**
- * Constructor
- */
- function Slony() {
- $this->Plugin('slony');
- $this->isEnabled();
- }
-
- /**
- * Determines whether or not Slony is installed in the current
- * database.
- * @post Will populate version and schema fields, etc.
- * @return True if Slony is installed, false otherwise.
- */
- function isEnabled() {
- // Access cache
- if ($this->enabled !== null) return $this->enabled;
- else $this->enabled = false;
-
- global $data;
-
- // Check for the slonyversion() function and find the schema
- // it's in. We put an order by and limit 1 in here to guarantee
- // only finding the first one, even if there are somehow two
- // Slony schemas.
- $sql = "SELECT pn.nspname AS schema, pu.usename AS owner,
- SUBSTRING(pn.nspname FROM 2) AS cluster,
- pg_catalog.obj_description(pn.oid, 'pg_namespace') AS
- nspcomment
- FROM pg_catalog.pg_proc pp, pg_catalog.pg_namespace pn,
- pg_catalog.pg_user pu
- WHERE pp.pronamespace=pn.oid
- AND pn.nspowner = pu.usesysid
- AND pp.proname='slonyversion'
- AND pn.nspname LIKE '@_%' ESCAPE '@'
- ORDER BY pn.nspname LIMIT 1";
- $rs = $data->selectSet($sql);
- if ($rs->recordCount() == 1) {
- $schema = $rs->fields['schema'];
- $this->slony_schema = $schema;
- $this->slony_owner = $rs->fields['owner'];
- $this->slony_comment = $rs->fields['nspcomment'];
- // Cluster name is schema minus "_" prefix.
- $this->slony_cluster = $rs->fields['cluster'];
- $data->fieldClean($schema);
- $sql = "SELECT \"{$schema}\".slonyversion() AS version";
- $version = $data->selectField($sql, 'version');
- if ($version === -1) return false;
- else {
- $this->slony_version = $version;
- $this->enabled = true;
- return true;
- }
- }
- else return false;
- }
-
- // CLUSTERS
-
- /**
- * Gets the clusters in this database
- */
- function getClusters() {
- include_once('./classes/ArrayRecordSet.php');
-
- if ($this->isEnabled()) {
- $clusters = array(array('cluster' => $this->slony_cluster, 'comment' => $this->slony_comment));
- }
- else
- $clusters = array();
-
- return new ArrayRecordSet($clusters);
- }
-
- /**
- * Gets a single cluster
- */
- function getCluster() {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
-
- $sql = "SELECT no_id, no_comment, \"{$schema}\".slonyversion() AS version
- FROM \"{$schema}\".sl_local_node_id, \"{$schema}\".sl_node
- WHERE no_id=last_value";
-
-
- return $data->selectSet($sql);
- }
-
- /**
- * Drops an entire cluster.
- */
- function dropCluster() {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
-
- $sql = "SELECT \"{$schema}\".uninstallnode(); DROP SCHEMA \"{$schema}\" CASCADE";
-
- $status = $data->execute($sql);
- if ($status == 0) {
- $this->enabled = null;
- $enabled = $this->isEnabled();
- }
- return $status;
- }
-
- /**
- * Helper function to get a file into a string and replace
- * variables.
- * @return The file contents, or FALSE on error.
- */
- function _getFile($file, $cluster) {
- global $data,$misc;
- $schema = '_' . $cluster;
- $data->fieldClean($cluster);
-
- $server_info = $misc->getServerInfo();
- $path = $server_info['slony_sql'] . '/' . $file;
-
- // Check that we can access the file
- if (!file_exists($path) || !is_readable($path)) return false;
-
- $buffer = null;
- $handle = fopen($path, 'r');
- if ($handle === false) return false;
- while (!feof($handle)) {
- $temp = fgets($handle, 4096);
- $temp = str_replace('@CLUSTERNAME@', $cluster, $temp);
-
- $temp = str_replace('@NAMESPACE@', $schema, $temp);
- $buffer .= $temp;
- }
- fclose($handle);
-
- return $buffer;
- }
-
- /**
- * Initializes a new cluster
- */
- function initCluster($name, $no_id, $no_comment) {
- global $data, $misc;
-
- // Prevent timeouts since cluster initialization can be slow
- if (!ini_get('safe_mode')) set_time_limit(0);
-
- $server_info = $misc->getServerInfo();
-
- if (!$data->isSuperUser($server_info['username'])) {
- return -10;
- }
-
- // Determine Slony compatibility version.
- if ($data->major_version == 7.3)
- $ver = '73';
- elseif ($data->major_version >= 7.4)
- $ver = '74';
- else {
- return -11;
- }
-
- $status = $data->beginTransaction();
- if ($status != 0) return -1;
-
- // Create the schema
- $status = $data->createSchema('_' . $name);
- if ($status != 0) {
- $data->rollbackTransaction();
- return -2;
- }
-
- $sql = $this->_getFile("xxid.v{$ver}.sql", $name);
- if ($sql === false) {
- $data->rollbackTransaction();
- return -6;
- }
- $status = $data->execute($sql);
- if ($status != 0) {
- $data->rollbackTransaction();
- return -3;
- }
-
- $sql = $this->_getFile('slony1_base.sql', $name);
- if ($sql === false) {
- $data->rollbackTransaction();
- return -6;
- }
- $status = $data->execute($sql);
- if ($status != 0) {
- $data->rollbackTransaction();
- return -3;
- }
-/* THIS FILE IS EMPTY AND JUST CAUSES ERRORS
- $sql = $this->_getFile('slony1_base.v74.sql', $name);
- $status = $data->execute($sql);
- if ($status != 0) {
- $data->rollbackTransaction();
- return -3;
- }
-*/
- $sql = $this->_getFile('slony1_funcs.sql', $name);
- if ($sql === false) {
- $data->rollbackTransaction();
- return -6;
- }
- $status = $data->execute($sql);
- if ($status != 0) {
- $data->rollbackTransaction();
- return -3;
- }
-
- $sql = $this->_getFile("slony1_funcs.v{$ver}.sql", $name);
- if ($sql === false) {
- $data->rollbackTransaction();
- return -6;
- }
- $status = $data->execute($sql);
- if ($status != 0) {
- $data->rollbackTransaction();
- return -3;
- }
-
- $this->enabled = null;
- $enabled = $this->isEnabled();
- if (!$enabled) {
- $data->rollbackTransaction();
- return -4;
- }
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
- $data->clean($no_comment);
-
- $sql = "SELECT \"{$schema}\".initializelocalnode('{$no_id}', '{$no_comment}'); SELECT \"{$schema}\".enablenode('{$no_id}')";
- $status = $data->execute($sql);
- if ($status != 0) {
- $data->rollbackTransaction();
- return -5;
- }
-
- return $data->endTransaction();
- }
-
- // NODES
-
- /**
- * Gets the nodes in this database
- */
- function getNodes() {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
-
- // We use 10 seconds as the default check time since that is the
- // the default in Slony, and it gives no mechanism to look it up
- $sql = "SELECT no_id, no_active, no_comment, no_spool, ".
- "CASE WHEN st_lag_time > '10 seconds'::interval ".
- "THEN 'outofsync' ELSE 'insync' END AS no_status ".
- "FROM \"{$schema}\".sl_node ".
- "LEFT JOIN \"{$schema}\".sl_status ON (no_id =st_received) ".
- "ORDER BY no_comment";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Gets a single node
- */
- function getNode($no_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
-
- $sql = "SELECT * FROM \"{$schema}\".sl_node WHERE no_id='{$no_id}'";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Creates a node
- */
- function createNode($no_id, $no_comment) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_comment);
- $data->clean($no_id);
-
- if ($no_id != '')
- $sql = "SELECT \"{$schema}\".storenode('{$no_id}', '{$no_comment}')";
- else
- $sql = "SELECT \"{$schema}\".storenode((SELECT COALESCE(MAX(no_id), 0) + 1 FROM \"{$schema}\".sl_node), '{$no_comment}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Drops a node
- */
- function dropNode($no_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
-
- $sql = "SELECT \"{$schema}\".dropnode('{$no_id}')";
-
- return $data->execute($sql);
- }
-
- // REPLICATION SETS
-
- /**
- * Gets the replication sets in this database
- */
- function getReplicationSets() {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
-
- $sql = "SELECT *, set_locked IS NOT NULL AS is_locked FROM \"{$schema}\".sl_set ORDER BY set_id";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Gets a particular replication set
- */
- function getReplicationSet($set_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
-
- $sql = "SELECT *, (SELECT COUNT(*) FROM \"{$schema}\".sl_subscribe ssub WHERE ssub.sub_set=ss.set_id) AS subscriptions,
- set_locked IS NOT NULL AS is_locked
- FROM \"{$schema}\".sl_set ss, \"{$schema}\".sl_node sn
- WHERE ss.set_origin=sn.no_id
- AND set_id='{$set_id}'";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Creates a set
- */
- function createReplicationSet($set_id, $set_comment) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_comment);
- $data->clean($set_id);
-
- if ($set_id != '')
- $sql = "SELECT \"{$schema}\".storeset('{$set_id}', '{$set_comment}')";
- else
- $sql = "SELECT \"{$schema}\".storeset((SELECT COALESCE(MAX(set_id), 0) + 1 FROM \"{$schema}\".sl_set), '{$set_comment}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Drops a set
- */
- function dropReplicationSet($set_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
-
- $sql = "SELECT \"{$schema}\".dropset('{$set_id}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Locks or unlocks a set
- * @param boolean $lock True to lock, false to unlock
- */
- function lockReplicationSet($set_id, $lock) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
-
- if ($lock)
- $sql = "SELECT \"{$schema}\".lockset('{$set_id}')";
- else
- $sql = "SELECT \"{$schema}\".unlockset('{$set_id}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Merges two sets
- */
- function mergeReplicationSet($set_id, $target) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
- $data->clean($target);
-
- $sql = "SELECT \"{$schema}\".mergeset('{$target}', '{$set_id}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Moves a set to a new origin
- */
- function moveReplicationSet($set_id, $new_origin) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
- $data->clean($new_origin);
-
- $sql = "SELECT \"{$schema}\".moveset('{$set_id}', '{$new_origin}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Executes schema changing DDL set on nodes
- */
- function executeReplicationSet($set_id, $script) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
- $data->clean($script);
-
- $sql = "SELECT \"{$schema}\".ddlscript('{$set_id}', '{$script}')";
-
- return $data->execute($sql);
- }
-
- // TABLES
-
- /**
- * Return all tables in a replication set
- * @param $set_id The ID of the replication set
- * @return Tables in the replication set, sorted alphabetically
- */
- function getTables($set_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
-
- $sql = "SELECT st.tab_id, c.relname, n.nspname, n.nspname||'.'||c.relname AS qualname,
- pg_catalog.pg_get_userbyid(c.relowner) AS relowner,
- reltuples::bigint";
- // Tablespace
- if ($data->hasTablespaces()) {
- $sql .= ", (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=c.reltablespace) AS tablespace";
- }
- $sql .= " FROM pg_catalog.pg_class c, \"{$schema}\".sl_table st, pg_catalog.pg_namespace n
- WHERE c.oid=st.tab_reloid
- AND c.relnamespace=n.oid
- AND st.tab_set='{$set_id}'
- ORDER BY n.nspname, c.relname";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Adds a table to a replication set
- */
- function addTable($set_id, $tab_id, $nspname, $relname, $idxname, $comment, $storedtriggers) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
- $data->clean($tab_id);
- $fqname = $nspname . '.' . $relname;
- $data->clean($fqname);
- $data->clean($nspname);
- $data->clean($relname);
- $data->clean($idxname);
- $data->clean($comment);
-
- $hastriggers = (sizeof($storedtriggers) > 0);
- if ($hastriggers) {
- // Begin a transaction
- $status = $data->beginTransaction();
- if ($status != 0) return -1;
- }
-
- if ($tab_id != '')
- $sql = "SELECT \"{$schema}\".setaddtable('{$set_id}', '{$tab_id}', '{$fqname}', '{$idxname}', '{$comment}')";
- else {
- $sql = "SELECT \"{$schema}\".setaddtable('{$set_id}', (SELECT COALESCE(MAX(tab_id), 0) + 1 FROM \"{$schema}\".sl_table), '{$fqname}', '{$idxname}', '{$comment}')";
- }
-
- $status = $data->execute($sql);
- if ($status != 0) {
- if ($hastriggers) $data->rollbackTransaction();
- return -3;
- }
-
- // If we are storing triggers, we need to know the tab_id that was assigned to the table
- if ($tab_id == '' && $hastriggers) {
- $sql = "SELECT tab_id
- FROM \"{$schema}\".sl_table
- WHERE tab_set='{$set_id}'
- AND tab_reloid=(SELECT pc.oid FROM pg_catalog.pg_class pc, pg_namespace pn
- WHERE pc.relnamespace=pn.oid AND pc.relname='{$relname}'
- AND pn.nspname='{$nspname}')";
- $tab_id = $data->selectField($sql, 'tab_id');
- if ($tab_id === -1) {
- $data->rollbackTransaction();
- return -4;
- }
- }
-
- // Store requested triggers
- if ($hastriggers) {
- foreach ($storedtriggers as $tgname) {
- $data->clean($tgname);
- $sql = "SELECT \"{$schema}\".storetrigger('{$tab_id}', '{$tgname}')";
- $status = $data->execute($sql);
- if ($status != 0) {
- $data->rollbackTransaction();
- return -5;
- }
- }
- }
-
- if ($hastriggers)
- return $data->endTransaction();
- else
- return $status;
- }
-
- /**
- * Drops a table from a replication set
- */
- function dropTable($tab_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($tab_id);
-
- $sql = "SELECT \"{$schema}\".setdroptable('{$tab_id}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Moves a table to another replication set
- */
- function moveTable($tab_id, $new_set_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($tab_id);
- $data->clean($new_set_id);
-
- $sql = "SELECT \"{$schema}\".setmovetable('{$tab_id}', '{$new_set_id}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Return all tables we are not current in a replication set
- */
- function getNonRepTables()
- {
- global $data;
- /*
- * we cannot just query pg_tables as we want the OID of the table
- * for the subquery against the slony table. We could match on
- * on schema name and table name, but the slony info isn't updated
- * if the user renames a table which is in a replication set
- */
- $sql = "SELECT c.relname, n.nspname, n.nspname||'.'||c.relname AS qualname,
- pg_get_userbyid(c.relowner) AS relowner
- FROM pg_class c
- LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
- WHERE c.relkind = 'r' AND n.nspname NOT IN ('pg_catalog',
- 'information_schema', 'pg_toast') AND
- NOT(n.nspname = '_{$this->slony_cluster}' AND
- relname LIKE 'sl_%') AND
- NOT EXISTS(SELECT 1 FROM _{$this->slony_cluster}.sl_table s
- WHERE s.tab_reloid = c.oid)
- ORDER BY n.nspname, c.relname";
- return $data->selectSet($sql);
- }
-
- // SEQUENCES
-
- /**
- * Return all sequences in a replication set
- * @param $set_id The ID of the replication set
- * @return Sequences in the replication set, sorted alphabetically
- */
- function getSequences($set_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
-
- $sql = "SELECT ss.seq_id, c.relname AS seqname, n.nspname, n.nspname||'.'||c.relname AS qualname,
- pg_catalog.obj_description(c.oid, 'pg_class') AS seqcomment,
- pg_catalog.pg_get_userbyid(c.relowner) AS seqowner
- FROM pg_catalog.pg_class c, \"{$schema}\".sl_sequence ss, pg_catalog.pg_namespace n
- WHERE c.oid=ss.seq_reloid
- AND c.relnamespace=n.oid
- AND ss.seq_set='{$set_id}'
- ORDER BY n.nspname, c.relname";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Adds a sequence to a replication set
- */
- function addSequence($set_id, $seq_id, $fqname, $comment) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
- $data->clean($seq_id);
- $data->clean($fqname);
- $data->clean($comment);
-
- if ($seq_id != '')
- $sql = "SELECT \"{$schema}\".setaddsequence('{$set_id}', '{$seq_id}', '{$fqname}', '{$comment}')";
- else
- $sql = "SELECT \"{$schema}\".setaddsequence('{$set_id}', (SELECT COALESCE(MAX(seq_id), 0) + 1 FROM \"{$schema}\".sl_sequence), '{$fqname}', '{$comment}')";
-
- return $data->execute($sql); }
-
- /**
- * Drops a sequence from a replication set
- */
- function dropSequence($seq_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($seq_id);
-
- $sql = "SELECT \"{$schema}\".setdropsequence('{$seq_id}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Moves a sequence to another replication set
- */
- function moveSequence($seq_id, $new_set_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($seq_id);
- $data->clean($new_set_id);
-
- $sql = "SELECT \"{$schema}\".setmovesequence('{$seq_id}', '{$new_set_id}')";
-
- return $data->execute($sql);
- }
-
- // SUBSCRIPTIONS
-
- /**
- * Gets all nodes subscribing to a set
- * @param $set_id The ID of the replication set
- * @return Nodes subscribing to this set
- */
- function getSubscribedNodes($set_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
-
- $sql = "SELECT sn.*, ss.sub_set
- FROM \"{$schema}\".sl_subscribe ss, \"{$schema}\".sl_node sn
- WHERE ss.sub_set='{$set_id}'
- AND ss.sub_receiver = sn.no_id
- ORDER BY sn.no_comment";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Gets all nodes subscribing to a set
- * @param $set_id The ID of the replication set
- * @return Nodes subscribing to this set
- */
- function getSubscription($set_id, $no_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($set_id);
- $data->clean($no_id);
-
- $sql = "SELECT ss.*, sn.no_comment AS receiver, sn2.no_comment AS provider
- FROM \"{$schema}\".sl_subscribe ss, \"{$schema}\".sl_node sn, \"{$schema}\".sl_node sn2
- WHERE ss.sub_set='{$set_id}'
- AND ss.sub_receiver = sn.no_id
- AND ss.sub_provider = sn2.no_id
- AND sn.no_id='{$no_id}'";
-
- return $data->selectSet($sql);
- }
-
- // NODES
-
- /**
- * Gets node paths
- */
- function getPaths($no_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
-
- $sql = "SELECT * FROM \"{$schema}\".sl_path sp, \"{$schema}\".sl_node sn
- WHERE sp.pa_server=sn.no_id
- AND sp.pa_client='{$no_id}'
- ORDER BY sn.no_comment";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Gets node path details
- */
- function getPath($no_id, $path_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
- $data->clean($path_id);
-
- $sql = "SELECT * FROM \"{$schema}\".sl_path sp, \"{$schema}\".sl_node sn
- WHERE sp.pa_server=sn.no_id
- AND sp.pa_client='{$no_id}'
- AND sn.no_id='{$path_id}'";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Creates a path
- */
- function createPath($no_id, $server, $conn, $retry) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
- $data->clean($server);
- $data->clean($conn);
- $data->clean($retry);
-
- $sql = "SELECT \"{$schema}\".storepath('{$server}', '{$no_id}', '{$conn}', '{$retry}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Drops a path
- */
- function dropPath($no_id, $path_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
- $data->clean($path_id);
-
- $sql = "SELECT \"{$schema}\".droppath('{$path_id}', '{$no_id}')";
-
- return $data->execute($sql);
- }
-
- // LISTENS
-
- /**
- * Gets node listens
- */
- function getListens($no_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
-
- $sql = "SELECT * FROM \"{$schema}\".sl_listen sl, \"{$schema}\".sl_node sn
- WHERE sl.li_provider=sn.no_id
- AND sl.li_receiver='{$no_id}'
- ORDER BY sn.no_comment";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Gets node listen details
- */
- function getListen($no_id, $listen_id) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
- $data->clean($listen_id);
-
- $sql = "SELECT sl.*, sn.*, sn2.no_comment AS origin FROM \"{$schema}\".sl_listen sl, \"{$schema}\".sl_node sn, \"{$schema}\".sl_node sn2
- WHERE sl.li_provider=sn.no_id
- AND sl.li_receiver='{$no_id}'
- AND sn.no_id='{$listen_id}'
- AND sn2.no_id=sl.li_origin";
-
- return $data->selectSet($sql);
- }
-
- /**
- * Creates a listen
- */
- function createListen($no_id, $origin, $provider) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
- $data->clean($origin);
- $data->clean($provider);
-
- $sql = "SELECT \"{$schema}\".storelisten('{$origin}', '{$provider}', '{$no_id}')";
-
- return $data->execute($sql);
- }
-
- /**
- * Drops a listen
- */
- function dropListen($no_id, $origin, $provider) {
- global $data;
-
- $schema = $this->slony_schema;
- $data->fieldClean($schema);
- $data->clean($no_id);
- $data->clean($origin);
- $data->clean($provider);
-
- $sql = "SELECT \"{$schema}\".droplisten('{$origin}', '{$provider}', '{$no_id}')";
-
- return $data->execute($sql);
- }
-
- // ACTIONS
-
-
-
-}
-
-?>