r4113 usePreparedUpdateBlade(): new function
authorDenis Ovsienko <infrastation@yandex.ru>
Wed, 12 Jan 2011 22:26:05 +0000 (22:26 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Wed, 12 Jan 2011 22:26:05 +0000 (22:26 +0000)
tableHandler(): add processing of UPDATE
updateRow(): dismiss, now obsolete
commitUpdateRow(): idem

inc/database.php
inc/navigation.php
inc/ophandlers.php

index d886b731b3037ecdfc7c85e19c8789512ffec80e..bd8ebab616e99d3ce3ab28357efb01b46d5db6f3 100644 (file)
@@ -220,11 +220,6 @@ function getRackRows ()
        return $rows;
 }
 
-function commitUpdateRow ($rackrow_id, $rackrow_name)
-{
-       return usePreparedExecuteBlade ('UPDATE RackRow SET name = ? WHERE id = ?', array ($rackrow_name, $rackrow_id));
-}
-
 // Return a simple object list w/o related information, so that the returned value
 // can be directly used by printSelect(). An optional argument is the name of config
 // option with constraint in RackCode.
@@ -2480,6 +2475,34 @@ function usePreparedSelectBlade ($query, $args = array())
        }
 }
 
+function usePreparedUpdateBlade ($tablename, $set_columns, $where_columns, $conjunction = 'AND')
+{
+       global $dbxlink;
+       $conj = '';
+       $query = "UPDATE ${tablename} SET ";
+       foreach (array_keys ($set_columns) as $colname)
+       {
+               $query .= "${conj}${colname}=?";
+               $conj = ', ';
+       }
+       $conj = '';
+       $query .= ' WHERE ';
+       foreach (array_keys ($where_columns) as $colname)
+       {
+               $query .= "${conj} ${colname}=?";
+               $conj = $conjunction;
+       }
+       try
+       {
+               $prepared = $dbxlink->prepare ($query);
+               $prepared->execute (array_merge (array_values ($set_columns), array_values ($where_columns)));
+       }
+       catch (PDOException $e)
+       {
+               throw convertPDOException ($e);
+       }
+}
+
 // Prepare and execute the statement with parameters, then return number of
 // rows affected (or FALSE in case of an error).
 function usePreparedExecuteBlade ($query, $args = array())
index 2b5aca6dc0c66545015d5e06e47ee01e99be2060..9a2fd9e721a79ffcdfa0f92b74fb174ec0a323c7 100644 (file)
@@ -30,7 +30,6 @@ $tab['rackspace']['history'] = 'History';
 $tabhandler['rackspace']['default'] = 'renderRackspace';
 $tabhandler['rackspace']['edit'] = 'renderRackspaceRowEditor';
 $tabhandler['rackspace']['history'] = 'renderRackspaceHistory';
-$ophandler['rackspace']['edit']['updateRow'] = 'updateRow';
 $ophandler['rackspace']['edit']['addRow'] = array
 (
        'table' => 'RackRow',
@@ -49,6 +48,19 @@ $ophandler['rackspace']['edit']['delete'] = array
                array ('url_argname' => 'row_id', 'table_colname' => 'id', 'assertion' => 'uint')
        ),
 );
+$ophandler['rackspace']['edit']['updateRow'] = array
+(
+       'table' => 'RackRow',
+       'action' => 'UPDATE',
+       'set_arglist' => array
+       (
+               array ('url_argname' => 'name', 'assertion' => 'string')
+       ),
+       'where_arglist' => array
+       (
+               array ('url_argname' => 'row_id', 'table_colname' => 'id', 'assertion' => 'uint')
+       ),
+);
 
 $page['depot']['parent'] = 'index';
 $page['depot']['title'] = 'Objects';
index a3f4cefeff13e991141b60071f3973912ca344f8..082a815c7322c0cc79d1faffb9d9e105fbe19c0d 100644 (file)
@@ -1660,19 +1660,6 @@ function submitSLBConfig ()
        return buildRedirectURL (__FUNCTION__, 'OK', array ('slbconfig'));
 }
 
