
---
 feeds_data_select_table_2.patch |   45 +++++++++++++++++++++++++++++++++++++++
 plugins/FeedsDataProcessor.inc  |   20 ++++++++++++++++-
 2 files changed, 64 insertions(+), 1 deletions(-)
 create mode 100644 feeds_data_select_table_2.patch

diff --git a/feeds_data_select_table_2.patch b/feeds_data_select_table_2.patch
new file mode 100644
index 0000000..9a3c328
--- /dev/null
+++ b/feeds_data_select_table_2.patch
@@ -0,0 +1,45 @@
+diff --git plugins/FeedsDataProcessor.inc plugins/FeedsDataProcessor.inc
+index f0c55d9..bca12f6 100644
+--- plugins/FeedsDataProcessor.inc
++++ plugins/FeedsDataProcessor.inc
+@@ -236,6 +236,7 @@ class FeedsDataProcessor extends FeedsProcessor {
+       'expire' => FEEDS_EXPIRE_NEVER, // Don't expire items by default.
+       'mappings' => array(),
+       'delete_with_source' => FALSE,
++      'table_name' => 0,
+     );
+   }
+ 
+@@ -264,6 +265,23 @@ class FeedsDataProcessor extends FeedsProcessor {
+       '#default_value' => $this->config['delete_with_source'],
+       '#disabled' => empty(feeds_importer($this->id)->config['content_type']) ? TRUE : FALSE,
+     );
++
++    // create select options for data table name with the existing data tables and the default one.
++    $data_tables = data_get_all_tables();
++    $default_table_name = variable_get('feeds_data_'. $this->id, 'feeds_data_'. $this->id);
++    foreach ($data_tables as $data_table) {
++      $tables_names[$data_table->get('name')] = $data_table->get('name');
++    }
++    // add a default table name
++    $tables_names[$default_table_name] = 'Default name: '. $default_table_name;
++
++    $form['table_name'] = array(
++      '#type' => 'select',
++      '#title' => t('Data table name'),
++      '#options' => $tables_names,
++      '#description' => t('Select any existing data table or create a new table with the default settings: feeds_data_ + feeds name. This default data name can be changed, please read README.txt'),
++      '#default_value' => empty($this->config['table_name']) ?  $default_table_name : $this->config['table_name'],
++    );
+     return $form;
+   }
+ 
+@@ -281,7 +299,7 @@ class FeedsDataProcessor extends FeedsProcessor {
+    * Return the data table name for this feed.
+    */
+   protected function tableName() {
+-    return variable_get('feeds_data_'. $this->id, 'feeds_data_'. $this->id);
++    return empty($this->config['table_name']) ? variable_get('feeds_data_'. $this->id, 'feeds_data_'. $this->id) : $this->config['table_name'];
+   }
+ 
+   /**
diff --git a/plugins/FeedsDataProcessor.inc b/plugins/FeedsDataProcessor.inc
index c71922f..3efb6a2 100644
--- a/plugins/FeedsDataProcessor.inc
+++ b/plugins/FeedsDataProcessor.inc
@@ -235,6 +235,7 @@ class FeedsDataProcessor extends FeedsProcessor {
       'expire' => FEEDS_EXPIRE_NEVER, // Don't expire items by default.
       'mappings' => array(),
       'delete_with_source' => FALSE,
+      'table_name' => 0,
     );
   }
 
@@ -263,6 +264,23 @@ class FeedsDataProcessor extends FeedsProcessor {
       '#default_value' => $this->config['delete_with_source'],
       '#disabled' => empty(feeds_importer($this->id)->config['content_type']) ? TRUE : FALSE,
     );
+
+    // create select options for data table name with the existing data tables and the default one.
+    $data_tables = data_get_all_tables();
+    $default_table_name = variable_get('feeds_data_'. $this->id, 'feeds_data_'. $this->id);
+    foreach ($data_tables as $data_table) {
+      $tables_names[$data_table->get('name')] = $data_table->get('name');
+    }
+    // add a default table name
+    $tables_names[$default_table_name] = 'Default name: '. $default_table_name;
+
+    $form['table_name'] = array(
+      '#type' => 'select',
+      '#title' => t('Data table name'),
+      '#options' => $tables_names,
+      '#description' => t('Select any existing data table or create a new table with the default settings: feeds_data_ + feeds name. This default data name can be changed, please read README.txt'),
+      '#default_value' => empty($this->config['table_name']) ?  $default_table_name : $this->config['table_name'],
+    );
     return $form;
   }
 
@@ -280,7 +298,7 @@ class FeedsDataProcessor extends FeedsProcessor {
    * Return the data table name for this feed.
    */
   protected function tableName() {
-    return variable_get('feeds_data_'. $this->id, 'feeds_data_'. $this->id);
+    return empty($this->config['table_name']) ? variable_get('feeds_data_'. $this->id, 'feeds_data_'. $this->id) : $this->config['table_name'];
   }
 
   /**
-- 
1.7.1


From 1b20b90b71fe31cc94abea810d26b66dc385028f Mon Sep 17 00:00:00 2001
From: Nico <nicolas.haase@gmail.com>
Date: Wed, 2 Mar 2011 19:42:35 +1000
Subject: [PATCH 2/2] Issue #982242: Create a new feeds_data table with base schema added.

---
 plugins/FeedsDataProcessor.inc |   22 ++++++++++++++++++++--
 1 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/plugins/FeedsDataProcessor.inc b/plugins/FeedsDataProcessor.inc
index 3efb6a2..0982ac7 100644
--- a/plugins/FeedsDataProcessor.inc
+++ b/plugins/FeedsDataProcessor.inc
@@ -269,7 +269,8 @@ class FeedsDataProcessor extends FeedsProcessor {
     $data_tables = data_get_all_tables();
     $default_table_name = variable_get('feeds_data_'. $this->id, 'feeds_data_'. $this->id);
     foreach ($data_tables as $data_table) {
-      $tables_names[$data_table->get('name')] = $data_table->get('name');
+      $label = ($data_table->get('title')) ? $data_table->get('name') .' ('. $data_table->get('title') .')' : $data_table->get('name');
+      $tables_names[$data_table->get('name')] = $label;
     }
     // add a default table name
     $tables_names[$default_table_name] = 'Default name: '. $default_table_name;
@@ -285,12 +286,29 @@ class FeedsDataProcessor extends FeedsProcessor {
   }
 
   /**
-   * Reschedule if expiry time changes.
+   * Reschedule if expiry time changes and check whether an existing data table needs to be copied.
+   *
+   * @todo Needs more checking of existing keys when an existing table is copied.
    */
   public function configFormSubmit(&$values) {
     if ($this->config['expire'] != $values['expire']) {
       feeds_reschedule($this->id);
     }
+
+    $table_name = $values['table_name'];
+
+    // Can't use data_get_table() to get the schema, since it's protected.
+    $table = drupal_get_schema($table_name, TRUE);
+
+    // See if feeds should copy an existing data table and add the necessary fields.
+    if (!isset($table['fields']['feed_nid'])) {
+      $base_schema = $this->baseSchema();
+      $new_name = 'feeds_data_'. $table_name;
+      $new_schema = array_merge_recursive($base_schema, $table);
+      $new_table = data_create_table($new_name, $new_schema, $new_name);
+      $values['table_name'] = $new_name;
+    }
+
     parent::configFormSubmit($values);
   }
 
-- 
1.7.1

