@@ -50,7 +50,7 @@ final class SQLiteTests: XCTestCase {
5050 " \( SQLiteTests . testTable2. primaryKey) " INTEGER NOT NULL,
5151 " jsonData " BLOB NULL,
5252 " isDeleted " BOOLEAN DEFAULT 0 NOT NULL CHECK (isDeleted IN (0, 1)),
53- " updated " DATE NOT NULL,
53+ " updated " DATETIME NOT NULL,
5454 PRIMARY KEY( " \( SQLiteTests . testTable2. primaryKey) " AUTOINCREMENT)
5555 );
5656 """
@@ -75,7 +75,7 @@ final class SQLiteTests: XCTestCase {
7575 " textColumn " TEXT NULL,
7676 " realColumn " DOUBLE NULL,
7777 " blobColumn " BLOB NULL,
78- " dateColumn " DATE NULL,
78+ " dateColumn " DATETIME NULL,
7979 PRIMARY KEY( " \( SQLiteTests . testTable3. primaryKey) " AUTOINCREMENT)
8080 );
8181 """
@@ -222,7 +222,7 @@ final class SQLiteTests: XCTestCase {
222222 XCTAssertEqual ( row![ 0 ] . value as! Int , 1 ) // "rowid" INTEGER NOT NULL
223223 XCTAssertEqual ( String ( data: ( row![ 1 ] . value as! Data ) , encoding: . utf8) , " jsonString " ) // "jsonData" BLOB NULL
224224 XCTAssertEqual ( row![ 2 ] . value as! Bool , false ) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
225- XCTAssertEqual ( ( row![ 3 ] . value as! Date ) . stripTime ( ) , Date ( ) . stripTime ( ) ) // "updated" DATE NOT NULL
225+ XCTAssertEqual ( ( row![ 3 ] . value as! Date ) . stripTime ( ) , Date ( ) . stripTime ( ) ) // "updated" DATETIME NOT NULL
226226 }
227227
228228 func testInsertRow_whenInvalidSqlStatement( ) {
@@ -236,6 +236,33 @@ final class SQLiteTests: XCTestCase {
236236 XCTAssertEqual ( rowCount!, 0 )
237237 }
238238
239+ func testInsertRow_whenInsertingMultipleRows( ) {
240+ try ? SQLiteTests . sqlite? . createTable ( sql: SQLiteTests . sqlCreateTestTable)
241+
242+ var rowCount = try ? SQLiteTests . sqlite? . getRowCount ( in: SQLiteTests . testTable)
243+ XCTAssertNotNil ( rowCount)
244+ XCTAssertEqual ( rowCount!, 0 )
245+
246+ let sqlStatement = " INSERT INTO \( SQLiteTests . testTable. name) (searchId, sortId, json) VALUES (?, ?, ?), (?, ?, ?); "
247+ let numberOfInsertedRows = try ? SQLiteTests . sqlite? . insertRow ( sql: sqlStatement, params: [ " searchId " , 2 , " jsonString_2 " , " searchId " , 1 , " jsonString_1 " ] )
248+ XCTAssertNotNil ( numberOfInsertedRows)
249+ XCTAssertEqual ( numberOfInsertedRows!, 2 )
250+
251+ rowCount = try ? SQLiteTests . sqlite? . getRowCount ( in: SQLiteTests . testTable)
252+ XCTAssertNotNil ( rowCount)
253+ XCTAssertEqual ( rowCount!, 2 )
254+
255+ let rows = try ? SQLiteTests . sqlite? . getAllRows ( from: SQLiteTests . testTable)
256+ XCTAssertNotNil ( rows)
257+ XCTAssertEqual ( rows!. count, 2 )
258+ let firstRow = rows!. first
259+ XCTAssertEqual ( firstRow!. count, 4 )
260+ XCTAssertEqual ( firstRow![ 0 ] . value as! Int , 1 ) // "id" INTEGER NOT NULL
261+ XCTAssertEqual ( firstRow![ 1 ] . value as! String , " searchId " ) // "searchId" CHAR(255) NOT NULL
262+ XCTAssertEqual ( firstRow![ 2 ] . value as! Int , 2 ) // "sortId" INT NOT NULL
263+ XCTAssertEqual ( firstRow![ 3 ] . value as! String , " jsonString_2 " ) // "json" TEXT NOT NULL
264+ }
265+
239266 func testReplaceRow( ) {
240267 try ? SQLiteTests . sqlite? . createTable ( sql: SQLiteTests . sqlCreateTestTable)
241268
@@ -303,7 +330,7 @@ final class SQLiteTests: XCTestCase {
303330 XCTAssertEqual ( row![ 0 ] . value as! Int , 1 ) // "rowid" INTEGER NOT NULL
304331 XCTAssertEqual ( row![ 1 ] . value as? Data , nil ) // "jsonData" BLOB NULL
305332 XCTAssertEqual ( row![ 2 ] . value as! Bool , true ) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
306- XCTAssertEqual ( ( row![ 3 ] . value as! Date ) . stripTime ( ) , updateDate. stripTime ( ) ) // "updated" DATE NOT NULL
333+ XCTAssertEqual ( ( row![ 3 ] . value as! Date ) . stripTime ( ) , updateDate. stripTime ( ) ) // "updated" DATETIME NOT NULL
307334 }
308335
309336 func testUpdateRow_whenInvalidId( ) {
@@ -337,7 +364,6 @@ final class SQLiteTests: XCTestCase {
337364 XCTAssertEqual ( updateChanges, 2 )
338365 }
339366
340- sqlStatement = " SELECT * FROM \( SQLiteTests . testTable2. name) "
341367 let rows = try ? SQLiteTests . sqlite? . getAllRows ( from: SQLiteTests . testTable2)
342368 XCTAssertNotNil ( rows)
343369 XCTAssertEqual ( rows!. count, 2 )
@@ -347,14 +373,14 @@ final class SQLiteTests: XCTestCase {
347373 XCTAssertEqual ( firstRow [ 0 ] . value as! Int , 1 ) // "rowid" INTEGER NOT NULL
348374 XCTAssertEqual ( String ( data: ( firstRow [ 1 ] . value as! Data ) , encoding: . utf8) , " jsonString " )
349375 XCTAssertEqual ( firstRow [ 2 ] . value as! Bool , true ) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
350- XCTAssertEqual ( ( firstRow [ 3 ] . value as! Date ) . stripTime ( ) , Date ( ) . stripTime ( ) ) // "updated" DATE NOT NULL
376+ XCTAssertEqual ( ( firstRow [ 3 ] . value as! Date ) . stripTime ( ) , Date ( ) . stripTime ( ) ) // "updated" DATETIME NOT NULL
351377
352378 let secondRow = rows![ 1 ]
353379 XCTAssertEqual ( secondRow. count, 4 )
354380 XCTAssertEqual ( secondRow [ 0 ] . value as! Int , 2 ) // "rowid" INTEGER NOT NULL
355381 XCTAssertEqual ( String ( data: ( secondRow [ 1 ] . value as! Data ) , encoding: . utf8) , " jsonString_1 " )
356382 XCTAssertEqual ( secondRow [ 2 ] . value as! Bool , true ) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
357- XCTAssertEqual ( ( secondRow [ 3 ] . value as! Date ) . stripTime ( ) , Date ( ) . stripTime ( ) ) // "updated" DATE NOT NULL
383+ XCTAssertEqual ( ( secondRow [ 3 ] . value as! Date ) . stripTime ( ) , Date ( ) . stripTime ( ) ) // "updated" DATETIME NOT NULL
358384 }
359385
360386 func testDeleteRow( ) {
@@ -520,7 +546,7 @@ final class SQLiteTests: XCTestCase {
520546 XCTAssertEqual ( firstRow [ 0 ] . value as! Int , 1 ) // "rowid" INTEGER NOT NULL
521547 XCTAssertEqual ( firstRow [ 1 ] . value as? Data , nil ) // "jsonData" BLOB NULL
522548 XCTAssertEqual ( firstRow [ 2 ] . value as! Bool , false ) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
523- XCTAssertEqual ( ( firstRow [ 3 ] . value as! Date ) . stripTime ( ) , Date ( ) . stripTime ( ) ) // "updated" DATE NOT NULL
549+ XCTAssertEqual ( ( firstRow [ 3 ] . value as! Date ) . stripTime ( ) , Date ( ) . stripTime ( ) ) // "updated" DATETIME NOT NULL
524550 } else {
525551 XCTFail ( )
526552 }
@@ -532,8 +558,7 @@ final class SQLiteTests: XCTestCase {
532558 let _ = try ? SQLiteTests . sqlite? . insertRow ( sql: sqlStatement)
533559 let _ = try ? SQLiteTests . sqlite? . insertRow ( sql: sqlStatement)
534560
535- sqlStatement = " SELECT * FROM \( SQLiteTests . testTable3. name) "
536- rows = try ? SQLiteTests . sqlite? . getRow ( from: SQLiteTests . testTable3, sql: sqlStatement)
561+ rows = try ? SQLiteTests . sqlite? . getAllRows ( from: SQLiteTests . testTable3)
537562 XCTAssertNotNil ( rows)
538563 XCTAssertEqual ( rows!. count, 2 )
539564 if let firstRow = rows!. first {
@@ -544,7 +569,7 @@ final class SQLiteTests: XCTestCase {
544569 XCTAssertEqual ( firstRow [ 3 ] . value as? String , nil ) // "textColumn" TEXT NULL
545570 XCTAssertEqual ( firstRow [ 4 ] . value as? Double , nil ) // "realColumn" DOUBLE NULL
546571 XCTAssertEqual ( firstRow [ 5 ] . value as? Data , nil ) // "blobColumn" BLOB NULL
547- XCTAssertEqual ( firstRow [ 6 ] . value as? Date , nil ) // "dateColumn" DATE NULL
572+ XCTAssertEqual ( firstRow [ 6 ] . value as? Date , nil ) // "dateColumn" DATETIME NULL
548573 } else {
549574 XCTFail ( )
550575 }
@@ -565,7 +590,7 @@ final class SQLiteTests: XCTestCase {
565590 XCTAssertEqual ( rows!. count, 2 )
566591
567592 let firstRow = rows![ 0 ]
568- XCTAssertEqual ( firstRow. count, 3 )
593+ XCTAssertEqual ( firstRow. count, 3 ) // despite the fact that testTable contains 4 columns, the resulting table of this query contains 3 columns (without searchId)
569594 XCTAssertEqual ( firstRow [ 0 ] . value as! Int , 1 ) // "id" INTEGER NOT NULL
570595 XCTAssertEqual ( firstRow [ 1 ] . value as! Int , 1 ) // "sortId" INT NOT NULL
571596 XCTAssertEqual ( firstRow [ 2 ] . value as! String , " jsonString_1 " ) // "json" TEXT NOT NULL
@@ -647,7 +672,7 @@ final class SQLiteTests: XCTestCase {
647672 XCTAssertEqual ( row![ 0 ] . value as! Int , 2 ) // "rowid" INTEGER NOT NULL
648673 XCTAssertEqual ( String ( data: ( row![ 1 ] . value as! Data ) , encoding: . utf8) , " jsonString_1 " ) // "jsonData" BLOB NULL
649674 XCTAssertEqual ( row![ 2 ] . value as! Bool , false ) // "isDeleted" BOOLEAN DEFAULT 0 NOT NULL
650- XCTAssertEqual ( ( row![ 3 ] . value as! Date ) . stripTime ( ) , Date ( ) . stripTime ( ) ) // "updated" DATE NOT NULL
675+ XCTAssertEqual ( ( row![ 3 ] . value as! Date ) . stripTime ( ) , Date ( ) . stripTime ( ) ) // "updated" DATETIME NOT NULL
651676 }
652677
653678 func testGetByID_whenInvalidId( ) {
@@ -661,6 +686,40 @@ final class SQLiteTests: XCTestCase {
661686 XCTAssertNil ( row)
662687 }
663688
689+ func testGetByID_whenUsingDate( ) {
690+ try ? SQLiteTests . sqlite? . createTable ( sql: SQLiteTests . sqlCreateTestTable3)
691+
692+ // Insert in date format
693+ let sqlStatement = " INSERT INTO \( SQLiteTests . testTable3. name) (dateColumn) VALUES (?); "
694+ let nowDate = Date ( )
695+ let _ = try ? SQLiteTests . sqlite? . insertRow ( sql: sqlStatement, params: [ nowDate] )
696+
697+ let lastInsertId = SQLiteTests . sqlite? . getLastInsertID ( ) // should be 1
698+ XCTAssertNotNil ( lastInsertId)
699+ let row = try ? SQLiteTests . sqlite? . getByID ( from: SQLiteTests . testTable3, id: lastInsertId!)
700+ XCTAssertNotNil ( row)
701+ XCTAssertEqual ( row!. count, SQLiteTests . testTable3. columns. count) // should be 7
702+ XCTAssertEqual ( row![ 0 ] . value as! Int , lastInsertId!) // "id" INTEGER NOT NULL
703+ XCTAssertEqual ( ( row![ 6 ] . value as! Date ) . description, nowDate. description) // "dateColumn" DATETIME NULL
704+ }
705+
706+ func testGetByID_whenUsingTimeInterval( ) {
707+ try ? SQLiteTests . sqlite? . createTable ( sql: SQLiteTests . sqlCreateTestTable3)
708+
709+ // Insert in time interval format
710+ let sqlStatement = " INSERT INTO \( SQLiteTests . testTable3. name) (dateColumn) VALUES (?); "
711+ let secondsStamp = Int ( Date ( ) . timeIntervalSince1970)
712+ let _ = try ? SQLiteTests . sqlite? . insertRow ( sql: sqlStatement, params: [ secondsStamp] )
713+
714+ let lastInsertId = SQLiteTests . sqlite? . getLastInsertID ( ) // should be 1
715+ XCTAssertNotNil ( lastInsertId)
716+ let row = try ? SQLiteTests . sqlite? . getByID ( from: SQLiteTests . testTable3, id: lastInsertId!)
717+ XCTAssertNotNil ( row)
718+ XCTAssertEqual ( row!. count, SQLiteTests . testTable3. columns. count) // should be 7
719+ XCTAssertEqual ( row![ 0 ] . value as! Int , lastInsertId!) // "id" INTEGER NOT NULL
720+ XCTAssertEqual ( Int ( ( row![ 6 ] . value as! Date ) . timeIntervalSince1970) , secondsStamp) // "dateColumn" DATETIME NULL
721+ }
722+
664723 func testGetLastRow( ) {
665724 try ? SQLiteTests . sqlite? . createTable ( sql: SQLiteTests . sqlCreateTestTable)
666725
@@ -787,5 +846,3 @@ extension Date {
787846 return date!
788847 }
789848}
790-
791-
0 commit comments