[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [calligra/kexi-features-tolszak] kexi: Added new option in import from CSV dialog. Now user can choo
From:       Tomasz Olszak <olszak.tomasz () gmail ! com>
Date:       2013-03-31 12:35:53
Message-ID: 20130331123553.6B0D1A604F () git ! kde ! org
[Download RAW message or body]

Git commit 12e2b8e7eca4d55698d6fb557a826a3183c911b0 by Tomasz Olszak.
Committed on 31/03/2013 at 14:29.
Pushed by tolszak into branch 'kexi-features-tolszak'.

Added new option in import from CSV dialog. Now user can choose to import missing \
texts as empty text values(current default configuration) or as NULLs (previous \
behavior) to destination table. There was a lot of confusion when SQL queries with \
condition columnName = '' did not show any results for imported data.

M  +3    -0    kexi/doc/dev/settings.txt
M  +14   -3    kexi/plugins/importexport/csv/kexicsvimportdialog.cpp
M  +12   -2    kexi/plugins/importexport/csv/kexicsvimportoptionsdlg.cpp
M  +2    -0    kexi/plugins/importexport/csv/kexicsvimportoptionsdlg.h

http://commits.kde.org/calligra/12e2b8e7eca4d55698d6fb557a826a3183c911b0

diff --git a/kexi/doc/dev/settings.txt b/kexi/doc/dev/settings.txt
index 7911352..36a1488 100644
--- a/kexi/doc/dev/settings.txt
+++ b/kexi/doc/dev/settings.txt
@@ -122,6 +122,9 @@ Group: ImportExport
 # Default text quote character used for exporting CSV (Comma-Separated Value) files.
 -DefaultTextQuoteForExportingCSVFiles [string] (default is ")
 
+# Import missing text values in CSV files as empty text('' not NULL). 
+ImportNULLsAsEmptyText [boolean] (default: true)
+
 # Default character encoding for exporting CSV (Comma-Separated Value) files.
 # If not provided, system default will be is assumed.
 # Only used when StoreOptionsForCSVExportDialog option is true.
diff --git a/kexi/plugins/importexport/csv/kexicsvimportdialog.cpp \
b/kexi/plugins/importexport/csv/kexicsvimportdialog.cpp index fc44bec..db447e4 100644
--- a/kexi/plugins/importexport/csv/kexicsvimportdialog.cpp
+++ b/kexi/plugins/importexport/csv/kexicsvimportdialog.cpp
@@ -1592,7 +1592,11 @@ void KexiCSVImportDialog::setText(int row, int col, const \
                QString& text, bool in
         if ((m_prevColumnForSetText + 1) < col) { //skipped one or more columns
                                                   //before this: save NULLs first
             for (int i = m_prevColumnForSetText + 1; i < col; i++) {
-                m_tmpValues << QVariant();
+                if (d->detectedType(i-1) == KexiDB::Field::Text) {
+                    m_tmpValues << QString("");
+                } else {
+                    m_tmpValues << QVariant();
+                }
             }
         }
         m_prevColumnForSetText = col;
@@ -1652,8 +1656,15 @@ void KexiCSVImportDialog::setText(int row, int col, const \
QString& text, bool in  m_tmpValues << QVariant();
             } else
                 m_tmpValues << QVariant();
-        } else // Text type and the rest
-            m_tmpValues << (m_options.trimmedInTextValuesChecked ? text.trimmed() : \
text); +        } else {   // Text type and the rest
+            if (text.isNull()) {
+                //default value is empty string not null - instead querying data \
without knowing SQL is very confusing +                m_tmpValues << QString("");
+            } else {
+                m_tmpValues <<QVariant((m_options.trimmedInTextValuesChecked ? \
text.trimmed() : text)); +            }
+        };
+        qDebug()<<"m_tmpValues:"<<m_tmpValues;
         return;
     }
     //save text to GUI (table view)
diff --git a/kexi/plugins/importexport/csv/kexicsvimportoptionsdlg.cpp \
b/kexi/plugins/importexport/csv/kexicsvimportoptionsdlg.cpp index 18f134c..bc7f7a2 \
                100644
--- a/kexi/plugins/importexport/csv/kexicsvimportoptionsdlg.cpp
+++ b/kexi/plugins/importexport/csv/kexicsvimportoptionsdlg.cpp
@@ -72,6 +72,7 @@ KexiCSVImportOptions::KexiCSVImportOptions()
 
     trimmedInTextValuesChecked
     = importExportGroup.readEntry("StripBlanksOffOfTextValuesWhenImportingCSVFiles", \
true); +    nullsImportedAsEmptyTextChecked = \
importExportGroup.readEntry("ImportNULLsAsEmptyText", true);  }
 
 KexiCSVImportOptions::~KexiCSVImportOptions()
