iOS 11では、サブセレクションステートメントを使用してsqlite3_column_name
をSQLに使用すると、カラム名がテーブル接頭辞で返されます。subselectステートメントを使用したSQLのSQLiteカラム名がカラム名の前にテーブル名
など。この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の抜粋であるが、これはObjective-Cのか、スウィフトに固有のSQLiteの問題ではないことに注意):
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列目の3210名:
は、iOS 10.1で、これは報告b.bar_value:
SQLiteバージョン:3.14.0列0の
名前:foo_value列1の
名前:bar_valueを
なぜですか?
ところで、この問題は、SQLに副選択文が含まれている場合にのみ現れます。