aboutsummaryrefslogtreecommitdiffstats
path: root/Frameworks/PostgresKit/Source/PGPostgresTypeBinaryHandler.m
diff options
context:
space:
mode:
authorstuconnolly <stuart02@gmail.com>2012-09-27 22:49:52 +0000
committerstuconnolly <stuart02@gmail.com>2012-09-27 22:49:52 +0000
commit901180573c489a08ac4f22a05c0a80bc51307d5f (patch)
tree27f7cac294c36bbe3b6900a003aea95d777462e6 /Frameworks/PostgresKit/Source/PGPostgresTypeBinaryHandler.m
parenta12ab1dd775188342087b848653565d227dd8ecb (diff)
downloadsequelpro-901180573c489a08ac4f22a05c0a80bc51307d5f.tar.gz
sequelpro-901180573c489a08ac4f22a05c0a80bc51307d5f.tar.bz2
sequelpro-901180573c489a08ac4f22a05c0a80bc51307d5f.zip
Add a binary data handler.
Diffstat (limited to 'Frameworks/PostgresKit/Source/PGPostgresTypeBinaryHandler.m')
-rw-r--r--Frameworks/PostgresKit/Source/PGPostgresTypeBinaryHandler.m103
1 files changed, 103 insertions, 0 deletions
diff --git a/Frameworks/PostgresKit/Source/PGPostgresTypeBinaryHandler.m b/Frameworks/PostgresKit/Source/PGPostgresTypeBinaryHandler.m
new file mode 100644
index 00000000..f544fb39
--- /dev/null
+++ b/Frameworks/PostgresKit/Source/PGPostgresTypeBinaryHandler.m
@@ -0,0 +1,103 @@
+//
+// $Id$
+//
+// PGPostgresTypeBinaryHandler.m
+// PostgresKit
+//
+// Created by Stuart Connolly (stuconnolly.com) on September 28, 2012.
+// Copyright (c) 2012 Stuart Connolly. All rights reserved.
+//
+// Permission is hereby granted, free of charge, to any person
+// obtaining a copy of this software and associated documentation
+// files (the "Software"), to deal in the Software without
+// restriction, including without limitation the rights to use,
+// copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following
+// conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+
+#import "PGPostgresTypeBinaryHandler.h"
+
+static PGPostgresOid PGPostgresTypeBinaryTypes[] =
+{
+ PGPostgresOidByteData,
+ 0
+};
+
+@interface PGPostgresTypeBinaryHandler ()
+
+- (id)_binaryDataFromResult;
+
+@end
+
+
+@implementation PGPostgresTypeBinaryHandler
+
+@synthesize row = _row;
+@synthesize type = _type;
+@synthesize column = _column;
+@synthesize result = _result;
+
+#pragma mark -
+#pragma mark Protocol Implementation
+
+- (PGPostgresOid *)remoteTypes
+{
+ return PGPostgresTypeBinaryTypes;
+}
+
+- (Class)nativeClass
+{
+ return [NSString class];
+}
+
+- (NSArray *)classAliases
+{
+ return nil;
+}
+
+- (id)objectFromResult
+{
+ if (!_result || !_type) return [NSNull null];
+
+ switch (_type)
+ {
+ case PGPostgresOidByteData:
+ return [self _binaryDataFromResult];
+ }
+
+ return [NSNull null];
+}
+
+#pragma mark -
+#pragma mark Private API
+
+/**
+ * Converts a binary data value to an NSData instance.
+ *
+ * @return The NSData representation of the data.
+ */
+- (id)_binaryDataFromResult
+{
+ PGbytea data;
+
+ if (!PQgetf(_result, _row, PGPostgresResultValueByteA, _column)) return [NSNull null];
+
+ if (!data.data || !data.len) return [NSNull null];
+
+ return [NSData dataWithBytes:data.data length:data.len];
+}
+
+@end