From 3a36cb08687aa337efca4dff12d20901d4d8029e Mon Sep 17 00:00:00 2001 From: gkemmey Date: Thu, 13 Sep 2018 16:00:51 -0400 Subject: SQLite3 adapter supports expression indexes --- .../active_record/connection_adapters/sqlite3/schema_statements.rb | 6 +++++- .../lib/active_record/connection_adapters/sqlite3_adapter.rb | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/sqlite3/schema_statements.rb index 24e7bc65fa..0e254455b6 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite3/schema_statements.rb @@ -21,12 +21,16 @@ module ActiveRecord WHERE name = #{quote(row['name'])} AND type = 'index' SQL - /\sWHERE\s+(?.+)$/i =~ index_sql + /\sON\s+"(\w+?)"\s+\((?.+?)\)(\sWHERE\s+(?.+))?$/i =~ index_sql columns = exec_query("PRAGMA index_info(#{quote(row['name'])})", "SCHEMA").map do |col| col["name"] end + if columns.any?(&:nil?) # index created with an expression + columns = expressions.split(", ").map { |e| e.gsub(/^\"|\"?$/, "") } + end + # Add info on sort order for columns (only desc order is explicitly specified, asc is # the default) orders = {} diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb index efe454fa7f..51f4944808 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb @@ -125,6 +125,10 @@ module ActiveRecord true end + def supports_expression_index? + sqlite_version >= "3.9.0" + end + def requires_reloading? true end -- cgit v1.2.3