-$msgcode['updateRow']['OK'] = 7;
-$msgcode['updateRow']['ERR'] = 100;
-function updateRow ()
-{
-       assertUIntArg ('row_id');
-       assertStringArg ('name');
-
-       if (FALSE !== commitUpdateRow ($_REQUEST['row_id'], $_REQUEST['name']))
-               return buildRedirectURL (__FUNCTION__, 'OK', array ($_REQUEST['name']));
-       else
-               return buildRedirectURL (__FUNCTION__, 'ERR', array ($_REQUEST['name']));
-}
-
 $msgcode['addRack']['OK'] = 51;
 $msgcode['addRack']['ERR2'] = 172;
 function addRack ()
@@ -2553,43 +2540,51 @@ function tableHandler ($opspec)
        if (!array_key_exists ('table', $opspec))
                throw new InvalidArgException ('opspec', '(malformed array structure)', '"table" not set');
        $columns = array();
-       foreach ($opspec['arglist'] as $argspec)
-       {
-               genericAssertion ($argspec['url_argname'], $argspec['assertion']);
-               // "table_colname" is normally used for an override, if it is not
-               // set, use the URL argument name
-               $table_colname = array_key_exists ('table_colname', $argspec) ?
-                       $argspec['table_colname'] :
-                       $argspec['url_argname'];
-               $arg_value = $sic[$argspec['url_argname']];
-               if
-               (
-                       ($argspec['assertion'] == 'uint0' and $arg_value == 0)
-                       or ($argspec['assertion'] == 'string0' and $arg_value == '')
-               )
-                       switch (TRUE)
-                       {
-                       case !array_key_exists ('if_empty', $argspec): // no action requested
-                               break;
-                       case $argspec['if_empty'] == 'NULL':
-                               $arg_value = NULL;
-                               break;
-// A trick below is likely to break non-INSERT queries.
-//                     case $argspec['if_empty'] == 'omit':
-//                             continue 2;
-                       default:
-                               throw new InvalidArgException ('opspec', '(malformed array structure)', '"if_empty" not recognized');
-                       }
-               $columns[$table_colname] = $arg_value;
-       }
+       foreach (array ('arglist', 'set_arglist', 'where_arglist') as $listname)
+               foreach ($opspec[$listname] as $argspec)
+               {
+                       genericAssertion ($argspec['url_argname'], $argspec['assertion']);
+                       // "table_colname" is normally used for an override, if it is not
+                       // set, use the URL argument name
+                       $table_colname = array_key_exists ('table_colname', $argspec) ?
+                               $argspec['table_colname'] :
+                               $argspec['url_argname'];
+                       $arg_value = $sic[$argspec['url_argname']];
+                       if
+                       (
+                               ($argspec['assertion'] == 'uint0' and $arg_value == 0)
+                               or ($argspec['assertion'] == 'string0' and $arg_value == '')
+                       )
+                               switch (TRUE)
+                               {
+                               case !array_key_exists ('if_empty', $argspec): // no action requested
+                                       break;
+                               case $argspec['if_empty'] == 'NULL':
+                                       $arg_value = NULL;
+                                       break;
+                               default:
+                                       throw new InvalidArgException ('opspec', '(malformed array structure)', '"if_empty" not recognized');
+                               }
+                       $columns[$listname][$table_colname] = $arg_value;
+               }
        switch ($opspec['action'])
        {
        case 'INSERT':
-               $retcode = TRUE === usePreparedInsertBlade ($opspec['table'], $columns) ? 48 : 110;
+               $retcode = TRUE === usePreparedInsertBlade ($opspec['table'], $columns['arglist']) ? 48 : 110;
                break;
        case 'DELETE':
                $conjunction = array_key_exists ('conjunction', $opspec) ? $opspec['conjunction'] : 'AND';
-               $retcode = FALSE !== usePreparedDeleteBlade ($opspec['table'], $columns, $conjunction) ? 49 : 111;
+               $retcode = FALSE !== usePreparedDeleteBlade ($opspec['table'], $columns['arglist'], $conjunction) ? 49 : 111;
+               break;
+       case 'UPDATE':
+               usePreparedUpdateBlade
+               (
+                       $opspec['table'],
+                       $columns['set_arglist'],
+                       $columns['where_arglist'],
+                       array_key_exists ('conjunction', $opspec) ? $opspec['conjunction'] : 'AND'
+               );
+               $retcode = 51;
                break;
        default:
                throw new InvalidArgException ('opspec/action', '(malformed array structure)');