From e83978c06efee794faa0603c6e6653fd1647b26a Mon Sep 17 00:00:00 2001 From: Bibiko Date: Thu, 11 Nov 2010 22:47:42 +0000 Subject: =?UTF-8?q?=E2=80=A2=20some=20sequelpro://...@passToDoc/ExecuteQue?= =?UTF-8?q?ry/csv=20improvements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/SPDatabaseDocument.m | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'Source/SPDatabaseDocument.m') diff --git a/Source/SPDatabaseDocument.m b/Source/SPDatabaseDocument.m index 04660b28..96a6aa3e 100644 --- a/Source/SPDatabaseDocument.m +++ b/Source/SPDatabaseDocument.m @@ -4423,11 +4423,16 @@ } else if([command isEqualToString:@"ExecuteQuery"]) { + + // Bail if document is busy if (_isWorkingLevel) return; + NSString *outputFormat = @"tab"; if([params count] == 2) outputFormat = [params objectAtIndex:1]; + BOOL writeAsCsv = ([outputFormat isEqualToString:@"csv"]) ? YES : NO; + NSString *queryFileName = [NSString stringWithFormat:@"/private/tmp/SP_QUERY_%@", docProcessID]; NSString *resultFileName = [NSString stringWithFormat:@"/private/tmp/SP_QUERY_RESULT_%@", docProcessID]; NSString *metaFileName = [NSString stringWithFormat:@"/private/tmp/SP_QUERY_RESULT_META_%@", docProcessID]; @@ -4446,27 +4451,42 @@ [fm removeItemAtPath:statusFileName error:nil]; if(inError == nil && query && [query length]) { + SPFileHandle *fh = [SPFileHandle fileHandleForWritingAtPath:resultFileName]; - if(!fh) - NSLog(@"Couldn't create file handle to %@", resultFileName); + if(!fh) NSLog(@"Couldn't create file handle to %@", resultFileName); + MCPResult *theResult = [mySQLConnection queryString:query]; [theResult setReturnDataAsStrings:YES]; if ([mySQLConnection queryErrored]) { - [fh writeData:[[NSString stringWithFormat:@"Error.\nMySQL said: %@", [mySQLConnection getLastErrorMessage]] dataUsingEncoding:NSUTF8StringEncoding]]; + [fh writeData:[[NSString stringWithFormat:@"MySQL said: %@", [mySQLConnection getLastErrorMessage]] dataUsingEncoding:NSUTF8StringEncoding]]; status = @"1"; } else { + + // write header + if(writeAsCsv) + [fh writeData:[[[theResult fetchFieldNames] componentsJoinedAsCSV] dataUsingEncoding:NSUTF8StringEncoding]]; + else + [fh writeData:[[[theResult fetchFieldNames] componentsJoinedByString:@"\t"] dataUsingEncoding:NSUTF8StringEncoding]]; + [fh writeData:[[NSString stringWithString:@"\n"] dataUsingEncoding:NSUTF8StringEncoding]]; + + // write data if ([theResult numOfRows]) [theResult dataSeek:0]; NSInteger i; NSArray *theRow; for ( i = 0 ; i < [theResult numOfRows] ; i++ ) { theRow = [theResult fetchRowAsArray]; - [fh writeData:[[theRow componentsJoinedByString:@"\t"] dataUsingEncoding:NSUTF8StringEncoding]]; + if(writeAsCsv) + [fh writeData:[[theRow componentsJoinedAsCSV] dataUsingEncoding:NSUTF8StringEncoding]]; + else + [fh writeData:[[theRow componentsJoinedByString:@"\t"] dataUsingEncoding:NSUTF8StringEncoding]]; [fh writeData:[[NSString stringWithString:@"\n"] dataUsingEncoding:NSUTF8StringEncoding]]; } } [fh closeFile]; } } + + // write status file as notification that query was finished BOOL succeed = [status writeToFile:statusFileName atomically:YES encoding:NSUTF8StringEncoding error:nil]; if(!succeed) { NSBeep(); -- cgit v1.2.3