* Slovak translation
* Reload browser after create/drop of database, schemas and tables
* Select on views
+* Add foreign key constraint, with actions
Version 3.0.0-dev-3
-------------------
* Add alter database for 7.3+
* -Execute arbitrary SQL (chriskl)
* Dump database
-* Creating new database should refresh left pane? What about creating schemas
- and tables - they're in the left pane too?
+* -Creating new database should refresh left pane? What about creating schemas
+ and tables - they're in the left pane too? (chriskl)
* -Show encoding of databases (chriskl)
Tables
* A class that implements the DB interface for Postgres
* Note: This class uses ADODB and returns RecordSets.
*
- * $Id: Postgres.php,v 1.78 2003/04/23 06:27:13 chriskl Exp $
+ * $Id: Postgres.php,v 1.79 2003/04/23 08:56:26 chriskl Exp $
*/
// @@@ THOUGHT: What about inherits? ie. use of ONLY???
'UPDATE OR DELETE', 'INSERT OR UPDATE OR DELETE');
// When to execute the trigger
var $triggerExecTimes = array('BEFORE', 'AFTER');
-
+ // Foreign key actions
+ var $fkactions = array('NO ACTION', 'RESTRICT', 'CASCADE', 'SET NULL', 'SET DEFAULT');
+
// Last oid assigned to a system object
var $_lastSystemOID = 18539;
var $_maxNameLen = 31;
* @param $target The table that contains the target columns
* @param $sfields (array) An array of source fields over which to add the foreign key
* @param $tfields (array) An array of target fields over which to add the foreign key
+ * @param $upd_action The action for updates (eg. RESTRICT)
+ * @param $del_action The action for deletes (eg. RESTRICT)
* @param $name (optional) The name to give the key, otherwise default name is assigned
* @return 0 success
* @return -1 no fields given
*/
- function addForeignKey($table, $target, $sfields, $tfields, $name = '') {
+ function addForeignKey($table, $target, $sfields, $tfields, $upd_action, $del_action, $name = '') {
if (!is_array($sfields) || sizeof($sfields) == 0 ||
!is_array($tfields) || sizeof($tfields) == 0) return -1;
$this->fieldClean($table);
if ($name != '') $sql .= "CONSTRAINT \"{$name}\" ";
$sql .= "FOREIGN KEY (\"" . join('","', $sfields) . "\") ";
$sql .= "REFERENCES \"{$target}\"(\"" . join('","', $tfields) . "\") ";
+ if ($upd_action != 'NO ACTION') $sql .= " ON UPDATE {$upd_action}";
+ if ($del_action != 'NO ACTION') $sql .= " ON DELETE {$del_action}";
return $this->execute($sql);
}
/**
* List constraints on a table
*
- * $Id: constraints.php,v 1.13 2003/04/23 06:27:14 chriskl Exp $
+ * $Id: constraints.php,v 1.14 2003/04/23 08:56:26 chriskl Exp $
*/
// Include application functions
// Copy the IndexColumnList variable from stage 2
if (isset($_REQUEST['IndexColumnList']) && !isset($_REQUEST['SourceColumnList']))
$_REQUEST['SourceColumnList'] = serialize($_REQUEST['IndexColumnList']);
-
+
+ // Initialise variables
+ if (!isset($_POST['upd_action'])) $_POST['upd_action'] = null;
+ if (!isset($_POST['del_action'])) $_POST['del_action'] = null;
+
echo "<h2>", htmlspecialchars($_REQUEST['database']), ": {$lang['strtables']}: ",
htmlspecialchars($_REQUEST['table']), ": {$lang['straddfk']}</h2>\n";
$misc->printMsg($msg);
echo "<tr><th class=\"data\">{$lang['strtablecolumnlist']}</th><th class=\"data\"> </th><th class=data>{$lang['strfkcolumnlist']}</th></tr>\n";
echo "<tr><td class=\"data1\">" . $selColumns->fetch() . "</td>\n";
echo "<td class=\"data1\" align=\"center\">" . $buttonRemove->fetch() . $buttonAdd->fetch() . "</td>";
- echo "<td class=data1>" . $selIndex->fetch() . "</td></tr>\n";
+ echo "<td class=\"data1\">" . $selIndex->fetch() . "</td></tr>\n";
+ echo "<tr><th class=\"data\" colspan=\"3\">{$lang['stractions']}</th></tr>";
+ echo "<tr>";
+ echo "<td class=\"data1\" colspan=\"3\">\n";
+ // ON SELECT actions
+ echo "{$lang['stronupdate']} <select name=\"upd_action\">";
+ foreach ($data->fkactions as $v) {
+ echo "<option value=\"{$v}\"", ($_POST['upd_action'] == $v) ? ' selected="selected"' : '', ">{$v}</option>\n";
+ }
+ echo "</select><br />\n";
+ // ON DELETE actions
+ echo "{$lang['strondelete']} <select name=\"del_action\">";
+ foreach ($data->fkactions as $v) {
+ echo "<option value=\"{$v}\"", ($_POST['del_action'] == $v) ? ' selected="selected"' : '', ">{$v}</option>\n";
+ }
+ echo "</select>\n";
+ echo "</td></tr>";
echo "</table>\n";
echo "<p><input type=\"hidden\" name=\"action\" value=\"save_add_foreign_key\">\n";
|| !is_array($temp) || sizeof($temp) == 0) addForeignKey(2, $lang['strfkneedscols']);
else {
$status = $localData->addForeignKey($_POST['table'], $_POST['target'], unserialize($_POST['SourceColumnList']),
- $_POST['IndexColumnList'], $_POST['name']);
+ $_POST['IndexColumnList'], $_POST['upd_action'], $_POST['del_action'], $_POST['name']);
if ($status == 0)
doDefault($lang['strfkadded']);
else
$misc->printMsg($msg);
$attrs = &$localData->getTableAttributes($_REQUEST['table']);
+ $tables = &$localData->getTables(true);
$selColumns = new XHTML_select('TableColumnList', true, 10);
$selColumns->set_style('width: 10em;');
echo "<td class=data1>" . $selIndex->fetch() . "</td></tr>\n";
echo "<tr><th class=\"data\" colspan=\"3\">{$lang['strfktarget']}</th></tr>";
echo "<tr>";
- echo "<td class=\"data1\" colspan=\"3\"><input type=\"text\" name=\"target\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" /></td></tr>";
+ echo "<td class=\"data1\" colspan=\"3\"><select name=\"target\">";
+ while (!$tables->EOF) {
+ echo "<option value=\"", htmlspecialchars($tables->f['tablename']), "\">",
+ htmlspecialchars($tables->f['tablename']), "</option>\n";
+ $tables->moveNext();
+ }
+ echo "</select>\n";
+ echo "</td></tr>";
echo "</table>\n";
echo "<p><input type=\"hidden\" name=\"action\" value=\"save_add_foreign_key\">\n";
* English language file for phpPgAdmin. Use this as a basis
* for new translations.
*
- * $Id: english.php,v 1.72 2003/04/23 07:01:17 chriskl Exp $
+ * $Id: english.php,v 1.73 2003/04/23 08:56:27 chriskl Exp $
*/
// Language and character set
$lang['strfkaddedbad'] = 'Failed to add foreign key.';
$lang['strfktarget'] = 'Target table';
$lang['strfkcolumnlist'] = 'Columns in key';
+ $lang['strondelete'] = 'ON DELETE';
+ $lang['stronupdate'] = 'ON UPDATE';
// Functions
$lang['strfunction'] = 'Function';
* English language file for phpPgAdmin. Use this as a basis
* for new translations.
*
- * $Id: english.php,v 1.24 2003/04/23 07:01:20 chriskl Exp $
+ * $Id: english.php,v 1.25 2003/04/23 08:56:27 chriskl Exp $
*/
// Language and character set
$lang['strfkaddedbad'] = 'Failed to add foreign key.';
$lang['strfktarget'] = 'Target table';
$lang['strfkcolumnlist'] = 'Columns in key';
+ $lang['strondelete'] = 'ON DELETE';
+ $lang['stronupdate'] = 'ON UPDATE';
// Functions
$lang['strfunction'] = 'Function';