コード例 #1
0
ファイル: dbx.php プロジェクト: williammoran/DBSteward
 /**
  * determine SQL clause expression to match for data_row primary keys
  *
  * @return string
  */
 public static function primary_key_expression($db_doc, $node_schema, $node_table, $data_row_columns, $data_row)
 {
     $primary_keys = format_table::primary_key_columns($node_table);
     $primary_key_index = xml_parser::data_row_overlay_primary_key_index($primary_keys, $data_row_columns, $data_row_columns);
     $primary_key_index = $primary_key_index['base'];
     // figure out the primary key expression
     $primary_key_expression = array();
     foreach ($primary_keys as $primary_column_name) {
         if (!isset($primary_key_index[$primary_column_name])) {
             throw new exception("primary key column named {$primary_column_name} not found in primary_key_index");
         }
         $column_index = $primary_key_index[$primary_column_name];
         // get the type of the column, chasing foreign keys if necessary
         $node_column = dbx::get_table_column($node_table, $primary_column_name);
         $value_type = format_column::column_type($db_doc, $node_schema, $node_table, $node_column, $foreign);
         $primary_key_expression[] = format::get_quoted_column_name($primary_column_name) . ' = ' . format::value_escape($value_type, $data_row->col[$column_index]);
     }
     if (count($primary_key_expression) == 0) {
         throw new exception($node_table['name'] . " primary_key_expression is empty, determinate loop failed");
     }
     return implode(' AND ', $primary_key_expression);
 }