@@ -83,7 +84,8 @@ bool KexiCSVImportOptions::operator== (const KexiCSVImportOptions & \
opt) const  return defaultEncodingExplicitySet == opt.defaultEncodingExplicitySet
            && trimmedInTextValuesChecked == opt.trimmedInTextValuesChecked
            && encoding == opt.encoding
-           && dateFormat == opt.dateFormat;
+           && dateFormat == opt.dateFormat
+           && nullsImportedAsEmptyTextChecked == \
opt.nullsImportedAsEmptyTextChecked;  }
 
 bool KexiCSVImportOptions::operator!= (const KexiCSVImportOptions & opt) const
@@ -144,8 +146,12 @@ KexiCSVImportOptionsDialog::KexiCSVImportOptionsDialog(
     m_chkStripWhiteSpaceInTextValues = new QCheckBox(
         i18n("Strip leading and trailing blanks off of text values"), plainPage);
     lyr->addWidget(m_chkStripWhiteSpaceInTextValues, 2, 0, 1, 2);
-    lyr->addItem(new QSpacerItem(30, KDialog::spacingHint(), QSizePolicy::Minimum, \
QSizePolicy::Expanding), 3, 0);  
+
+    m_chkImportNULLsAsEmptyText = new QCheckBox(
+                i18n("Import missing text values as empty texts"), plainPage);
+    lyr->addWidget(m_chkImportNULLsAsEmptyText, 3, 0, 1, 2);
+    lyr->addItem(new QSpacerItem(30, KDialog::spacingHint(), QSizePolicy::Minimum, \
QSizePolicy::Expanding), 4, 0);  //update widgets
     m_encodingComboBox->setSelectedEncoding(options.encoding);
     if (options.defaultEncodingExplicitySet) {
@@ -153,6 +159,7 @@ KexiCSVImportOptionsDialog::KexiCSVImportOptionsDialog(
     }
     m_comboDateFormat->setCurrentIndex((int)options.dateFormat);
     m_chkStripWhiteSpaceInTextValues->setChecked(options.trimmedInTextValuesChecked);
 +    m_chkImportNULLsAsEmptyText->setChecked(options.nullsImportedAsEmptyTextChecked);
  
     adjustSize();
     m_encodingComboBox->setFocus();
@@ -167,6 +174,7 @@ KexiCSVImportOptions KexiCSVImportOptionsDialog::options() const
     KexiCSVImportOptions opt;
     opt.encoding = m_encodingComboBox->selectedEncoding();
     opt.trimmedInTextValuesChecked = m_chkStripWhiteSpaceInTextValues->isChecked();
+    opt.nullsImportedAsEmptyTextChecked = m_chkImportNULLsAsEmptyText->isChecked();
     return opt;
 }
 
@@ -188,6 +196,8 @@ void KexiCSVImportOptionsDialog::accept()
 
     importExportGroup.writeEntry("StripBlanksOffOfTextValuesWhenImportingCSVFiles",
                                  m_chkStripWhiteSpaceInTextValues->isChecked());
+    importExportGroup.writeEntry("ImportNULLsAsEmptyText",
+                                 m_chkImportNULLsAsEmptyText->isChecked());
 
     KDialog::accept();
 }
diff --git a/kexi/plugins/importexport/csv/kexicsvimportoptionsdlg.h \
b/kexi/plugins/importexport/csv/kexicsvimportoptionsdlg.h index f6a29a1..c7785a5 \
                100644
--- a/kexi/plugins/importexport/csv/kexicsvimportoptionsdlg.h
+++ b/kexi/plugins/importexport/csv/kexicsvimportoptionsdlg.h
@@ -48,6 +48,7 @@ public:
     DateFormat dateFormat;
     bool defaultEncodingExplicitySet : 1;
     bool trimmedInTextValuesChecked : 1;
+    bool nullsImportedAsEmptyTextChecked: 1;
 };
 
 //! @short CSV Options dialog
@@ -67,6 +68,7 @@ protected:
     KexiCharacterEncodingComboBox *m_encodingComboBox;
     QCheckBox *m_chkAlwaysUseThisEncoding;
     QCheckBox *m_chkStripWhiteSpaceInTextValues;
+    QCheckBox *m_chkImportNULLsAsEmptyText;
     QComboBox *m_comboDateFormat;
 };
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic