Skip to content

Commit 74ca20e

Browse files
committed
Merge branch 'master' of github.com:CopyIsRight/GoldDigger
2 parents b8e9663 + 27e3513 commit 74ca20e

File tree

3 files changed

+41
-14
lines changed

3 files changed

+41
-14
lines changed

Pod/SQL/GDGEntity+SQL.m

100644100755
+11-10
Original file line numberDiff line numberDiff line change
@@ -297,18 +297,19 @@ - (BOOL)save:(NSError **)error
297297
saved = [db.table update:values error:error];
298298
}
299299
else
300-
saved = [db.table insert:values error:error];
301-
302-
if (saved && !exists && self.id == nil)
303-
self.id = [db.table lastInsertedId];
300+
{
301+
int insertId = [db.table insert:values error:error];
302+
self.id = [NSNumber numberWithInt:insertId];
303+
saved = self.id != nil ? true : false;
304+
}
304305

305306
for (GDGRelation *relation in relations)
306-
{
307-
BOOL success = [relation save:self error:error];
308-
if (!success || *error) {
309-
return NO;
310-
}
311-
}
307+
{
308+
BOOL success = [relation save:self error:error];
309+
if (!success || error != nil) {
310+
return NO;
311+
}
312+
}
312313

313314
if (saved)
314315
[self.changedProperties removeAllObjects];

Pod/SQL/SQLTableSource.h

100644100755
+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
- (CIRStatement *)deleteStatement;
3535

36-
- (BOOL)insert:(NSDictionary <NSString *, id> *)values error:(NSError **)error;
36+
- (int)insert:(NSDictionary <NSString *, id> *)values error:(NSError **)error;
3737

3838
- (BOOL)update:(NSDictionary <NSString *, id> *)values error:(NSError **)error;
3939

Pod/SQL/SQLTableSource.m

100644100755
+29-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
//
77

88
#import <SQLAid/CIRDatabase.h>
9+
#import <SQLAid/CIRStatement.h>
10+
11+
#import <sqlite3/sqlite3.h> // TODO
12+
913
#import <ObjectiveSugar/NSArray+ObjectiveSugar.h>
1014
#import "SQLTableSource.h"
1115

@@ -234,15 +238,37 @@ - (CIRStatement *)deleteStatement
234238

235239
#pragma mark Execute
236240

237-
- (BOOL)insert:(NSDictionary <NSString *, id> *)values error:(NSError **)error
241+
- (int)insert:(NSDictionary <NSString *, id> *)values error:(NSError **)error
238242
{
243+
NSNumber *i;
244+
sqlite3 *handler = _databaseProvider.database.handler;
245+
int code = 0;
246+
const char *errMessage;
247+
248+
code = sqlite3_exec(handler, [@"DROP TABLE IF EXISTS temp._temp" UTF8String], 0, 0, &errMessage);
249+
code = sqlite3_exec(handler, [@"CREATE TEMP TABLE IF NOT EXISTS _temp (id INTEGER NOT NULL PRIMARY KEY)" UTF8String], 0, 0, &errMessage);
250+
code = sqlite3_exec(handler, [[NSString stringWithFormat:@"CREATE TEMP TRIGGER _trigger AFTER INSERT ON main.%@ BEGIN INSERT INTO _temp SELECT NEW.id; END", _name, _name] UTF8String], 0, 0, &errMessage);
251+
239252
NSString *insertString = [self insertStringForColumns:[values allKeys]];
240253
BOOL succeeded = [_databaseProvider.database executeUpdate:insertString withNamedParameters:values error:error];
241254
if (!succeeded && error)
242255
*error = [NSError errorWithDomain:@"com.CopyIsRight.GoldDigger" code:kDEFAULT_ERROR_CODE
243-
userInfo:@{NSLocalizedDescriptionKey : _databaseProvider.database.lastErrorMessage}];
256+
userInfo:@{NSLocalizedDescriptionKey : _databaseProvider.database.lastErrorMessage}];
244257

245-
return succeeded;
258+
code = sqlite3_exec(handler, [@"DROP TRIGGER _trigger;" UTF8String], 0, 0, &errMessage);
259+
260+
sqlite3_stmt *stmt;
261+
code = sqlite3_prepare_v2(handler, [@"SELECT id FROM temp._temp ORDER BY id DESC" UTF8String], -1, &stmt, 0);
262+
263+
if (sqlite3_step(stmt) == SQLITE_ROW)
264+
i = [NSNumber numberWithInt:sqlite3_column_int(stmt, 0)];
265+
266+
sqlite3_reset(stmt);
267+
sqlite3_finalize(stmt);
268+
269+
code = sqlite3_exec(handler, [@"DELETE FROM temp._temp" UTF8String], 0, 0, &errMessage);
270+
271+
return i.intValue;
246272
}
247273

248274
- (BOOL)update:(NSDictionary <NSString *, id> *)values error:(NSError **)error

0 commit comments

Comments
 (0)