Explorar o código

Merge branch 'robertmryan-master'

August Mueller %!s(int64=11) %!d(string=hai) anos
pai
achega
7eeb72d77b
Modificáronse 2 ficheiros con 31 adicións e 4 borrados
  1. 27 0
      Tests/FMDatabaseTests.m
  2. 4 4
      src/fmdb/FMDatabase.m

+ 27 - 0
Tests/FMDatabaseTests.m

@@ -872,4 +872,31 @@ - (void)testExecuteStatements
     XCTAssertTrue(success, @"bulk drop");
 }
 
+- (void)testCharAndBoolTypes
+{
+    XCTAssertTrue([self.db executeUpdate:@"create table charBoolTest (a, b, c)"]);
+
+    BOOL success = [self.db executeUpdate:@"insert into charBoolTest values (?, ?, ?)", @YES, @NO, @('x')];
+    XCTAssertTrue(success, @"Unable to insert values");
+
+    FMResultSet *rs = [self.db executeQuery:@"select * from charBoolTest"];
+    XCTAssertNotNil(rs);
+
+    XCTAssertTrue([rs next], @"Did not return row");
+
+    XCTAssertEqual([rs boolForColumn:@"a"], true);
+    XCTAssertEqualObjects([rs objectForColumnName:@"a"], @YES);
+
+    XCTAssertEqual([rs boolForColumn:@"b"], false);
+    XCTAssertEqualObjects([rs objectForColumnName:@"b"], @NO);
+
+    XCTAssertEqual([rs intForColumn:@"c"], 'x');
+    XCTAssertEqualObjects([rs objectForColumnName:@"c"], @('x'));
+
+    [rs close];
+
+    XCTAssertTrue([self.db executeUpdate:@"drop table charBoolTest"], @"Did not drop table");
+
+}
+
 @end

+ 4 - 4
src/fmdb/FMDatabase.m

@@ -550,10 +550,7 @@ - (void)bindObject:(id)obj toColumn:(int)idx inStatement:(sqlite3_stmt*)pStmt {
     }
     else if ([obj isKindOfClass:[NSNumber class]]) {
         
-        if (strcmp([obj objCType], @encode(BOOL)) == 0) {
-            sqlite3_bind_int(pStmt, idx, ([obj boolValue] ? 1 : 0));
-        }
-        else if (strcmp([obj objCType], @encode(char)) == 0) {
+        if (strcmp([obj objCType], @encode(char)) == 0) {
             sqlite3_bind_int(pStmt, idx, [obj charValue]);
         }
         else if (strcmp([obj objCType], @encode(unsigned char)) == 0) {
@@ -589,6 +586,9 @@ - (void)bindObject:(id)obj toColumn:(int)idx inStatement:(sqlite3_stmt*)pStmt {
         else if (strcmp([obj objCType], @encode(double)) == 0) {
             sqlite3_bind_double(pStmt, idx, [obj doubleValue]);
         }
+        else if (strcmp([obj objCType], @encode(BOOL)) == 0) {
+            sqlite3_bind_int(pStmt, idx, ([obj boolValue] ? 1 : 0));
+        }
         else {
             sqlite3_bind_text(pStmt, idx, [[obj description] UTF8String], -1, SQLITE_STATIC);
         }