aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBibiko <bibiko@eva.mpg.de>2010-03-02 13:45:46 +0000
committerBibiko <bibiko@eva.mpg.de>2010-03-02 13:45:46 +0000
commit300e2cb06db621fb7f651b11e5e1c6bb2f6fbd87 (patch)
tree70c557c2cb9560964fb1b4b6991178a7d60ecf22
parentecb95326374568a3cac41ed44c6c8aace0b26877 (diff)
downloadsequelpro-300e2cb06db621fb7f651b11e5e1c6bb2f6fbd87.tar.gz
sequelpro-300e2cb06db621fb7f651b11e5e1c6bb2f6fbd87.tar.bz2
sequelpro-300e2cb06db621fb7f651b11e5e1c6bb2f6fbd87.zip
• CSV Field Mapper
- REPLACE as import method is only enabled if target table has a primary key or at least one field which is set to unique - if user set a field to "Ignore Field" display as "import value" the field's default value greyed - some minor code cosmetics
-rw-r--r--Source/SPFieldMapperController.h2
-rw-r--r--Source/SPFieldMapperController.m37
-rw-r--r--Source/TableDump.m2
3 files changed, 28 insertions, 13 deletions
diff --git a/Source/SPFieldMapperController.h b/Source/SPFieldMapperController.h
index 5bca61d0..e7f0aa18 100644
--- a/Source/SPFieldMapperController.h
+++ b/Source/SPFieldMapperController.h
@@ -54,7 +54,6 @@
IBOutlet CMTextView *onupdateTextView;
IBOutlet id advancedButton;
-
id theDelegate;
id fieldMappingImportArray;
@@ -66,6 +65,7 @@
NSMutableArray *fieldMappingOperatorOptions;
NSMutableArray *fieldMappingOperatorArray;
NSMutableArray *fieldMappingGlobalValues;
+ NSMutableArray *fieldMappingTableDefaultValues;
NSNumber *doImport;
NSNumber *doNotImport;
diff --git a/Source/SPFieldMapperController.m b/Source/SPFieldMapperController.m
index ccf94f99..a4e75efc 100644
--- a/Source/SPFieldMapperController.m
+++ b/Source/SPFieldMapperController.m
@@ -53,7 +53,7 @@
}
theDelegate = managerDelegate;
fieldMappingTableColumnNames = [[NSMutableArray alloc] init];
- // fieldMappingTableDefaultValues = [[NSMutableArray alloc] init];
+ fieldMappingTableDefaultValues = [[NSMutableArray alloc] init];
fieldMappingTableTypes = [[NSMutableArray alloc] init];
fieldMappingButtonOptions = [[NSMutableArray alloc] init];
fieldMappingOperatorOptions = [[NSMutableArray alloc] init];
@@ -122,6 +122,7 @@
if (fieldMappingOperatorOptions) [fieldMappingOperatorOptions release];
if (fieldMappingOperatorArray) [fieldMappingOperatorArray release];
if (fieldMappingGlobalValues) [fieldMappingGlobalValues release];
+ if (fieldMappingTableDefaultValues) [fieldMappingTableDefaultValues release];
[super dealloc];
}
@@ -231,13 +232,14 @@
// Remove all the current columns
[fieldMappingTableColumnNames removeAllObjects];
- // [fieldMappingTableDefaultValues removeAllObjects];
+ [fieldMappingTableDefaultValues removeAllObjects];
[fieldMappingTableTypes removeAllObjects];
// Retrieve the information for the newly selected table using a SPTableData instance
SPTableData *selectedTableData = [[SPTableData alloc] init];
[selectedTableData setConnection:mySQLConnection];
NSDictionary *tableDetails = [selectedTableData informationForTable:[tableTargetPopup titleOfSelectedItem]];
+ BOOL isReplacePossible = NO;
if (tableDetails) {
for (NSDictionary *column in [tableDetails objectForKey:@"columns"]) {
@@ -252,11 +254,17 @@
if([column objectForKey:@"isprimarykey"]) {
[type appendFormat:@",%@",@"PRIMARY"];
+ [fieldMappingTableDefaultValues addObject:@"auto_increment"];
+ isReplacePossible = YES;
} else {
- if([column objectForKey:@"unique"])
+ if([column objectForKey:@"unique"]) {
[type appendFormat:@",%@",@"UNIQUE"];
+ isReplacePossible = YES;
+ }
if ([column objectForKey:@"default"])
- [type appendFormat:@",%@",[column objectForKey:@"default"]];
+ [fieldMappingTableDefaultValues addObject:[column objectForKey:@"default"]];
+ else
+ [fieldMappingTableDefaultValues addObject:@"NULL"];
}
[fieldMappingTableTypes addObject:[NSString stringWithString:type]];
@@ -264,6 +272,8 @@
}
[selectedTableData release];
+ [[importMethodPopup menu] setAutoenablesItems:NO];
+ [[importMethodPopup itemWithTitle:@"REPLACE"] setEnabled:isReplacePossible];
// Update the table view
fieldMappingCurrentRow = 0;
@@ -573,10 +583,9 @@
- (void)setupFieldMappingArray
{
NSInteger i, value;
-
- if (!fieldMappingArray) {
- fieldMappingArray = [[NSMutableArray alloc] init];
-
+
+ if (!fieldMappingArray) {
+ fieldMappingArray = [[NSMutableArray alloc] init];
for (i = 0; i < [fieldMappingTableColumnNames count]; i++) {
if (i < [NSArrayObjectAtIndex(fieldMappingImportArray, fieldMappingCurrentRow) count]
&& ![NSArrayObjectAtIndex(NSArrayObjectAtIndex(fieldMappingImportArray, fieldMappingCurrentRow), i) isKindOfClass:[NSNull class]]) {
@@ -588,7 +597,7 @@
[fieldMappingArray addObject:[NSNumber numberWithInteger:value]];
}
}
-
+
[fieldMapperTableView reloadData];
}
@@ -701,7 +710,7 @@
if(aTableView == fieldMapperTableView) {
if([[aTableColumn identifier] isEqualToString:@"import_value"] && [importFieldNamesHeaderSwitch state] == NSOnState) {
- if ([fieldMappingOperatorArray objectAtIndex:rowIndex] == doNotImport) return @"";
+ if ([fieldMappingOperatorArray objectAtIndex:rowIndex] == doNotImport) return [NSString stringWithFormat:@"DEFAULT: %@", [fieldMappingTableDefaultValues objectAtIndex:rowIndex]];
if([NSArrayObjectAtIndex(fieldMappingArray, rowIndex) integerValue]>=[NSArrayObjectAtIndex(fieldMappingImportArray, 0) count])
return [NSString stringWithFormat:@"%@: %@", NSLocalizedString(@"Global value", @"global value"), NSArrayObjectAtIndex(fieldMappingGlobalValues, [NSArrayObjectAtIndex(fieldMappingArray, rowIndex) integerValue])];
@@ -765,6 +774,7 @@
if ([[aTableColumn dataCell] isKindOfClass:[NSPopUpButtonCell class]]) {
NSPopUpButtonCell *c = [aTableColumn dataCell];
NSMenu *m = [c menu];
+ [m setAutoenablesItems:NO];
[c removeAllItems];
[c addItemsWithTitles:fieldMappingButtonOptions];
[m addItem:[NSMenuItem separatorItem]];
@@ -773,10 +783,15 @@
[c addItemWithTitle:NSLocalizedString(@"Import all fields", @"import all fields menu item")];
[m addItem:[NSMenuItem separatorItem]];
[c addItemWithTitle:NSLocalizedString(@"Add global value…", @"add global value menu item")];
+ [c addItemWithTitle:[NSString stringWithFormat:@"DEFAULT: %@", [fieldMappingTableDefaultValues objectAtIndex:rowIndex]]];
+ [[m itemAtIndex:[c numberOfItems]-1] setEnabled:NO];
- // Hide csv file column value if user doesn't want to import it
+ // If user doesn't want to import it show its DEFAULT value otherwise hide it.
if([fieldMappingOperatorArray objectAtIndex:rowIndex] != doNotImport)
return [fieldMappingArray objectAtIndex:rowIndex];
+ else
+ return [NSNumber numberWithInteger:[c numberOfItems]-1];
+
}
}
diff --git a/Source/TableDump.m b/Source/TableDump.m
index 5385a053..4d6e93ef 100644
--- a/Source/TableDump.m
+++ b/Source/TableDump.m
@@ -953,7 +953,7 @@
[singleProgressSheet makeKeyWindow];
// Set up the field names import string for INSERT or REPLACE INTO
- [insertBaseString appendFormat:@"%@", csvImportHeaderString];
+ [insertBaseString appendString:csvImportHeaderString];
[insertBaseString appendString:[selectedTableTarget backtickQuotedString]];
[insertBaseString appendString:@" ("];
insertBaseStringHasEntries = NO;