aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPCopyTable.m
diff options
context:
space:
mode:
Diffstat (limited to 'Source/SPCopyTable.m')
-rw-r--r--Source/SPCopyTable.m143
1 files changed, 66 insertions, 77 deletions
diff --git a/Source/SPCopyTable.m b/Source/SPCopyTable.m
index e1b7e773..edf0fcf9 100644
--- a/Source/SPCopyTable.m
+++ b/Source/SPCopyTable.m
@@ -42,18 +42,17 @@
#import "SPAppController.h"
#import "SPTablesList.h"
-NSInteger MENU_EDIT_COPY = 2001;
-NSInteger MENU_EDIT_COPY_WITH_COLUMN = 2002;
-NSInteger MENU_EDIT_COPY_AS_SQL = 2003;
+NSInteger SPEditMenuCopy = 2001;
+NSInteger SPEditMenuCopyWithColumns = 2002;
+NSInteger SPEditCopyAsSQL = 2003;
-NSInteger kBlobExclude = 1;
-NSInteger kBlobInclude = 2;
-NSInteger kBlobAsFile = 3;
-NSInteger kBlobAsImageFile = 4;
+static const NSInteger kBlobExclude = 1;
+static const NSInteger kBlobInclude = 2;
+static const NSInteger kBlobAsFile = 3;
+static const NSInteger kBlobAsImageFile = 4;
@implementation SPCopyTable
-
/**
* Hold the selected range of the current table cell editor to be able to set this passed
* selection in the field editor's editTextView
@@ -64,25 +63,21 @@ NSInteger kBlobAsImageFile = 4;
/**
* Cell editing in SPCustomQuery or for views in SPTableContent
*/
-- (BOOL) isCellEditingMode
+- (BOOL)isCellEditingMode
{
-
return ([[self delegate] isKindOfClass:[SPCustomQuery class]]
|| ([[self delegate] isKindOfClass:[SPTableContent class]]
&& [(NSObject*)[self delegate] valueForKeyPath:@"tablesListInstance"]
&& [(SPTablesList*)([(NSObject*)[self delegate] valueForKeyPath:@"tablesListInstance"]) tableType] == SPTableTypeView));
-
}
/**
* Check if current edited cell represents a class other than a normal NSString
* like pop-up menus for enum or set
*/
-- (BOOL) isCellComplex
+- (BOOL)isCellComplex
{
-
return (![[self preparedCellAtColumn:[self editedColumn] row:[self editedRow]] isKindOfClass:[SPTextAndLinkCell class]]);
-
}
#pragma mark -
@@ -90,33 +85,29 @@ NSInteger kBlobAsImageFile = 4;
/**
* Handles the general Copy action of selected rows in the table according to sender
*/
-- (void) copy:(id)sender
+- (void)copy:(id)sender
{
#ifndef SP_REFACTOR /* copy table rows */
NSString *tmp = nil;
- if([sender tag] == MENU_EDIT_COPY_AS_SQL) {
+ if ([sender tag] == SPEditCopyAsSQL) {
tmp = [self rowsAsSqlInsertsOnlySelectedRows:YES];
- if ( nil != tmp )
- {
+
+ if (tmp != nil){
NSPasteboard *pb = [NSPasteboard generalPasteboard];
- [pb declareTypes:[NSArray arrayWithObjects: NSStringPboardType, nil]
- owner:nil];
+ [pb declareTypes:[NSArray arrayWithObjects: NSStringPboardType, nil] owner:nil];
[pb setString:tmp forType:NSStringPboardType];
}
- } else {
- tmp = [self rowsAsTabStringWithHeaders:([sender tag] == MENU_EDIT_COPY_WITH_COLUMN) onlySelectedRows:YES blobHandling:kBlobInclude];
- if ( nil != tmp )
- {
+ }
+ else {
+ tmp = [self rowsAsTabStringWithHeaders:([sender tag] == SPEditMenuCopyWithColumns) onlySelectedRows:YES blobHandling:kBlobInclude];
+
+ if (tmp != nil) {
NSPasteboard *pb = [NSPasteboard generalPasteboard];
- [pb declareTypes:[NSArray arrayWithObjects:
- NSTabularTextPboardType,
- NSStringPboardType,
- nil]
- owner:nil];
+ [pb declareTypes:[NSArray arrayWithObjects:NSTabularTextPboardType, NSStringPboardType, nil] owner:nil];
[pb setString:tmp forType:NSStringPboardType];
[pb setString:tmp forType:NSTabularTextPboardType];
@@ -130,7 +121,7 @@ NSInteger kBlobAsImageFile = 4;
* the value in each field is from the objects description method
*/
#ifndef SP_REFACTOR /* get rows as string */
-- (NSString *) rowsAsTabStringWithHeaders:(BOOL)withHeaders onlySelectedRows:(BOOL)onlySelected blobHandling:(NSInteger)withBlobHandling
+- (NSString *)rowsAsTabStringWithHeaders:(BOOL)withHeaders onlySelectedRows:(BOOL)onlySelected blobHandling:(NSInteger)withBlobHandling
{
if (onlySelected && [self numberOfSelectedRows] == 0) return nil;
@@ -268,7 +259,7 @@ NSInteger kBlobAsImageFile = 4;
* Get selected rows a string of newline separated lines of , separated fields wrapped into quotes
* the value in each field is from the objects description method
*/
-- (NSString *) rowsAsCsvStringWithHeaders:(BOOL)withHeaders onlySelectedRows:(BOOL)onlySelected blobHandling:(NSInteger)withBlobHandling
+- (NSString *)rowsAsCsvStringWithHeaders:(BOOL)withHeaders onlySelectedRows:(BOOL)onlySelected blobHandling:(NSInteger)withBlobHandling
{
if (onlySelected && [self numberOfSelectedRows] == 0) return nil;
@@ -408,21 +399,15 @@ NSInteger kBlobAsImageFile = 4;
* Return selected rows as SQL INSERT INTO `foo` VALUES (baz) string.
* If no selected table name is given `<table>` will be used instead.
*/
-- (NSString *) rowsAsSqlInsertsOnlySelectedRows:(BOOL)onlySelected
+- (NSString *)rowsAsSqlInsertsOnlySelectedRows:(BOOL)onlySelected
{
-
if (onlySelected && [self numberOfSelectedRows] == 0) return nil;
- NSIndexSet *selectedRows;
- if(onlySelected)
- selectedRows = [self selectedRowIndexes];
- else
- selectedRows = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [tableStorage count])];
-
- NSArray *columns = [self tableColumns];
- NSUInteger numColumns = [columns count];
+ NSIndexSet *selectedRows = (onlySelected) ? [self selectedRowIndexes] : [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [tableStorage count])];
- NSMutableString *value = [NSMutableString stringWithCapacity:10];
+ NSArray *columns = [self tableColumns];
+ NSUInteger numColumns = [columns count];
+ NSMutableString *value = [NSMutableString stringWithCapacity:10];
id cellData = nil;
@@ -435,14 +420,18 @@ NSInteger kBlobAsImageFile = 4;
// Create an array of table column names
NSMutableArray *tbHeader = [NSMutableArray arrayWithCapacity:numColumns];
- for (id enumObj in columns) {
+
+ for (id enumObj in columns)
+ {
[tbHeader addObject:[[enumObj headerCell] stringValue]];
}
// Create arrays of table column mappings and types for fast iteration
NSUInteger *columnMappings = malloc(numColumns * sizeof(NSUInteger));
NSUInteger *columnTypes = malloc(numColumns * sizeof(NSUInteger));
- for ( c = 0; c < numColumns; c++) {
+
+ for (c = 0; c < numColumns; c++)
+ {
columnMappings[c] = [[NSArrayObjectAtIndex(columns, c) identifier] unsignedIntValue];
NSString *t = [NSArrayObjectAtIndex(columnDefinitions, columnMappings[c]) objectForKey:@"typegrouping"];
@@ -471,12 +460,14 @@ NSInteger kBlobAsImageFile = 4;
NSUInteger rowIndex = [selectedRows firstIndex];
Class spTableContentClass = [SPTableContent class];
Class nsDataClass = [NSData class];
- while ( rowIndex != NSNotFound )
+
+ while (rowIndex != NSNotFound)
{
[value appendString:@"\t("];
cellData = nil;
rowCounter++;
- for ( c = 0; c < numColumns; c++ )
+
+ for (c = 0; c < numColumns; c++)
{
cellData = SPDataStorageObjectAtRowAndColumn(tableStorage, rowIndex, columnMappings[c]);
@@ -505,10 +496,11 @@ NSInteger kBlobAsImageFile = 4;
[value appendString:@"NULL, "];
continue;
- } else if (cellData) {
+ }
+ else if (cellData) {
// Check column type and insert the data accordingly
- switch(columnTypes[c]) {
+ switch (columnTypes[c]) {
// Convert numeric types to unquoted strings
case 0:
@@ -538,48 +530,53 @@ NSInteger kBlobAsImageFile = 4;
}
// If nil is encountered, abort
- } else {
+ }
+ else {
NSBeep();
free(columnMappings);
free(columnTypes);
+
return nil;
}
}
// Remove the trailing ', ' from the query
- if ( [value length] > 2 )
- [value deleteCharactersInRange:NSMakeRange([value length]-2, 2)];
-
+ if ([value length] > 2) {
+ [value deleteCharactersInRange:NSMakeRange([value length] - 2, 2)];
+ }
+
valueLength += [value length];
// Close this VALUES group and set up the next one if appropriate
- if ( rowCounter != penultimateRowIndex ) {
+ if (rowCounter != penultimateRowIndex) {
// Add a new INSERT starter command every ~250k of data.
- if ( valueLength > 250000 ) {
+ if (valueLength > 250000) {
[result appendFormat:@"%@);\n\nINSERT INTO %@ (%@)\nVALUES\n",
value,
[(selectedTable == nil) ? @"<table>" : selectedTable backtickQuotedString],
[tbHeader componentsJoinedAndBacktickQuoted]];
[value setString:@""];
valueLength = 0;
- } else {
+ }
+ else {
[value appendString:@"),\n"];
}
- } else {
+ }
+ else {
[value appendString:@"),\n"];
[result appendString:value];
}
// Get the next selected row index
rowIndex = [selectedRows indexGreaterThanIndex:rowIndex];
-
}
// Remove the trailing ",\n" from the query string
- if ( [result length] > 3 )
+ if ([result length] > 3) {
[result deleteCharactersInRange:NSMakeRange([result length]-2, 2)];
+ }
[result appendString:@";\n"];
@@ -844,7 +841,6 @@ NSInteger kBlobAsImageFile = 4;
- (NSMenu *)menuForEvent:(NSEvent *)event
{
-
NSMenu *menu = [self menu];
#ifndef SP_REFACTOR /* menuForEvent: */
@@ -912,7 +908,6 @@ NSInteger kBlobAsImageFile = 4;
}
[bundleSubMenuItem release];
-
}
#endif
return menu;
@@ -921,8 +916,7 @@ NSInteger kBlobAsImageFile = 4;
- (void)selectTableRows:(NSArray*)rowIndices
{
-
- if(!rowIndices || ![rowIndices count]) return;
+ if (!rowIndices || ![rowIndices count]) return;
NSMutableIndexSet *selection = [NSMutableIndexSet indexSet];
#ifndef SP_REFACTOR
@@ -940,14 +934,13 @@ NSInteger kBlobAsImageFile = 4;
[self selectRowIndexes:selection byExtendingSelection:NO];
}
-
}
/**
* Only have the copy menu item enabled when row(s) are selected in
* supported tables.
*/
-- (BOOL) validateMenuItem:(NSMenuItem*)anItem
+- (BOOL)validateMenuItem:(NSMenuItem*)anItem
{
#ifndef SP_REFACTOR /* validateMenuItem: */
NSInteger menuItemTag = [anItem tag];
@@ -957,7 +950,7 @@ NSInteger kBlobAsImageFile = 4;
}
// Don't validate anything other than the copy commands
- if (menuItemTag != MENU_EDIT_COPY && menuItemTag != MENU_EDIT_COPY_WITH_COLUMN && menuItemTag != MENU_EDIT_COPY_AS_SQL) {
+ if (menuItemTag != SPEditMenuCopy && menuItemTag != SPEditMenuCopyWithColumns && menuItemTag != SPEditCopyAsSQL) {
return YES;
}
@@ -967,12 +960,12 @@ NSInteger kBlobAsImageFile = 4;
}
// Enable the Copy [with column names] commands if a row is selected
- if (menuItemTag == MENU_EDIT_COPY || menuItemTag == MENU_EDIT_COPY_WITH_COLUMN) {
+ if (menuItemTag == SPEditMenuCopy || menuItemTag == SPEditMenuCopyWithColumns) {
return ([self numberOfSelectedRows] > 0);
}
// Enable the Copy as SQL commands if rows are selected and column definitions are available
- if (menuItemTag == MENU_EDIT_COPY_AS_SQL) {
+ if (menuItemTag == SPEditCopyAsSQL) {
return (columnDefinitions != nil && [self numberOfSelectedRows] > 0);
}
#endif
@@ -983,9 +976,8 @@ NSInteger kBlobAsImageFile = 4;
* Trap the enter, escape, tab and arrow keys, overriding default behaviour and continuing/ending editing,
* only within the current row.
*/
-- (BOOL) control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)command
+- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)command
{
-
NSInteger row, column;
row = [self editedRow];
@@ -1103,9 +1095,8 @@ NSInteger kBlobAsImageFile = 4;
return NO;
}
-- (void) keyDown:(NSEvent *)theEvent
+- (void)keyDown:(NSEvent *)theEvent
{
-
// RETURN or ENTER invoke editing mode for selected row
// by calling tableView:shouldEditTableColumn: to validate
@@ -1412,28 +1403,26 @@ NSInteger kBlobAsImageFile = 4;
SPBeginAlertSheet(NSLocalizedString(@"BASH Error", @"bash error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [self window], self, nil, nil,
[NSString stringWithFormat:@"%@ “%@”:\n%@", NSLocalizedString(@"Error for", @"error for message"), [cmdData objectForKey:@"name"], errorMessage]);
}
-
}
if (cmdData) [cmdData release];
-
}
#endif
}
#pragma mark -
-- (void) awakeFromNib
+- (void)awakeFromNib
{
columnDefinitions = nil;
prefs = [[NSUserDefaults standardUserDefaults] retain];
- if ([NSTableView instancesRespondToSelector:@selector(awakeFromNib)])
+ if ([NSTableView instancesRespondToSelector:@selector(awakeFromNib)]) {
[super awakeFromNib];
-
+ }
}
-- (void) dealloc
+- (void)dealloc
{
if (columnDefinitions) [columnDefinitions release];
#ifndef SP_REFACTOR