public static function add_data_row(&$node_table, $row) { // sanity check alpha keys this table expects $data_columns = self::get_column_list($node_table); $row_data_columns = array_keys($row); $diff = array_diff($row_data_columns, $data_columns); if (count($diff) > 0) { throw new exception("table " . $node_table['name'] . " (" . implode(',', $data_columns) . ") does not contain all columns specified in row_data_columns (" . implode(',', $row_data_columns) . ") diff: (" . implode(',', $diff) . ")"); } $pk_cols = self::primary_key_columns($node_table); // only check if it has primary key columns if the table has a primary key if (count($pk_cols) > 0) { $diff = array_diff($pk_cols, $row_data_columns); if (count($diff) > 0) { throw new exception("table " . $node_table['name'] . " rows element missing primary key column. diff: (" . implode(',', $diff) . ")"); } } // collect rows to add in $new_rows, index by row_data_columns // @TODO: the caller then data_rows_overlay()'s these all at once $new_rows = array(); // $new_rows contains all of the variants of rows collections to add to the table // it is expected that there is a low number of insert statement variants if (!isset($new_rows[$row_data_columns])) { $new_rows[$row_data_columns] = new SimpleXMLElement('<rows/>'); } // have the xml_parser compositor add the row with it's overlay logic // which compensates for additional columns, missing columns // and all the rest of the variants for <rows> <row> elements $node_new_row = $new_rows[$row_data_columns]->addChild('row'); foreach ($row as $column_name => $column_value) { $new_rows[$row_data_columns]['columns'] .= $column_name . ','; $node_new_row->addChild('col', xml_parser::ampersand_magic(sql_parser::quoted_value_strip($column_value))); } $new_rows[$row_data_columns]['columns'] = substr($new_rows[$row_data_columns]['columns'], 0, -1); //var_dump($new_rows[$row_data_columns]->asXML()); //die('add_data_row tracer 115'); // see @TODO: above caller collation xml_parser::data_rows_overlay($node_table, $new_rows[$row_data_columns]); }