【发布时间】:2017-11-06 17:36:08
【问题描述】:
在 iOS 11 中,如果您将 sqlite3_column_name 与带有子选择语句的 SQL 一起使用,它现在会返回带有表前缀的列名,而 iOS 10 则不会。
例如考虑这个 SQL:
SELECT f.foo_value, b.bar_value
FROM foo as f LEFT JOIN
(SELECT * FROM bar) AS b ON f.foo_id = b.foo_id
如果您随后使用 sqlite3_column_name 检索列名(注意这是 Objective-C sn-p,但这是 SQLite 问题,不是 Objective-C 或 Swift 独有的):
const char *name1 = sqlite3_column_name(statement, 0);
const char *name2 = sqlite3_column_name(statement, 1);
NSLog(@"SQLite version: %s", sqlite3_version);
NSLog(@"name of column 0: %s", name1);
NSLog(@"name of column 1: %s", name2);
在 iOS 11.1 中,这会报告:
SQLite 版本:3.19.3
第 0 列的名称:f.foo_value
第 1 列的名称:b.bar_value
在 iOS 10.1 中,此报告:
SQLite 版本:3.14.0
第 0 列的名称:foo_value
第 1 列的名称:bar_value
为什么?
顺便说一句,这个问题似乎只在 SQL 包含子选择语句时才会出现。
【问题讨论】: