|
6 | 6 | //
|
7 | 7 |
|
8 | 8 | #import <SQLAid/CIRDatabase.h>
|
| 9 | +#import <SQLAid/CIRStatement.h> |
| 10 | + |
| 11 | +#import <sqlite3/sqlite3.h> // TODO |
| 12 | + |
9 | 13 | #import <ObjectiveSugar/NSArray+ObjectiveSugar.h>
|
10 | 14 | #import "SQLTableSource.h"
|
11 | 15 |
|
@@ -234,15 +238,37 @@ - (CIRStatement *)deleteStatement
|
234 | 238 |
|
235 | 239 | #pragma mark Execute
|
236 | 240 |
|
237 |
| -- (BOOL)insert:(NSDictionary <NSString *, id> *)values error:(NSError **)error |
| 241 | +- (int)insert:(NSDictionary <NSString *, id> *)values error:(NSError **)error |
238 | 242 | {
|
| 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 | + |
239 | 252 | NSString *insertString = [self insertStringForColumns:[values allKeys]];
|
240 | 253 | BOOL succeeded = [_databaseProvider.database executeUpdate:insertString withNamedParameters:values error:error];
|
241 | 254 | if (!succeeded && error)
|
242 | 255 | *error = [NSError errorWithDomain:@"com.CopyIsRight.GoldDigger" code:kDEFAULT_ERROR_CODE
|
243 |
| - userInfo:@{NSLocalizedDescriptionKey : _databaseProvider.database.lastErrorMessage}]; |
| 256 | + userInfo:@{NSLocalizedDescriptionKey : _databaseProvider.database.lastErrorMessage}]; |
244 | 257 |
|
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; |
246 | 272 | }
|
247 | 273 |
|
248 | 274 | - (BOOL)update:(NSDictionary <NSString *, id> *)values error:(NSError **)error
|
|
0 commit comments