Procházet zdrojové kódy

Implemented accessor for offsets() in a result set.

Andrew Goodale před 11 roky
rodič
revize
2962886457
2 změnil soubory, kde provedl 46 přidání a 1 odebrání
  1. 28 1
      src/fts3/FMDatabase+FTS3.h
  2. 18 0
      src/fts3/FMDatabase+FTS3.m

+ 28 - 1
src/fts3/FMDatabase+FTS3.h

@@ -64,4 +64,31 @@ typedef struct FMTokenizerCursor
 
 - (void)closeTokenizerCursor:(FMTokenizerCursor *)cursor;
 
-@end
+@end
+
+#pragma mark
+
+struct FMTextOffsets
+{
+    uint32_t columnNumber;
+    uint32_t termNumber;
+    NSRange  matchRange;    // NOTE: This range is in bytes, not characters!
+};
+typedef struct FMTextOffsets FMTextOffsets;
+
+/**
+ A category that adds support for the encoded data returned by FTS3 functions.
+ */
+@interface FMResultSet (FTS3)
+
+/**
+ Returns a structure containing values from the `offsets()` function. Make sure the column index corresponds
+ to the column index in the SQL query.
+ 
+ @param columnIdx Zero-based index for column.
+ 
+ @return `FMTextOffsets` structure.
+ */
+- (FMTextOffsets)offsetsForColumnIndex:(int)columnIdx;
+
+@end

+ 18 - 0
src/fts3/FMDatabase+FTS3.m

@@ -209,3 +209,21 @@ - (BOOL)issueCommand:(NSString *)command forTable:(NSString *)tableName
 }
 
 @end
+
+#pragma mark
+
+@implementation FMResultSet (FTS3)
+
+- (FMTextOffsets)offsetsForColumnIndex:(int)columnIdx
+{
+    // The offsets() value is a space separated string of 4 integers
+    uint32_t offsetInts[4];
+    const char *rawOffsets = (const char *)sqlite3_column_text([_statement statement], columnIdx);
+    
+    sscanf(rawOffsets, "%u %u %u %u", &offsetInts[0], &offsetInts[1], &offsetInts[2], &offsetInts[3]);
+    
+    FMTextOffsets offsets = { offsetInts[0], offsetInts[1], NSMakeRange(offsetInts[2], offsetInts[3]) };
+    return offsets;
+}
+
+@end