File: inserts_export_form.cpp

package info (click to toggle)
mysql-workbench 6.3.8%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 113,932 kB
  • ctags: 87,814
  • sloc: ansic: 955,521; cpp: 427,465; python: 59,728; yacc: 59,129; xml: 54,204; sql: 7,091; objc: 965; makefile: 638; sh: 613; java: 237; perl: 30; ruby: 6; php: 1
file content (127 lines) | stat: -rw-r--r-- 4,565 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/* 
 * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; version 2 of the
 * License.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301  USA
 */

#include "base/string_utilities.h"
#include "base/file_utilities.h"
#include "base/util_functions.h"

#include "inserts_export_form.h"

#include "sqlide/recordset_text_storage.h"
#include "sqlide/recordset_sql_storage.h"

#include "mforms/simpleform.h"
#include "mforms/utilities.h"

using namespace mforms;
using namespace base;
using namespace base;

InsertsExportForm::InsertsExportForm(mforms::Form *owner, Recordset::Ref rset, const std::string &default_ext)
: FileChooser(owner, SaveFile), _record_set(rset)
{ 
  std::string extlist;
  _storage_types = _record_set->data_storages_for_export();
  for (size_t i= 0; i < _storage_types.size(); i++)
  {
    extlist.append("|").append(_storage_types[i].description);
    extlist.append("|").append(_storage_types[i].extension);
    _storage_type_index[_storage_types[i].description] = (int)i;
  }
  
  if (extlist.empty())
    throw std::runtime_error("No export formats found");
  
  //set_extensions(extlist.substr(1), default_ext);
  add_selector_option("format", _("Format:"), extlist.substr(1));
  
  set_title(_("Export Inserts Data to File"));
}

std::string InsertsExportForm::run()
{  
  if (run_modal())
  {
    std::string path = get_path();
    std::string ext = base::extension(path);
    if (!ext.empty() && ext[0] == '.')
      ext = ext.substr(1);

    std::string format= get_selector_option_value("format");
    int i = _storage_type_index[format];
    const Recordset_storage_info &info(_storage_types[i]);
 
    Recordset_data_storage::Ref dataStorage= _record_set->data_storage_for_export(info.name);
    
    if (dynamic_cast<Recordset_text_storage*>(dataStorage.get()))
    {
      Recordset_text_storage *textStorage= dynamic_cast<Recordset_text_storage*>(dataStorage.get());
      textStorage->data_format(info.name);
      textStorage->file_path(path);

      Recordset_sql_storage* storage = dynamic_cast<Recordset_sql_storage*>(_record_set->data_storage().get());
      textStorage->parameter_value("GENERATOR_QUERY", _record_set->generator_query());
      textStorage->parameter_value("GENERATE_DATE", base::fmttime(time(NULL), DATETIME_FMT));
      textStorage->parameter_value("TABLE_NAME", storage->table_name().empty() ? "TABLE" : storage->table_name());
    
      if (!info.arguments.empty())
      {
        mforms::SimpleForm form(_("Export Recordset"), _("Export"));
        
        form.add_label(strfmt(_("Export options for %s"), info.description.c_str()), false);
        
        // handle arguments specific to the data storage
        for (std::list<std::pair<std::string,std::string> >::const_iterator arg= info.arguments.begin();
             arg != info.arguments.end(); ++arg)
          form.add_text_entry(arg->second, arg->first+":", textStorage->parameter_value(arg->second));
        form.set_size(400, -1);
        if (!form.show())
          return "";
        for (std::list<std::pair<std::string,std::string> >::const_iterator arg= info.arguments.begin();
             arg != info.arguments.end(); ++arg)
          textStorage->parameter_value(arg->second, form.get_string_value(arg->second));
      }
    }
    /*else
    {
      if (!info.arguments.empty())
      {
        mforms::SimpleForm form(strfmt(_("Export as %s"), info.description.c_str()), _("Export"));
        for (std::list<std::pair<std::string,std::string> >::const_iterator arg= info.arguments.begin();
             arg != info.arguments.end(); ++arg)
          form.add_text_entry(arg->first, arg->second, "");
        if (!form.show())
          return "";
      }
    }*/


    try
    {
      dataStorage->serialize(_record_set);
      return path;
    }
    catch (std::exception &exc)
    {
      mforms::Utilities::show_error(_("Export Inserts Data"), exc.what(), _("OK"));
      return "";
    }
  }
  return "";
}