我想使用SQLite FTS3(实际上是FTS4)来索引具有整数列的表,概念上是这样的:
CREATE VIRTUAL TABLE whole (document INTEGER, page INTEGER, content TEXT,
UNIQUE(document, page)) USING fts4();
Run Code Online (Sandbox Code Playgroud)
我知道FTS3将除rowid之外的所有列都视为TEXT,因此我将不得不使用两个表:
CREATE VIRTUAL TABLE data USING fts4();
CREATE TABLE metadata(document INTEGER, page INTEGER, UNIQUE(document, page));
Run Code Online (Sandbox Code Playgroud)
我希望能够查询文档或给定文档中的页面:
SELECT DISTINCT document FROM metadata NATURAL JOIN data WHERE content MATCH 'foo';
SELECT page FROM metadata NATURAL JOIN data
WHERE document = 123 AND content MATCH 'foo';
Run Code Online (Sandbox Code Playgroud)
我认为NATURAL JOIN要求我确保rowid保持同步,但最好的方法是什么?我应该使用FOREIGN KEY还是其他约束?子选择会比连接更好吗?
我想插入已存在于数据库中的文档和页面来覆盖文本内容.这可能通过SQL以编程方式进行,还是我必须检查信息表中是否已存在该行?
对于给定的文档,我也想要从两个表中删除 - 有没有办法在单个语句中执行此操作?
感谢所有建议,但由于我是一个SQL新手,代码示例特别赞赏!
更新:我不清楚如何在这里创建外键约束.如果我选择metadata作为父表(在没有双向约束的情况下,这将是我的偏好):
PRAGMA foreign_keys = ON;
CREATE TABLE metadata (document INTEGER, …Run Code Online (Sandbox Code Playgroud) 有很多的网站,详细说明为什么你会在文章并不想使用Apache默认的i节点的mtime大小格式ETag的.
但是我还没有读到任何可能促使Apache首先包含inode的内容.从表面上看,只有在需要能够区分相同资源的八位字节八位字符传真时才有用,但这肯定与ETag的目的相反.
Apache的作者并不以他们对互联网标准的草率处理而闻名,因此我觉得我必须遗漏一些东西.谁能详细说明?
编辑:我在这里问这个,而不是在ServerFault.com上,因为我正在实现一个Web服务器,而不是管理一个.要详细了解为什么这是一个坏主意,请参阅此处或此处.所有这些文章都推荐相同的东西:从你的etags中删除inode.问题是,他们在那里有什么优势吗?
iOS 7中的照片应用程序允许您选择多张照片,点击"共享"并显示文档交互控制器以及多个项目的相应选项.
Camera应用程序更进一步,甚至可以在您选择和取消选择照片时实时更新文档交互控制器的选项.
但是,UIDocumentInteractionController类似乎只允许单个URL参数.
是否可以使用公共API执行照片和相机应用程序的操作?
今天我编写了一些C代码来使用带有自定义比较器功能的快速排序对结构数组进行排序,以确定它们的排序.
起初我用调用比特函数编写它,硬编码到quicksort函数中.然后我想也许将该函数作为参数传递给通用的快速排序函数会更好.
在我的原始代码中,我已经声明了比较器功能inline.在我的新代码中,我保留了inline声明,即使这对我来说没有多大意义,因为函数是作为参数传递的.但是,编译器没有抱怨!
我的问题是:inline声明在这里有任何影响,还是只是对编译器的建议被忽略了?
原始代码:
typedef struct _CGRect {
CGPoint origin;
CGSize size;
} CGRect;
typedef enum _NSComparisonResult {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
} NSComparisonResult;
static inline NSComparisonResult CGRectCompareRowsFirst(CGRect r1, CGRect r2)
{
if (r1.origin.y < r2.origin.y)
return NSOrderedAscending;
else if (r1.origin.y > r2.origin.y)
return NSOrderedDescending;
else
{
if (r1.origin.x < r2.origin.x)
return NSOrderedAscending;
else if (r1.origin.x > r2.origin.x)
return NSOrderedDescending;
else
return NSOrderedSame;
}
}
static void CGRectQuicksortRowsFirst(CGRect *left, CGRect *right)
{ …Run Code Online (Sandbox Code Playgroud)