diff options
author | abhibeckert <abhi@abhibeckert.com> | 2008-04-04 11:37:36 +0000 |
---|---|---|
committer | abhibeckert <abhi@abhibeckert.com> | 2008-04-04 11:37:36 +0000 |
commit | 0f586da34dac2c764a12055158e4929cf69340a1 (patch) | |
tree | bca3868c9715a10c08017a0a7b6d5148f8bd3556 /CMMCPResult.m | |
parent | 5fb284b7c12887b8eea6c3a02fa83abf50793992 (diff) | |
download | sequelpro-0f586da34dac2c764a12055158e4929cf69340a1.tar.gz sequelpro-0f586da34dac2c764a12055158e4929cf69340a1.tar.bz2 sequelpro-0f586da34dac2c764a12055158e4929cf69340a1.zip |
Initial import from (slightly modified) CocoaMySQL v0.7b4
Diffstat (limited to 'CMMCPResult.m')
-rw-r--r-- | CMMCPResult.m | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/CMMCPResult.m b/CMMCPResult.m new file mode 100644 index 00000000..7f02da25 --- /dev/null +++ b/CMMCPResult.m @@ -0,0 +1,153 @@ +// +// CMMCPResult.m +// CocoaMySQL +// +// Created by lorenz textor (lorenz@textor.ch) on Wed Sept 21 2005. +// Copyright (c) 2002-2003 Lorenz Textor. 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; either version 2 of the License, or +// (at your option) any later version. +// +// 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// More info at <http://cocoamysql.sourceforge.net/> +// Or mail to <lorenz@textor.ch> + +#import "CMMCPResult.h" + + +@implementation CMMCPResult + +- (id) fetchRowAsType:(MCPReturnType) aType +/*" +modified version for use with CocoaMySQL +"*/ +{ + MYSQL_ROW theRow; + unsigned long *theLengths; + MYSQL_FIELD *theField; + int i; + id theReturn; + + if (mResult == NULL) { +// If there is no results, returns nil, as after the last row... + return nil; + } + + theRow = mysql_fetch_row(mResult); + if (theRow == NULL) { + return nil; + } + + switch (aType) { + case MCPTypeArray: + theReturn = [NSMutableArray arrayWithCapacity:mNumOfFields]; + break; + case MCPTypeDictionary: + if (mNames == nil) { + [self fetchFieldNames]; + } + theReturn = [NSMutableDictionary dictionaryWithCapacity:mNumOfFields]; + break; + default : + NSLog (@"Unknown type : %d, will return an Array!\n", aType); + theReturn = [NSMutableArray arrayWithCapacity:mNumOfFields]; + break; + } + + theLengths = mysql_fetch_lengths(mResult); + theField = mysql_fetch_fields(mResult); + for (i=0; i<mNumOfFields; i++) { + id theCurrentObj; + + if (theRow[i] == NULL) { + theCurrentObj = [NSNull null]; + } + else { + char *theData = calloc(sizeof(char),theLengths[i]+1); +// char *theUselLess; + memcpy(theData, theRow[i],theLengths[i]); + theData[theLengths[i]] = '\0'; + + switch (theField[i].type) { + case FIELD_TYPE_TINY: + case FIELD_TYPE_SHORT: + case FIELD_TYPE_INT24: + case FIELD_TYPE_LONG: + case FIELD_TYPE_LONGLONG: + case FIELD_TYPE_DECIMAL: + case FIELD_TYPE_FLOAT: + case FIELD_TYPE_DOUBLE: + theCurrentObj = [self stringWithCString:theData]; + break; + case FIELD_TYPE_TIMESTAMP: + case FIELD_TYPE_DATE: + case FIELD_TYPE_TIME: + case FIELD_TYPE_DATETIME: + case FIELD_TYPE_YEAR: + theCurrentObj = [self stringWithCString:theData]; + break; + case FIELD_TYPE_VAR_STRING: + case FIELD_TYPE_STRING: + theCurrentObj = [self stringWithCString:theData]; + break; + case FIELD_TYPE_TINY_BLOB: + case FIELD_TYPE_BLOB: + case FIELD_TYPE_MEDIUM_BLOB: + case FIELD_TYPE_LONG_BLOB: + theCurrentObj = [NSData dataWithBytes:theData length:theLengths[i]]; + if (!(theField[i].flags & BINARY_FLAG)) { // It is TEXT and NOT BLOB... + theCurrentObj = [self stringWithText:theCurrentObj]; + } +//#warning Should check for TEXT (using theField[i].flag BINARY_FLAG) + break; + case FIELD_TYPE_SET: + theCurrentObj = [self stringWithCString:theData]; + break; + case FIELD_TYPE_ENUM: + theCurrentObj = [self stringWithCString:theData]; + break; + case FIELD_TYPE_NULL: + theCurrentObj = [NSNull null]; + break; + case FIELD_TYPE_NEWDATE: +// Don't know what the format for this type is... + theCurrentObj = [self stringWithCString:theData]; + break; + default: + NSLog (@"in fetchRowAsDictionary : Unknown type : %d for column %d, send back a NSData object", (int)theField[i].type, (int)i); + theCurrentObj = [NSData dataWithBytes:theData length:theLengths[i]]; + break; + } + free(theData); +// Some of the creators return nil object... + if (theCurrentObj == nil) { + theCurrentObj = [NSNull null]; + } + } + switch (aType) { + case MCPTypeArray : + [theReturn addObject:theCurrentObj]; + break; + case MCPTypeDictionary : + [theReturn setObject:theCurrentObj forKey:[mNames objectAtIndex:i]]; + break; + default : + [theReturn addObject:theCurrentObj]; + break; + } + } + + return theReturn; +} + +@end |