diff --git a/CHANGELOG b/CHANGELOG index 8b66ce2171..a812b8f129 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,7 @@ === HEAD +* Add an Database#sqlite_version method when connecting to SQLite, used to determine feature support (jeremyevans) + * Fix rolling back transactions when connecting to Oracle via JDBC (jeremyevans) * Fix syntax errors when connecting to MSSQL via the dbi adapter (jeremyevans) (#292) diff --git a/lib/sequel/adapters/shared/sqlite.rb b/lib/sequel/adapters/shared/sqlite.rb index b20fb29f83..b2e4deabfe 100644 --- a/lib/sequel/adapters/shared/sqlite.rb +++ b/lib/sequel/adapters/shared/sqlite.rb @@ -65,9 +65,21 @@ def pragma_set(name, value) execute_ddl("PRAGMA #{name} = #{value}") end - # SQLite supports savepoints + # The version of the server as an integer, where 3.6.19 = 30619. + # If the server version can't be determined, 0 is used. + def sqlite_version + return @server_version if defined?(@server_version) + @server_version = begin + v = get{sqlite_version{}} + [10000, 100, 1].zip(v.split('.')).inject(0){|a, m| a + m[0] * Integer(m[1])} + rescue + 0 + end + end + + # SQLite 3.6.8+ supports savepoints. def supports_savepoints? - true + sqlite_version >= 30608 end # A symbol signifying the value of the synchronous PRAGMA.